我正在尝试解析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行,其中没有一行是空白的。
有人可以解释发生了什么吗?
答案 0 :(得分:3)
我认为您看到的差异可能是由于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
>>>
这样可以说明你的空白行。当然,您还可以通过print将"\n"
附加到字符串中。所以万行== 10000新行加上我假设的544个新行已经在字符串中了..
>>> 10000 + 544
10544
现在对于文件中的545行..所以如果字符串中没有新行,我们需要一行文本。 544 "\n"
加上我们开始的行(1)
>>> 544 + 1
545
修改强>
如果你想复制print
ed输出,pythonic的方法就是在你'a'
文件时使用open()
标志:
outfile = open('test.json','a')
如果您想要转义换行符,您应该使用:
d = d.replace("\n", "\\n")
d = d.replace("\r", "\\r") # for Windows \r characters
在d
输出或写入文件之前