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

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

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

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

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


当前回答

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

R +表示读/写

其他回答

对于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模式就足够了。

import os, platform
os.chdir('c:\\Users\\MS\\Desktop')

try :
    file = open("Learn Python.txt","a")
    print('this file is exist')
except:
    print('this file is not exist')
file.write('\n''Hello Ashok')

fhead = open('Learn Python.txt')

for line in fhead:

    words = line.split()
print(words)

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

这个问题很容易通过使用鲜为人知的x模式来open()而不是通常的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。

从python 3.4开始,你应该使用pathlib来“触摸”文件。 这是一个比本文中建议的更优雅的解决方案。

from pathlib import Path

filename = Path('myfile.txt')
filename.touch(exist_ok=True)  # will create file, if it exists will do nothing
file = open(filename)

目录也是一样:

filename.mkdir(parents=True, exist_ok=True)

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