使用“ with”方法在Python中保存文件

时间:2019-05-25 12:39:20

标签: python-2.7 tkinter

我想创建一个文件并将其保存为json格式。我发现的每个示例都指定了“打开”方法。我在Windows上使用Python 2.7。请帮助我了解为什么我第一次保存的文件需要“打开”。

我已经阅读了所有可以找到并研究此问题的教程,但是仍然没有运气。我不想在程序外部创建文件,然后让程序覆盖它。

这是我的代码:

def savefile():
    filename =  filedialog.asksaveasfilename(initialdir = 
    "./Documents/WorkingDirectory/",title = "Save file",filetypes = (("JSON 
    files","*.json"), ("All files", "*.")))
    with open(filename, 'r+') as currentfile:
        data = currentfile.read()
    print (data)

这是我得到的错误:

  

Tkinter回调Traceback中的异常(最近一次调用最后一次):
  调用中的文件“ C:\ Python27 \ lib \ lib-tk \ Tkinter.py”,行1542       在保存文件中返回self.func(* args)文件“ C:\ Users \ CurrentUser \ Desktop \ newproject.py”,行174       使用open(filename,'r +')作为当前文件:IOError:[Errno 2]没有这样的文件或目录:   u'C:/Users/CurrentUser/Documents/WorkingDirectory/test.json'

1 个答案:

答案 0 :(得分:2)

好,我知道了!问题是模式“ r +”。由于我正在创建文件,因此无需读写,只需写入即可。所以我将模式更改为“ w”,并进行了修复。我还添加了“ .json”,因此它将自动添加到文件名之后。

def savefile():
    filename =  filedialog.asksaveasfilename(initialdir = 
    "./Documents/WorkingDirectory/",title = "Save file",filetypes = (("JSON 
    files","*.json"), ("All files", "*.")))
    with open(filename + ".json", 'w') as currentfile:
        line1 = currentfile.write(stringone)
        line2 = currentfile.write(stringtwo)
        print (line1,line2)