协慌网

登录 贡献 社区

如果不存在,则 Python 中的 open()不会创建文件

如果文件以读 / 写方式打开,或者以不存在的方式创建,然后以读 / 写方式打开,最好的方法是什么?根据我的阅读, file = open('myfile.dat', 'rw')应该这样做,对吗?

它对我不起作用(Python 2.6.2),我想知道这是否是版本问题,或者不应该那样工作或做什么。

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

封闭目录可由用户和组而不是其他人(我在 Linux 系统上…… 因此权限 775)可写,确切的错误是:

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

答案

您应该在w+模式下open

file = open('myfile.dat', 'w+')

以下方法的优点是,即使在执行过程中引发了异常,文件也会在块的末尾正确关闭。它等效于try-finally ,但是要短得多。

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” 之一 - 请参阅 Stack Overflow 问题Python 文件模式详细信息

优良作法是使用以下方法:

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!\n')