我的python代码未将JSON数据正确导入CSV

时间:2018-08-01 13:39:56

标签: python json export-to-csv

所以我正试图从文件导入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

2 个答案:

答案 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('.')做同样的事情