写和打印产生不同的结果

时间:2014-05-22 23:17:21

标签: python json

我正在尝试解析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行,其中没有一行是空白的。

有人可以解释发生了什么吗?

1 个答案:

答案 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输出或写入文件之前