如果文件不存在,则创建该文件,然后以RW模式打开该文件

时间:2017-10-10 19:09:06

标签: python python-3.x file io

在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...

2 个答案:

答案 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

这需要更多代码,因为您必须手动跟踪文件句柄,这可能比您使用""上下文管理。