为什么python内置函数就像open()一样,行为如下所述

时间:2015-10-29 13:30:23

标签: python

运行此代码

def read_text():
    quotes = open("C:\Users\rajawatk\Desktop\movie_quotes.txt")  
    contents_of_file = quotes.read()   
    print(contents_of_file)    
    quotes.close()    
read_text()

以下是错误消息

显示IOError

如果通过指定读取权限运行以下代码

如果我们添加一个代表读取权限的r,如

quotes = open(r"C:\Users\rajawatk\Desktop\movie_quotes.txt")

Voila,代码工作我能够读取movie_quotes.txt文件,这里是输出

- 休斯顿,我们遇到了问题。 (阿波罗13号)

- 妈妈总是说,生活就像一盒巧克力。你永远不会知道你会得到什么。 (阿甘正传)

- 你无法处理真相。 (几个好男人)

- 我相信一切,我什么都不相信。 (在黑暗中射击)

2 个答案:

答案 0 :(得分:6)

  

如果我们添加一个代表读取权限的r,如

这不是r所代表的含义。字符串前面的r将其标记为原始字符串,这意味着斜杠不会被解释为转义字符。

"C:\Users\rajawatk"被定义为" C:\ Users"然后是回车,然后是" ajawatk" r"C:\Users\rajawatk"被定义为" C:\ Users"然后是斜线和字母r,接着是" ajawatk"。

您可能没有名称中带回车符的文件,因此前一版本不适合作为open的参数。

答案 1 :(得分:2)

您需要指定要打开文件的模式,“\”是需要转义的转义序列。在你的情况下。

    quotes = open("C:\\Users\\rajawatk\\Desktop\\movie_quotes.txt", "r") 

然而,指定一个完整的路径名是不好的做法。您应该使用os.path为您提供一个工作目录。如果你使用'/'来指定目录,那么你不需要转义,它可以在windows和linux上运行。

的内容
    my_dir = os.path.dirname(__file__) 
    file_path = os.path.join(my_dir, '../static/', 'movie_quotes.txt')

哪个会在姐妹静态目录中查找运行应用程序的目录中的文件。如果你想要它在同一目录中。

    my_dir = os.path.dirname(__file__) 
    file_path = os.path.join(my_dir, 'movie_quotes.txt')