2017-05-04 19 views
0

私が持っているPythonスクリプトのように:リストを含む辞書を特定の行に変換するにはどうすればよいですか?

{'ID': ['133528'], 'OPEN': ['1/1/2016', '2/1/2016', '3/1/2016', '4/1/2016'], 'CLOSED': ['5/1/2016'], 'CHECKED': ['1/7/2016']} 

{'ID': ['176987'], 'OPEN': ['3/6/2016', 4/6/2016'], 'CLOSED': [], 'CHECKED': ['1/7/2016',2/7/2016]} 

{'ID': ['347697'], 'OPEN': ['1/2/2016'], 'CLOSED': ['1/3/2016'], 'CHECKED': []} 

何が必要なのCSVへのこれらの辞書(行)を記述している:(を反復処理)と同様の辞書行の多くを生成

for row in file: 
    .... 
    .... 
    .... 
    whole_calendar = {} 
    whole_calendar['ID'] = id 
    whole_calendar['OPEN'] = open_days 
    whole_calendar['CLOSED'] = closed_days 
    whole_calendar['CHECKED'] = checked_days 
    print(whole_calendar) 

この表の形式で、ファイル - >

133528,'OPEN','1/1/2016' 
133528,'OPEN','2/1/2016' 
133528,'OPEN','3/1/2016' 
133528,'OPEN','4/1/2016' 
133528,'CLOSED','5/1/2016' 
133528,'CHECKED','1/7/2016' 
176987,'OPEN','3/6/2016' 
176987,'OPEN','4/6/2016' 
176987,'CHECKED','1/7/2016' 
176987,'CHECKED','2/7/2016' 
347697,'OPEN','1/2/2016' 
347697,'CLOSED','1/3/2016' 

私は、Python 2.6(なしパンダ)にだけ組み込み関数ライブラリを使用する必要があります

私はcsv.writerowを使っていくつかの変換を試みましたが、できません。 ここでお手伝いできますか?

+0

そう順不同辞書であるため、所望の出力は、常にその順序でないかもしれません... – Aditya

+0

これは問題ではありません。私は別のソフトウェアからそれをCSVとして読むでしょう:-) – Akiz

答えて

0

仲介辞書の手順を複雑にしています。古いファイルから行を読み込むときに新しいファイルを書き込むことができます。

import csv 

with open('new_format.csv', 'w') as csvfile: 
    fieldnames = ['id', 'status', 'date'] 
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames) 

    for row in file: 
     .... 
     .... 
     .... 
     [writer.writerow({'id': id, 'status': 'OPEN', 'date': d}) for d in open_days] 
     [writer.writerow({'id': id, 'status': 'CLOSED', 'date': d}) for d in closed_days] 
     [writer.writerow({'id': id, 'status': 'CHECKED', 'date': d}) for d in checked_days] 
+0

変更する必要があるのは2つだけです。式の周りに角括弧を削除し、writer.writerowの代わりにwriter.writerowsを使用しました。なぜなら、私の辞書には私の作者とは異なるフィールド名が含まれていると書いていたからです。私はなぜ を理解していないと私はなぜそれがそれぞれの後に空白の行を生成するのか理解していないが、今すぐ動作します。ありがとうございました! – Akiz

+0

更新されたコードで試してください – andrew

+0

ありがとうございます。今はwrite.writerowsで "my version"と同じように動作します... 関数の角括弧がどのように機能するのか説明できますか?私は文書をどこで調べるべきかわかりません... – Akiz

0

アンドリューの答えは私のためではない100%の作業を行いますが、私は小さな変化行った後:私は空白の取得なぜドント(

import csv 

with open('new_format.csv', 'w') as csvfile: 
    fieldnames = ['id', 'status', 'date'] 
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames) 

    for row in file: 
     .... 
     .... 
     .... 
     writer.writerows({'id': id, 'status': 'OPEN', 'date': d} for d in open_days) 
     writer.writerows({'id': id, 'status': 'CLOSED', 'date': d} for d in closed_days) 
     writer.writerows({'id': id, 'status': 'CHECKED', 'date': d} for d in checked_days) 

をそれがないと、それはほとんど右に見える知っています行):

... 
    8: 4882410,CLOSED,2016-11-09 
    9: 
    10: 4882410,CLOSED,2016-11-10 
    11: 
    12: 4882410,CLOSED,2016-11-11 
    ... 
関連する問題