如果一个文件存在,那么以读/写的方式打开它,或者如果它不存在,那么创建它并以读/写的方式打开它,最好的方法是什么?从我读到的,file = open('myfile.dat', 'rw')应该这样做,对吗?

它不适合我(Python 2.6.2),我想知道这是版本问题,还是不应该这样工作或其他什么。

最重要的是,我只需要一个解决问题的办法。我对其他的东西很好奇,但我只需要一个好方法来做开头部分。

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

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


当前回答

对于Python 3+,我将这样做:

import os

os.makedirs('path/to/the/directory', exist_ok=True)

with open('path/to/the/directory/filename', 'w') as f:
    f.write(...)

因此,问题在于open不能在目标目录存在之前创建文件。我们需要创建它,在这种情况下w模式就足够了。

其他回答

'''
w  write mode
r  read mode
a  append mode

w+  create file if it doesn't exist and open it in write mode
r+  open for reading and writing. Does not create file.
a+  create file if it doesn't exist and open it in append mode
'''

例子:

file_name = 'my_file.txt'
f = open(file_name, 'w+')  # open file in write mode
f.write('python rules')
f.close()

[供参考,我使用的是Python 3.6.2版本]

输入w+表示写入文件,如果文件存在则截断,r+表示读取文件,如果文件不存在则创建一个文件但不写入(并返回null),或者输入+表示创建新文件或追加到现有文件。

我的回答:

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

对于Python 3+,我将这样做:

import os

os.makedirs('path/to/the/directory', exist_ok=True)

with open('path/to/the/directory/filename', 'w') as f:
    f.write(...)

因此,问题在于open不能在目标目录存在之前创建文件。我们需要创建它,在这种情况下w模式就足够了。

以下方法的优点是在块的末尾正确地关闭文件,即使在此过程中引发异常。它相当于try(最终),但要短得多。

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文件模式详细信息。