0

私は本当にもう一度立ち往生しています。

私のコースワークについての質問は

3 つの CSV ファイルから取得したフィールド [age] の値の合計が 47 未満であることを確認します

わかりましたので、問題を見つけて修正しました!! しかし、「SUM」関数を使用するとエラーが発生します。

繰り返しますが、ここに私のコードがあります...時間を無駄にして申し訳ありません。

import csv
myFile = csv.reader(open('3028571a.csv', newline=''), delimiter=',', quotechar='|')

next(myFile)

for record in myFile:
   records = int(record[0])
   if records < 47:
        sum(records)
        print(records)

その5つのレコードのようですが、私が受け取るエラーは

TypeError: 'int' オブジェクトは反復可能ではありません

それは合計ビットです...何か提案はありますか?私は何も考えられないので、私が尋ねた理由です。

4

2 に答える 2

2

Python には既に優れた CSV パーサーがあり、さまざまな区切り記号、エスケープされた区切り記号などを処理します。これは呼び出さcsv.readerれ、csvモジュール内にあります。次のように使用できます。

sum(int(row[0]) for row in csv.reader(open(f, "rb")) for f in files if int(row[0]) < 47)

もちろん、これは宿題を実際に行っているわけではありません。Python の組み込みツールを使用してそれを行っているだけです。自分でやりたい場合は、ファイルの各行を手動で読み取り、区切り記号に基づいて分割する必要があります。引用符で囲まれたコンマについて心配する必要があります (これはコンマとしてカウントされません)。つまり、再実装csv.reader

于 2012-05-06T21:39:46.647 に答える
1

これはおそらくあなたに役立つでしょう:http://docs.python.org/library/csv.html

基本的に、csv.reader() 関数にファイル ハンドルを渡すと、行をループできます。

おそらく、次のようなものです。

import csv
import sys

agecol = 1
namecol = 0
agelimit = 47

def sum_ages(files):
    agesum = 0
    for f in files:
        with open(f, 'r') as fp:
            reader = csv.reader(fp)
            for row in reader:
                age = int(row[agecol])
                name = row[namecol]
                if age < agelimit:
                    print 'Adding %s\'s age (%d)' % (name, age)
                    agesum += age
                else:
                    print 'Skipping %s\'s age (%d)' % (name, age)

    print 'Sum of Ages < %d: %d' % (agelimit, agesum)
于 2012-05-06T21:27:06.320 に答える