私は、CSVファイルに含まれる合計料金と平均料金を計算するためにPythonプログラムを実行しようとしています。なぜ2つのfor文がPythonで一緒に実行されないのですか?
次に、請求書ごとの合計料金と平均料金を計算します。プログラムは合計料金と平均料金を正しく計算しますが、2番目のforステートメントは実行されません。どちらもステートメントを独立して正しく実行します。
import csv
f = open("transport.csv", "r")
reader = csv.DictReader(f)
charges_per_inv = dict()
inv_reader = csv.DictReader(f)
inv_dict = dict()
counter = 0
inv_counter = 1
for row in reader:
batch_num = row['Batch#']
if batch_num not in charges_per_inv:
charges_per_inv [batch_num] = 0.0
charges_per_inv [batch_num] += float(row['Amount'])
counter = counter + 1
#print charges_per_inv #Just a check
dvalue = [(v) for v in charges_per_inv.values()]
#print dvalue
total = sum(dvalue)
average = float(total)/ counter
#print counter #Just a check
print "The total charges is, ", total
print "The average charge is, ", average
a = raw_input("Enter Invoice#: ")
for i in inv_reader:
inv_num1 = i["Invoice#"]
if inv_num1 == a:
if inv_num1 not in inv_dict:
inv_dict[inv_num1] = 0.0
inv_dict[inv_num1] += float(i['Amount'])
inv_counter = inv_counter + 1
print inv_dict #Just a check
inv_amount = [(v) for v in inv_dict.values()]
#print inv_amount
inv_total = sum(inv_amount)
inv_average = float(inv_total)/ inv_counter
#print inv_counter #Just a check
print "The total charges is, ", inv_total
print "The average charge is, ", inv_average
ここでは、プログラムの出力を示します。
The total charges is, 9069.87
The average charge is, 72.55896
Enter Invoice#: 617537
The total charges is, 0
The average charge is, 0.0
ありがとうございます!これは機能します。 – amp28
もう1つの解決策は、最初のループの後に 'f.seek(0)'をすることです。 – Evpok
@Evpok:ヘッダー行をスキップするには 'f.readline()'する必要があるか、まだ初期化された 'DictReader'によってレコードとして扱われると思います。 –