open - python关闭文件




Python中的open()不会创建一个文件,如果它不存在 (10)

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

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

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

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

更新:封闭目录可由用户和组写入,而不是其他(我在Linux系统上......换言之,权限为775),确切的错误是:

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


以下方法的优点是,即使在路上发生异常,文件在块结尾处也会正确关闭 。 这相当于try-finally ,但更短。

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

a +为追加和读取打开文件。 如果文件存在,文件指针位于文件末尾。 该文件以附加模式打开。 如果文件不存在,它会创建一个新的文件用于读写。 - 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” - 请参阅问题Python文件模式的详细信息


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

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

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


使用:

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

确保在打开它们后关闭这些文件。 with上下文管理器将为您做到这一点。


将“rw”更改为“w +”

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


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


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


所以你想写数据到一个文件,但只有当它不存在?。

这个问题很容易通过使用鲜为人知的x模式来打开()而不是通常的w模式来解决。 例如:

 >>> with open('somefile', 'wt') as f:
 ...     f.write('Hello\n')
...
>>> with open('somefile', 'xt') as f:
...     f.write('Hello\n')
...
 Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
FileExistsError: [Errno 17] File exists: 'somefile'
  >>>

如果文件是二进制模式,请使用模式xb而不是xt。


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

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')

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

r +表示读/写





file-permissions