为什么不让python写入这个打开的文件?

时间:2017-02-25 06:07:40

标签: python

我正在修改python(对语言相当缺乏经验)和文件i / o,并遇到以下错误:

ValueError: I/O operation on closed file.

非常简单,所以我放入了一个打印语句来检查outfile的状态,看看我的代码发生了什么:

import json

data = {'thing1' : 'foo', 'thing2' : 'bar'}

def writeToJSON():
    with open('data.json', 'w') as outfile:
        print outfile.closed    # outputs 'False', as expected
        jsonifiedData = json.dumps(data, indent=4, sort_keys=True, separators=(',', ':'), ensure_ascii=False)
        outfile.write(unicode(jsonifiedData))    # trace identifies this line as the issue

writeToJSON()

缩进似乎很干净,所以这里发生了什么?

该文件在运行时显示为打开状态,但解释器在传达之后立即抱怨写入该文件。

谢谢!

修改

添加了整个文件。

此外,这是运行blurp.py时的完整输出:

False
Traceback (most recent call last):
File "blurp.py", line 11, in <module>
  writeToJSON()
File "blurp.py", line 9, in writeToJSON
  outfile.write(unicode(jsonifiedData))
ValueError: I/O operation on closed file

2 个答案:

答案 0 :(得分:0)

不确定你身边的问题是什么,但我尝试了相同的代码(python 3.5)并且它正在运行。

>>> import json
>>> data = {'thing1' : 'foo', 'thing2' : 'bar'}
>>> def writeToJSON():
        with open('data.json', 'w') as outfile:
            print (outfile.closed)
            jsonifiedData = json.dumps(data, indent=4, sort_keys=True, separators=(',', ':'), ensure_ascii=False)
            outfile.write(str(jsonifiedData))
>>> writeToJSON()
False
>>>

和data.json的内容是

{
    "thing1":"foo",
    "thing2":"bar"
}

答案 1 :(得分:0)

@ rlee827精明而正确地提出了一个whitespacing问题的可能性。导致违规字符的空白由两个制表符和四个空格组成,这些在我的编辑器中是不可见的。用一个标签替换四个空格可以解决问题。

感谢所有帮助过的人,并感谢@ rlee827解决这个问题!