在python中访问另一个列表中的json列表

在python中访问另一个列表中的json列表,python,json,csv,Python,Json,Csv,我有一个json文件,我想转换成csv,下面是我的代码 data=[] with open('filename.json') as f: for line in f: data.append(json.loads(line)) f=csv.writer(open('filename.csv','wb+')) for item in data: f.writerow([item['locations'][0]['time']]) json中还包含三个列表,每个列表

我有一个json文件,我想转换成csv,下面是我的代码

data=[]
with open('filename.json') as f:
    for line in f:
        data.append(json.loads(line))
f=csv.writer(open('filename.csv','wb+'))
for item in data:
    f.writerow([item['locations'][0]['time']])
json中还包含三个列表,每个列表都有相同的属性名。我只能访问第一个列表中的数据;当我将
f.writerow([item['locations'][0]['time']])
更改为
f.writerow([item['locations'][-1]['time']])
时,我可以访问第一个和第三个列表(将第一个和第三个列表写入csv),但它跳过了第二个列表。如何访问每个列表(列表1-3)中的所有属性

这是我的json文件的一行的一部分

locations:[
{time : 1439319674334
longitude : 1.070336
local_time : "20:01:14:334 11 08 2015 +0100 GMT+01:00"
latitude : 51.2997804},
{time : 1439319694428
longitude : 1.0703332
local_time : "20:01:34:428 11 08 2015 +0100 GMT+01:00"
latitude : 51.2997889},

{time : 1439319714638
longitude : 1.0703123
local_time : "20:01:54:638 11 08 2015 +0100 GMT+01:00"
latitude : 51.2997794}

此单行可通过以下代码转换为csv:

locations:[
{time : 1439319674334
longitude : 1.070336
local_time : "20:01:14:334 11 08 2015 +0100 GMT+01:00"
latitude : 51.2997804},
{time : 1439319694428
longitude : 1.0703332
local_time : "20:01:34:428 11 08 2015 +0100 GMT+01:00"
latitude : 51.2997889},
{time : 1439319714638
longitude : 1.0703123
local_time : "20:01:54:638 11 08 2015 +0100 GMT+01:00"
latitude : 51.2997794} ]

file = open("filename.csv","a")

file.write("time, longitude, local_time, latitude\n")    

for location in locations:
    st = location['time'] + "," + location['longitude '] + "," + location['longitude'] + "," + location['latitude '] + "\n"
    file.write(st)

此单行可通过以下代码转换为csv:

locations:[
{time : 1439319674334
longitude : 1.070336
local_time : "20:01:14:334 11 08 2015 +0100 GMT+01:00"
latitude : 51.2997804},
{time : 1439319694428
longitude : 1.0703332
local_time : "20:01:34:428 11 08 2015 +0100 GMT+01:00"
latitude : 51.2997889},
{time : 1439319714638
longitude : 1.0703123
local_time : "20:01:54:638 11 08 2015 +0100 GMT+01:00"
latitude : 51.2997794} ]

file = open("filename.csv","a")

file.write("time, longitude, local_time, latitude\n")    

for location in locations:
    st = location['time'] + "," + location['longitude '] + "," + location['longitude'] + "," + location['latitude '] + "\n"
    file.write(st)

使用csv库将使您的生活更加轻松。试试这个

试试这个:

In [75]: import csv
In [70]: j = {'locations':[
    ...: {'time' : 1439319674334,
    ...: 'longitude' : 1.070336,
    ...: 'local_time' : "20:01:14:334 11 08 2015 +0100 GMT+01:00",
    ...: 'latitude' : 51.2997804},
    ...: {'time' : 1439319694428,
    ...: 'longitude' : 1.0703332,
    ...: 'local_time' : "20:01:34:428 11 08 2015 +0100 GMT+01:00",
    ...: 'latitude' : 51.2997889},
    ...:
    ...: {'time' : 1439319714638,
    ...: 'longitude' : 1.0703123,
    ...: 'local_time' : "20:01:54:638 11 08 2015 +0100 GMT+01:00",
    ...: 'latitude' : 51.2997794}]}
    ...:
    ...:
In [74]: with open('output.csv', 'wb+') as f:
    ...:     writer = csv.DictWriter(f, fieldnames=j['locations'][0].keys())
    ...:     writer.writeheader()
    ...:     for item in j['locations']:
    ...:         writer.writerow(item)
您得到如下输出:


使用csv库,您的生活会变得更加轻松。试试这个

试试这个:

In [75]: import csv
In [70]: j = {'locations':[
    ...: {'time' : 1439319674334,
    ...: 'longitude' : 1.070336,
    ...: 'local_time' : "20:01:14:334 11 08 2015 +0100 GMT+01:00",
    ...: 'latitude' : 51.2997804},
    ...: {'time' : 1439319694428,
    ...: 'longitude' : 1.0703332,
    ...: 'local_time' : "20:01:34:428 11 08 2015 +0100 GMT+01:00",
    ...: 'latitude' : 51.2997889},
    ...:
    ...: {'time' : 1439319714638,
    ...: 'longitude' : 1.0703123,
    ...: 'local_time' : "20:01:54:638 11 08 2015 +0100 GMT+01:00",
    ...: 'latitude' : 51.2997794}]}
    ...:
    ...:
In [74]: with open('output.csv', 'wb+') as f:
    ...:     writer = csv.DictWriter(f, fieldnames=j['locations'][0].keys())
    ...:     writer.writeheader()
    ...:     for item in j['locations']:
    ...:         writer.writerow(item)
您得到如下输出:


是文件中JSON对象的键之一。此外,我认为您提到的键是带引号的字符串。
例如:
“time”
是文件中JSON对象中的键的
位置。
此外,我认为您提到的键是带引号的字符串。
例如:
“time”
文件在没有上下文管理器的情况下打开,而自己编写csv文件是非常糟糕的做法。没有上下文管理器就打开文件,而自己编写csv文件是非常糟糕的做法。感谢Kelvin的快速响应,到目前为止,我可以按照您的结果编写csv,我的问题是,如何将这三个列表放在一行中?如“纬度1”、“本地时间1”、“纵向1”、“时间1”,“latitute2”、“local_time2”、“longitude2”……在一行中,而不是三行中lines@DEOGRATIASMZURIKWAO这要复杂得多。对不起,这不是我从问题中得到的。我可以稍后再看一看,但目前我没有足够的带宽来编写完整的解决方案:\it’s ok,但它非常有用。我试图使用上述概念来转换json文件,使用th for循环,并具有与您相同的结果csv格式,我希望很容易,因为我只使用一行代码,该文件大约有10000行,将非常感谢您的帮助。@Deo Kwao,我可以尝试帮助您,或者您可能想提出另一个问题,其中包含这些细节。也许有人能帮忙。最大的挑战之一不一定是将它们串在一起,而是列的标题。我不完全清楚你想要实现什么,最好是有一个完整的例子格式,而不仅仅是评论。我一定会尽力帮忙的!,我现在通过循环和一次转换一行来转换整个文件,效果很好,感谢Kelvin的快速响应,到目前为止,我可以在您的结果中编写csv,我的问题是,如何将三个列表放在一行中?如“纬度1”、“本地时间1”、“纵向1”、“时间1”、“纬度2”、“本地时间2”,“longitude2”…在一行中而不是三行中lines@DEOGRATIASMZURIKWAO这要复杂得多。对不起,这不是我从问题中得到的。我可以稍后再看一看,但目前我没有足够的带宽来编写完整的解决方案:\it’s ok,但它非常有用。我试图使用上述概念来转换json文件,使用th for循环,并具有与您相同的结果csv格式,我希望很容易,因为我只使用一行代码,该文件大约有10000行,将非常感谢您的帮助。@Deo Kwao,我可以尝试帮助您,或者您可能想提出另一个问题,其中包含这些细节。也许有人能帮忙。最大的挑战之一不一定是将它们串在一起,而是列的标题。我不完全清楚你想要实现什么,最好是有一个完整的例子格式,而不仅仅是评论。我一定会尽力帮忙的!,我现在通过循环和一次转换一行来转换整个文件,效果很好,谢谢大家