使用python

时间:2017-11-14 01:21:59

标签: python

我有一个CSV文件需要转换为两个不同的目的。

  1. 用于活动小册子打印(按时间排序的日间计划) 2017/11/11(星期四) 时间,声乐/小提琴/ Mrudagam(如果事件是'声乐') 时间,舞蹈/小提琴/ Mrudangam(如果事件是'舞蹈') 时间,戏剧(如果事件是'戏剧')

  2. 用于Firebase上传(JSON)

  3. 日期,时间,事件,声乐,小提琴,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文件中。

    我的问题是 - 是否有不同的方法来完成这项工作?任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

有一个更好的方法!熊猫!只需将csv转换为数据框,您就可以使用自定义函数创建一个列,其中new_column = df [' column']。apply(function)。之后你可以将df保存为json。 http://pandas.pydata.org