我正在尝试通过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/

10-13 02:07