0

私はPythonが初めてで、約30個のcsvファイルを取得しようとしています。すべて同じヘッダーですが、各ファイルに異なるデータがあり、1つにマージされます。今のところ、取り込めるファイルが 2 つしかないふりをしています。1 つは ID 番号 1、2、および 3 に関する情報で、もう 1 つは 4、5、および 6 に関する情報です。これまでのところ、ファイルを取り込んで使用することができました。 dictreader を使用して、同じキーで一連の辞書を作成しますが、各キーに対応する値を取得して、すべてのデータをまとめて 1 つの大きなファイルに結合する方法がわかりません。

これが私がこれまでに得た距離です:)

for filename in os.listdir(os.getcwd()):
  root, ext = os.path.splitext(filename)
  if root.startswith('file1') and ext == '.csv':
      upload1 = filename
  if root.startswith('file2') and ext == '.csv':
      upload2 = filename

file_upload1 = open(upload1, 'rU')
data_upload1 = csv.DictReader(file_upload1)

for row in data_upload1:
  print row

そして、upload2 についても同じです。そして、次のような出力が得られます。

{'ID': '1', 'name': 'bert', 'age': '30'}
{'ID': '2', 'name': 'ernie', 'age': '40'}
{'ID': '3', 'name': 'pinky', 'age': '50'}
{'ID': '4', 'name': 'perky', 'age': '60'}
etc

そして、私が作りたいのは、ID 1、2、3、4、5、6 の 1 つの列と、対応する名前ごと、対応する年齢などの列を持つ 1 つの csv ファイルです。

誰かがこれを達成する方法を提案できますか? 初歩的な質問ですみません。

4

1 に答える 1

0

csv.DictReader() を呼び出すと、辞書のジェネレーターが得られます。「f1.csv」と「f2.csv」の 2 つのファイルがあり、それぞれに複数のレコードが含まれているとします。


    import csv

    fp1, fp2 = open("f1.csv"), open("f2.csv")
    ld1, ld2 = csv.DictReader(fp1), csv.DictReader(fp2) #ld1 and ld2 are *generators*

    res = []  #our result will be stored here(LIST of dicts)
    ds = [ld1, ld2]    #list of generators

次に、次のように、各 dict から res dict に各 kv ペアを追加しながら、ds を反復処理します。

for d in ds: #each d is a generator
    for e in d: #each e is a dict
        res.append(e)

この res は現在、両方のソースからの辞書を含むリストです。それを繰り返して書くだけです。

コードをより堅牢/効率的にすることができますが、最初にメソッドを理解するだけであることに注意してください:)

よろしく、

ヤティ・サガデ

于 2011-10-07T23:39:29.533 に答える