0

名前の「マスターリスト」を持つCSVファイルを繰り返し処理し、それを、出席して電話をかけた人の名前のみを含む別のCSVファイルと比較しようとしています。

マスターリストを反復処理して他のCSVファイルの名前と比較し、その人が行った呼び出しの数を取得し、名前が見つからない場合、または名前が見つからない場合は、呼び出しの数を含む新しいCSVファイルを書き込もうとしています0 です。その列に 0 が必要です。

私が見落としているのは信じられないほど単純なものなのか、それとも本当に間違っているのかはわかりません。

書式設定のために編集されました。

import csv
import sys

masterlst = open('masterlist.csv')
comparelst = open(sys.argv[1])

masterrdr = csv.DictReader(masterlst, dialect='excel')
comparerdr = csv.DictReader(comparelst, dialect='excel')

headers = comparerdr.fieldnames

with open('callcounts.csv', 'w') as outfile:
    wrtr = csv.DictWriter(outfile, fieldnames=headers, dialect='excel', quoting=csv.QUOTE_MINIMAL, delimiter=',', escapechar='\n')
    wrtr.writerow(dict((fn,fn) for fn in headers))
    for lines in masterrdr:
        for row in comparerdr:
            if lines['Names'] == row['Names']:
                print(lines['Names'] + ' has ' + row['Calls'] + ' calls')
                wrtr.writerow(row)
            elif lines['Names'] != row['Names']:
                row['Calls'] = ('%s' % 0)
                wrtr.writerow(row)
                print(row['Names'] + ' had 0 calls')

masterlst.close()
comparelst.close()
4

2 に答える 2

0

助けてくれてありがとう。外側のループ内に別の with ステートメントをネストし、マスター リストの名前が比較リストにあるかどうかをテストする変数を追加することができました。これが私の最終的な作業コードです。

import csv
import sys

masterlst = open('masterlist.csv')
comparelst = open(sys.argv[1])

masterrdr = csv.DictReader(masterlst, dialect='excel')
comparerdr = csv.DictReader(comparelst, dialect='excel')

headers = comparerdr.fieldnames

with open('callcounts.csv', 'w') as outfile:
    wrtr = csv.DictWriter(outfile, fieldnames=headers, dialect='excel', quoting=csv.QUOTE_MINIMAL, delimiter=',', escapechar='\n')
    wrtr.writerow(dict((fn,fn) for fn in headers))
    for line in masterrdr:
        found = False
        with open(sys.argv[1]) as loopfile:
            looprdr = csv.DictReader(loopfile, dialect='excel')
            for row in looprdr:
                if row['Names'] == line['Names']:
                    line['Calls'] = row['Calls']
                    wrtr.writerow(line)
                    found = True
                    break

        if found == False:
            line['Calls'] = '0'
            wrtr.writerow(line)

masterlst.close()
comparelst.close()
于 2013-05-28T12:32:22.047 に答える