我有一个CSV文件需要转换为两个不同的目的。
用于活动小册子打印(按时间排序的日间计划) 2017/11/11(星期四) 时间,声乐/小提琴/ Mrudagam(如果事件是'声乐') 时间,舞蹈/小提琴/ Mrudangam(如果事件是'舞蹈') 时间,戏剧(如果事件是'戏剧')
用于Firebase上传(JSON)
日期,时间,事件,声乐,小提琴,Mrudangam,Ghatam,Kanjira,Bharatanatyam,舞蹈,长笛,戏剧
并非所有列都包含所有行的值。例如,如果活动是“VOCAL”,那么然后只有' Vocal',' Violin'和' Mrudangam'会有价值。
我阅读了CSV文件并使用
对其进行排序with open(args.eventfile,'r') as csvfile:
eventreader = csv.DictReader(csvfile, delimiter=",")
#sortedlist = sorted(eventreader, key=lambda row:(row['Date'],row['Time']), reverse=False)
sortedlist = sorted(eventreader, key=lambda each_dict: (datetime.strptime(each_dict['Date'], '%m/%d/%Y'),
datetime.strptime(each_dict['Time'], '%I:%M %p')))
然后处理每一行,如此,
def form_event_string(event):
fevent=""
print("formatting event: " + event['Event'])
if event['Event'] == 'VOCAL':
fevent = "{Vocal}/{Violin}/{Veena}/{Mrudangam}/{Ghatam}/{Kanjira}/{Morsing}/{Flute}/{Other}/{Venue}".format(**event)
elif event['Event'] == 'VIOLIN':
fevent = "{Violin}/{Mrudangam}/{Ghatam}/{Kanjira}".format(**event)
elif event['Event'] == 'VEENA':
fevent = "{Veena}/{Flute}/{Violin}/{Mrudangam}/{Ghatam}/{Kanjira}/{Morsing}/{GottuVadhyam}".format(**event)
elif event['Event'] == 'GHATAM':
fevent = "{Ghatam}/{Violin}/{Mrudangam}/{Kanjira}/{Morsing}".format(**event)
else event['Event'] == 'BHARATANATYAM':
fevent = "{Bharatanatyam}".format(**event)
return fevent
并继续将此字符串附加到CSV文件中。
我的问题是 - 是否有不同的方法来完成这项工作?任何帮助表示赞赏。
答案 0 :(得分:0)
有一个更好的方法!熊猫!只需将csv转换为数据框,您就可以使用自定义函数创建一个列,其中new_column = df [' column']。apply(function)。之后你可以将df保存为json。 http://pandas.pydata.org