我有一个csv文件。我想按当天的旅行分割数据。我尝试创建一个词典列表列表。我希望也许有更好的方法?我的最终目标是使用google distance api获取当天距离的距离摘要。
例如,对于以下跟随输入:
输入csv文件:
Address,City,State,ShowingDateTime
1234 Hodge Street,Brown,CA,1/4/17 12:00
9613 Llama Street,Downtown,CA,1/5/17 12:15
7836 Bob Street,Swamp,CA,1/5/17 12:15
2134 Cardinal Street,Ruler,CA,1/6/17 11:30
预期的数据结构?:
List[
List[Dict[1234 Hodge Street,Brown,CA,1/4/17 12:00],
List[
Dict[9613 Llama Street,Downtown,CA,1/5/17 12:15],
Dict[7836 Bob Street,Swamp,CA,1/5/17 12:15]
],
List[
Dict[2134 Cardinal Street,Ruler,CA,1/6/17 11:30]
]
]
尝试(不工作):
#!/usr/bin/env python3
from datetime import datetime
from googlemaps import Client
import requests
import csv
def read_csv(csv_file):
trip_list = []
with open(csv_file) as File:
reader = csv.DictReader(File, dialect='excel')
subtrip_list=[]
previous_date=0
for row in reader:
current_date = datetime.strptime(row['ShowingDateTime'], '%m/%d/%y %H:%M').date()
if previous_date==0:
previous_date=current_date
if current_date != previous_date:
trip_list.append(subtrip_list)
del subtrip_list[:]
subtrip_list.append(row)
previous_date=current_date
答案 0 :(得分:1)
使用itertools.groupby
使用日期字符串对行进行分组。 csv.DictReader
允许您使用密钥作为csv标头返回csv行作为dicts:
import csv
from itertools import groupby
func = lambda x: x['ShowingDateTime'].split()[0]
def read_csv(csv_file):
with open(csv_file) as f:
reader = csv.DictReader(f)
lst = [list(grp) for _, grp in groupby(sorted(reader, key=func), func)]
return lst
这将返回按日期分组的dicts列表。如果行已按日期排序,则可以跳过排序步骤。
答案 1 :(得分:0)
我从未使用过google api,但我对更简单方法的建议是使用pandas。
import pandas as pd
df = pd.read_csv('data.csv', parse_dates=['DateTime'])
print(df)
输出
Address City State DateTime
0 1234 Hodge Street Brown CA 2017-01-04 12:00:00
1 9613 Llama Street Downtown CA 2017-01-05 12:15:00
2 7836 Bob Street Swamp CA 2017-01-05 12:15:00
3 2134 Cardinal Street Ruler CA 2017-01-06 11:30:00
从这一点来说,我认为获得您喜欢的任何格式要容易得多。但数据框似乎对您的用例非常有用。我会为最后一点的距离添加另一列,并将结果从谷歌api中插入。但这只是我。