首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python到CSV表?

Python到CSV表?
EN

Stack Overflow用户
提问于 2014-07-14 04:17:25
回答 2查看 1.7K关注 0票数 0

我想知道如何导入一个JSON文件,然后将其保存到一个有序的CSV文件中,其中包含标题行和下面的适用数据。

以下是JSON文件的样子:

代码语言:javascript
复制
 [
  {
    "firstName": "Nicolas Alexis Julio",
    "lastName": "N'Koulou N'Doubena",
    "nickname": "N. N'Koulou",
    "nationality": "Cameroon",
    "age": 24
  },
  {
    "firstName": "Alexandre Dimitri",
    "lastName": "Song-Billong",
    "nickname": "A. Song",
    "nationality": "Cameroon",
    "age": 26,
    etc. etc. + } ]

注有多个“键”(firstName、lastName、昵称等)。我想创建一个CSV文件与这些作为标题,然后适用的信息下的行,每一行都有一个球员的信息。

下面是我到目前为止为Python编写的脚本:

代码语言:javascript
复制
import urllib2
import json
import csv

writefilerows = csv.writer(open('WCData_Rows.csv',"wb+"))


api_key = "xxxx"
url = "http://worldcup.kimonolabs.com/api/players?apikey=" + api_key + "&limit=1000"
json_obj = urllib2.urlopen(url)
readable_json = json.load(json_obj)
list_of_attributes = readable_json[0].keys()

print list_of_attributes


writefilerows.writerow(list_of_attributes)

for x in readable_json:
    writefilerows.writerow(x[list_of_attributes])

但是当我运行它时,我会得到一个"TypeError: unhashable type:'list'“错误。我仍然在学习Python (显然我想)。我已经在网上查过了(发现),如果不明确说明我想打印什么密钥,我就想不出怎么做……我不想单独列出每个键。

谢谢你的帮助/想法!请告诉我,如果我可以澄清或提供更多的信息。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-14 06:01:28

您的TypeError之所以出现,是因为您试图索引字典、使用列表的x、使用x[list_of_attributes]list_of_attributes。这不是python的工作方式。在本例中,您正在迭代readable_json,它将在每次迭代中返回一个字典。没有必要从这些数据中提取值来写出它们。

DictWriter应该给你你想要的东西。

代码语言:javascript
复制
import csv
[...]

def encode_dict(d, out_encoding="utf8"):    
    '''Encode dictionary to desired encoding, assumes incoming data in unicode'''
    encoded_d = {}
    for k, v in d.iteritems():
        k = k.encode(out_encoding)
        v = unicode(v).encode(out_encoding)        
        encoded_d[k] = v
    return encoded_d

list_of_attributes = readable_json[0].keys()
# sort fields in desired order
list_of_attributes.sort()

with open('WCData_Rows.csv',"wb+") as csv_out:
    writer = csv.DictWriter(csv_out, fieldnames=list_of_attributes)
    writer.writeheader()
    for data in readable_json:
        writer.writerow(encode_dict(data))

注意:这假设readable_json中的每个条目都有相同的字段。

票数 1
EN

Stack Overflow用户

发布于 2014-07-14 04:34:47

也许pandas可以这么做--但我最近尝试读JSON

代码语言:javascript
复制
import pandas as pd

df = pd.read_json( ... )

df.to_csv( ... )

csv

json

编辑:

代码语言:javascript
复制
data = ''' [
  {
    "firstName": "Nicolas Alexis Julio",
    "lastName": "N'Koulou N'Doubena",
    "nickname": "N. N'Koulou",
    "nationality": "Cameroon",
    "age": 24
  },
  {
    "firstName": "Alexandre Dimitri",
    "lastName": "Song-Billong",
    "nickname": "A. Song",
    "nationality": "Cameroon",
    "age": 26,
  }
]'''

import pandas as pd

df = pd.read_json(data)

print df

df.to_csv('results.csv')

结果:

代码语言:javascript
复制
   age             firstName            lastName nationality     nickname
0   24  Nicolas Alexis Julio  N'Koulou N'Doubena    Cameroon  N. N'Koulou
1   26     Alexandre Dimitri        Song-Billong    Cameroon      A. Song

使用pandas,您可以将其保存在csvexcel等中(甚至可以直接保存在数据库中)。

您可以对表中的数据进行一些操作,并将其显示为图形。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24729458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档