1

[Python3 を使用] 私は (Python) プログラミングに非常に慣れていませんが、特定の csv ファイルのフォルダーをスキャンするスクリプトを作成しています。次に、それらをすべて読み取って追加し、別の csv ファイルに書き込みたいと考えています。

その間に、特定の列の値が設定された基準に一致する場合にのみデータが返される必要があります。

すべての csv ファイルには同じ列があり、次のようになります。

header1 header2 header3 header4 ...
string  float   string  float   ...
string  float   string  float   ...
string  float   string  float   ...
string  float   string  float   ...
...     ...     ...     ...     ...

私が現在取り組んでいるコードは次のとおりですが、以前のファイルのデータを上書きし続けています。それは私には理にかなっていますが、それを機能させる方法がわかりません。

コード:

import csv
import datetime
import sys
import glob
import itertools
from collections import defaultdict

# Raw data files have the format like '2013-06-04'. To be able to use this script during the whole of 2013, the glob is set to search for the pattern '2013-*.csv'
files = [f for f in glob.glob('2013-*.csv')]

# Output file looks like '20130620-filtered.csv'
outfile = '{:%Y%m%d}-filtered.csv'.format(datetime.datetime.now())

# List of 'Header4' values to be filtered for writing output
header4 = ['string1', 'string2', 'string3', 'string4']

for f in files:
    with open(f, 'r') as f_in:
        dict_reader = csv.DictReader(f_in)

        with open(outfile, 'w') as f_out:
            dict_writer = csv.DictWriter(f_out, lineterminator='\n', fieldnames=dict_reader.fieldnames)
            dict_writer.writeheader()
            for row in dict_reader:
                if row['Campaign'] in campaign_names:
                    dict_writer.writerow(row)

のようなことも試しreaders = list(itertools.chain(*map(lambda f: csv.DictReader(open(f)), files)))、リーダーを反復しようとしましたが、ヘッダーの操作方法がわかりません。( itertools.chain() に fieldnames 属性がないというエラーが表示されます)。

どんな助けでも大歓迎です!

4

1 に答える 1