如果文件不存在,Python 中的 open() 不会创建文件
- 2024-10-09 09:11:00
- admin 原创
- 83
问题描述:
如果文件存在,则以读/写方式打开文件的最佳方法是什么?如果文件不存在,则创建文件并以读/写方式打开文件的最佳方法是什么?从我读到的内容来看,file = open('myfile.dat', 'rw')
应该这样做,对吗?
它对我来说不起作用(Python 2.6.2),我想知道它是否是版本问题,或者不应该那样工作,或者什么。
封闭目录可由用户和组写入,而其他目录则不行(我在 Linux 系统上……换句话说权限是 775),确切的错误是:
IOError: no such file or directory.
解决方案 1:
您应该使用open
以下w+
模式:
file = open('myfile.dat', 'w+')
解决方案 2:
以下方法的优点是,即使在过程中引发异常,文件也会在块结束时正确关闭try-finally
。它相当于,但要短得多。
with open("file.txt","a+") as f:
f.write("Hello world!")
f.seek(4)
f.readline()
...
a+打开文件进行追加和读取。如果文件存在,则文件指针位于文件末尾。文件以追加模式打开。如果文件不存在,则创建一个新文件进行读写。- Python 文件模式
seek() 方法设置文件的当前位置。
例如f.seek(4, 0)
文件内容“Hello world!”将会是f.readline()
“o world!”
f.seek(pos [, (0|1|2)])
pos .. Number. Position of the r/w pointer
[] .. optionally
() .. one of ->
0 .. absolute position (default)
1 .. relative position to current
2 .. relative position from end
只允许使用“rwab+”字符;必须有一个“rwa”——请参阅 Stack Overflow 问题Python 文件模式详细信息。
解决方案 3:
'''
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]
解决方案 4:
最佳做法是使用下列方法:
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!
')
解决方案 5:
从 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)
解决方案 6:
将“rw”更改为“w+”
或者使用“a+”进行附加(不删除现有内容)
解决方案 7:
>>> import os
>>> if os.path.exists("myfile.dat"):
... f = file("myfile.dat", "r+")
... else:
... f = file("myfile.dat", "w")
r+
表示读/写。
解决方案 8:
对于 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(...)
因此,问题是with open
在目标目录存在之前无法创建文件。w
在这种情况下,我们需要创建它,然后模式就足够了。
解决方案 9:
使用:
import os
f_loc = r"C:UsersRussellDesktopmyfile.dat"
# Create the file if it does not exist
if not os.path.exists(f_loc):
open(f_loc, 'w').close()
# Open the file for appending and reading
with open(f_loc, 'a+') as f:
#Do stuff
注意:打开文件后必须关闭,使用上下文管理器是让 Python 为您处理此问题的一种好方法。
解决方案 10:
我的回答是:
file_path = 'myfile.dat'
try:
fp = open(file_path)
except IOError:
# If not exists, create the file
fp = open(file_path, 'w+')
解决方案 11:
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
。
解决方案 12:
我认为是r+
,不是rw
。我只是个初学者,这就是我在文档中看到的。
解决方案 13:
您想对文件做什么?只写入还是读写?
'w'
,'a'
将允许写入,如果文件不存在则创建该文件。
如果您需要读取文件,则在打开文件之前必须先确定该文件存在。您可以在打开文件之前测试其是否存在,或者使用 try/except。
解决方案 14:
使用 w+ 来写入文件,如果存在则截断,使用 r+ 来读取文件,如果不存在则创建一个但不写入(并返回 null),或者使用 a+ 来创建新文件或附加到现有文件。
解决方案 15:
如果您想打开它进行读写,我假设您不想在打开它时截断它,并且希望能够在打开后立即读取文件。所以这是我使用的解决方案:
file = open('myfile.dat', 'a+')
file.seek(0, 0)
解决方案 16:
所以您想将数据写入文件,但前提是该文件尚不存在?
这个问题很容易解决,只需使用鲜为人知的 x 模式来 open() 而不是通常的 w 模式即可。例如:
>>> with open('somefile', 'wt') as f:
... f.write('Hello
')
...
>>> with open('somefile', 'xt') as f:
... f.write('Hello
')
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
FileExistsError: [Errno 17] File exists: 'somefile'
>>>
如果文件是二进制模式,则使用模式xb而不是xt。
解决方案 17:
我根据以上答案的组合编写了这个函数。您可以在读写之前使用它来创建文件及其父目录。然后,如果您愿意,可以使用它来关闭它:
import os
import ntpath
def open_even_not_exists(filepath, mode='w+'):
if not ntpath.isdir(ntpath.dirname(filepath)):
os.mkdir(ntpath.dirname(filepath))
if not ntpath.exists(filepath):
open(filepath, 'w+').close()
return open(filepath, mode)
if __name__ == "__main__":
f = open_even_not_exists('file.txt')
# Do Stuff...
f.close()
*注意:这在我的项目中有效。您可以不返回任何内容,但是在复制此功能时要小心关闭。
解决方案 18:
有时错误与代码无关。它与其他问题有关,例如操作系统限制。我也遇到了同样的问题并尝试使用代码解决,但没有解决。我尝试手动创建文件但操作系统不允许我这样做。最后我发现问题出在操作系统限制上。所以我更改了根文件夹名称,问题就解决了。
解决方案 19:
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('
''Hello Ashok')
fhead = open('Learn Python.txt')
for line in fhead:
words = line.split()
print(words)
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件