我正在尝试通过JSON文件进行解析,并将字段的第一级值转换为其他文件。
我目前拥有的代码是:
outfile = open('test.json','w')
with open('sample.json') as data:
for line in data:
j = json.loads(line)
d = j["text"].encode('utf8')
outfile.write( d )
# print d
data.close()
outfile.close()
sample.json
文件有10000行,每行至少有一个不同级别的“文本”字段。我只需要第一级“文本”字段。奇怪的是,当我使用
outfile.write( d )
时,在我的test.json
文件中得到545行,其中有些是空白行,但是当我使用print d
时,我得到了10544行,其中没有一行是空白。有人可以解释发生了什么吗?
最佳答案
我相信您看到的差异可能是由于print
在输出的末尾添加了换行符而File.write()
却没有这样的事实引起的。更改
outfile.write( d )
至
outfile.write( "%s\n" % d )
要么
outfile.write( d + "\n" )
并且行数应该匹配。
至于空行...我只能推测,但看不到您的文字,这是这样的:
鉴于
File.write()
不会添加新行,并且您得到的一行包含545行,因此d
必须包含544个"\n"
字符。如果这些换行符落在字符串的末尾(我认为是这样),那么您将得到如下所示的结果:>>> d = "foobar\n"
>>> print d
foobar
>>>
这样就占了您的空白行。另外,当然,您还可以通过打印将
"\n"
附加到字符串中。所以10000行== 10000个换行符加上我假设的544个新行已经在字符串中了。>>> 10000 + 544
10544
现在,对于文件中的545行,..因此,如果字符串中没有新行,我们希望有一行文本。 544
"\n"
加上我们从(1)开始的行>>> 544 + 1
545
编辑:
如果要复制
print
输出,则pythonic方法是在'a'
文件时使用open()
标志,如下所示:outfile = open('test.json','a')
如果要转义换行符,请使用:
d = d.replace("\n", "\\n")
d = d.replace("\r", "\\r") # for Windows \r characters
在
d
输出或写入文件之前关于python - 书写和打印产生不同的结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23818600/