所以我正试图从文件导入json数据,并想导出为CSV文件。只有很少的标签(如“作者”和“标题”)可以在此代码中正常工作,但是当我尝试将其用于“抽象”时,它将csv的新列中的抽象单词分割开。在尝试split()之前,它对每个字符都执行相同操作
这是我的代码
import json
import csv
filename="abc.json"
csv_file= open('my.csv', 'w',encoding="utf-8")
csvwriter = csv.writer(csv_file)
with open(filename, 'r') as f:
for line in f:
data = json.loads(line)
if 'abstract' in data:
csvwriter.writerow(data['abstract'].split())
elif 'authors' in data:
csvwriter.writerow(data['authors'])
else:
f="my"
示例json文件可以从这里下载 http://s000.tinyupload.com/?file_id=28925213311182593120
答案 0 :(得分:1)
就像Ben所说,很高兴看到JSON文件中的示例,但是问题可能出在您如何尝试拆分抽象数据上。使用您现在正在做的事情,您正在要求它在每个空间进行拆分。如果您想按行拆分,请尝试以下操作:
if 'abstract' in data:
csvwriter.writerow(data['abstract'].split(","))
答案 1 :(得分:1)
在abstract
中发生此事件的原因是因为abstract
的值是一个字符串(相反,authors
的值是一个列表)。 writerow
收到一个可迭代对象,当您在python中迭代一个字符串时,每次都会收到一个字母。
因此,在使用split之前,python将字符串取为字符串并将其分为字母,因此每列给您一个字母。 使用split时,您将字符串转换为单词列表,因此在对其进行迭代时,每次都会得到一个单词。
如果要按句点分隔abstract
,请对.split('.')
做同样的事情