Python不会在文件不存在时写入:权限相关问题

0 投票
2 回答
1215 浏览
提问于 2025-04-20 15:54

我有以下的Python代码:

class Server(object):

  def __init__(self, options):
    self.data_file = '/etc/my_module/resources.json'

  # Triggered when new data is received
  def write(self, data):
    try:
      f = open(self.data_file, 'w')
      json.dump(data, f)
    except Exception, e:
      print e
    finally:
      f.close()

如果文件 /etc/my_module/resources.json 不存在,当我调用 write 方法时,就会出现错误信息:

[Errno 2] No such file or directory: '/etc/my_module/resources.json'

如果我手动创建这个文件,然后再调用 write 方法,所有的操作就都正常了,json数据也能写入文件。

我用sudo来运行我的应用程序: sudo python my_module.py,而且我已经把我的用户(vagrant)添加到了 /etc/sudoers 文件里。

所以,Python在文件不存在的时候不会创建这个文件,因为它认为没有权限去写入 /etc 这个目录,但如果文件已经存在,它就可以顺利写入。为什么会这样呢?

2 个回答

2

创建一个新文件的过程其实就是在文件夹里添加一个新的文件记录,这需要你对这个文件夹有写入权限。而如果你只是修改一个已经存在的文件,就不需要这个权限了。

4

更改

f = open(self.data_file, 'w')

f = open(self.data_file, 'w+')

撰写回答