在Python中我试图创建一个文件(如果它不存在),然后以读/写模式打开它。我能够表达的最简洁的方法是:
with os.fdopen(os.open('foo.bar', os.O_RDWR | os.O_CREAT), "r+") as f:
# read file contents...
# append new stuff...
有更好的方法吗?我应该检查if not os.path.exists('foo.bar')
,如果文件不存在则创建该文件,然后以“r +”模式打开文件?
本质上:
if not os.path.exists('foo.bar'):
os.makedirs('foo.bar') # or open('foo.bar', 'a').close()
with open('foo.bar', "r+") as f:
# read file contents...
# append new stuff...
答案 0 :(得分:1)
主要问题是,如果文件已存在,是否要截断该文件。
如果是,那么请执行:
with open("filename", "w+") as f:
f.write("Hello, world")
否则,请执行juanpa.arrivillaga建议:
with open("filename", "a+") as f
f.write("Hello, world")
" a +"打开文件并从文件末尾开始。查看documentation了解更多信息,了解其工作原理。
答案 1 :(得分:0)
第二个选项有点不确定,因为如果您的程序不是该文件的唯一用户/使用者,那么在开放之前进行测试会让您对比赛条件开放。
我可能会使用+并寻求回头
with open("file", "a+") as f:
f.seek(0)
f.read()
...
我想要考虑的其他事情就是抛弃python文件对象并直接使用os。
fd = os.open("file", os.O_RDWR | os.O_CREAT)
buffer = os.read(fd)
new_data = b'stuff to append'
os.write(fd, new_data)
os.close(fd)
etc
这需要更多代码,因为您必须手动跟踪文件句柄,这可能比您使用""上下文管理。