Python中的open()不会创build文件,如果它不存在

如果文件存在,或者如果不存在,将文件打开为读/写的最佳方式是什么?然后创build并以读/写方式打开文件? 从我读的file = open('myfile.dat', 'rw')应该这样做,对吧?

它不适合我(Python 2.6.2),我想知道是否是版本问题,或不应该这样或那样的工作。

底线是,我只需要一个问题的解决scheme。 我对其他的东西很好奇,但是我需要的只是做开幕式的一个好方法。

更新:封闭的目录是可写的用户和组,而不是其他(我在Linux系统…所以权限775换句话说),确切的错误是:

IOError:没有这样的文件或目录。

你应该使用file = open('myfile.dat', 'w+')

以下方法的优点在于,即使在程序段中引发了exception,文件在块的末尾也能正确closures 。 这相当于try-finally ,但要短得多。

 with open("file.dat","a+") as f: f.write(...) ... 

a +打开一个用于追加和阅读的文件。 如果文件存在,则文件指针位于文件末尾。 该文件以附加模式打开。 如果文件不存在,它将创build一个新的文件进行读写。 – Python文件模式

seek()方法设置文件的当前位置。

 f.seek(pos [, (0|1|2)]) pos .. position of the r/w pointer [] .. optionally () .. one of -> 0 .. absolute position 1 .. relative position to current 2 .. relative position from end 

只允许“rwab +”字符; 必须有“rwa”中的一个 – 请参阅Stack Overflow问题Python文件模式的详细信息

 >>> import os >>> if os.path.exists("myfile.dat"): ... f = file("myfile.dat", "r+") ... else: ... f = file("myfile.dat", "w") 

r +表示读/写

良好的做法是使用以下内容:

 import os writepath = 'some/path/to/file.txt' mode = 'a' if os.path.exists(writepath) else 'w' with open(writepath, mode) as f: f.write('Hello, world!\n') 

将“rw”更改为“w +”

或者使用“a +”来附加(不删除现有的内容)

我的答案:

 file_path = 'myfile.dat' try: fp = open(file_path) except IOError: # If not exists, create the file fp = open(file_path, 'w+') 

open('myfile.dat', 'a')为我工作,很好。

在py3k你的代码引发ValueError

 >>> open('myfile.dat', 'rw') Traceback (most recent call last): File "<pyshell#34>", line 1, in <module> open('myfile.dat', 'rw') ValueError: must have exactly one of read/write/append mode 

在python-2.6中引发IOError

我认为这是r + ,而不是rw 。 我只是一个开始,这就是我在文档中看到的。

你想用文件做什么? 只写信给它还是读写?

'w','a'将允许写入,如果文件不存在,将会创build该文件。

如果您需要从文件中读取文件,则在打开文件之前,文件必须存在。 您可以在打开它之前testing它的存在或使用try / except。

把w +写入文件,截断它是否存在,r +读取文件,创build一个如果不存在但不写入(和返回null)或一个+创build一个新的文件或附加到现有的。

使用:

 import os f_loc = r"C:\Users\Russell\Desktop\ip_addr.txt" if not os.path.exists(f_loc): open(f_loc, 'w').close() with open(f_loc) as f: #Do stuff 

确保在打开文件后closures这些文件。 with上下文pipe理器将为您做这个。