2017-11-14 7 views
1

CSVファイルは2つの異なる目的のために変換する必要があります。イベント小冊子印刷(時間によってソートされた日が賢明予定) 16/11/2017(木) 時間、ボーカル/ヴァイオリン/ Mrudagam(イベントは、 'ボーカル' の場合) 時間、ダンス/ヴァイオリンのためのPythonを使用してCSVを複数のフォーマットに変換する

  1. /Mrudangam(イベント 'ダンス' の場合) 時間、Firebaseアップロードのドラマ(イベントは 'ドラマ' の場合)

  2. (JSON)

日付、時刻、イベント、声楽、バイオリン、 Mrudangam、Ghatam、Kanjira、Bharata natyam、Dance、Flute、Drama

すべての列にすべての行の値があるわけではありません。たとえば、イベントが '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

もっと良い方法があります。パンダ!単にcsvをデータフレームとして変換し、new_column = df ['column'] .app(function)を使ってカスタム関数を使ってカラムを作成することができます。その後、dfをjsonとして保存することができます。 http://pandas.pydata.org

関連する問題