2016-03-21 17 views
1

csvファイルの行4の合計を見つけることができません。私のコードは、csvファイルで検索されたコードを入力してから、新しいcsvファイルに書き込まれます。それは領収書として印刷するようにするためには、私の問題は、これが判明するまで私のコードで最後の数行に です:excel csvファイルの行4の合計を計算する

import csv 
try_again= "Yes" 
myfile2=open("reciept.csv","a+") 
while try_again =="Yes": 
    found= "no" 
    myfile=open("stock_file.csv","r+") 
    gtin_8= input("enter the gtin-8") 
    quantity= input("enter quantity wanted") 
    reader=csv.reader(myfile) 
    for row in reader: 
     if gtin_8 == row[0]: 
      description= row[1] 
      unit_price= row[2] 
      product_price=((float(unit_price)*(float(quantity)))) 
      product_price1= str(product_price) 
      new_record=(gtin_8+","+description+","+quantity+","+unit_price+","+product_price1) 
      myfile2.write(str(new_record)) 
      myfile2.write("\n") 
      found="yes" 

    if found=="no": 
     nf="not found" 
     new_record1=(gtin_8+","+nf) 
     myfile2.write(new_record1) 
     myfile2.write("\n") 
    try_again=input("do you want to try again") 
    try_again=try_again.title() 
myfile2.close() 
myfile3=open("reciept.csv","r+") 
reader1=csv.reader(myfile3) 
total_cost=0 
for row in reader1: 
    print (row) 
    total = sum(float(r[4]) for r in csv.reader(myfile3)) 

print (total_cost) 
+0

csvはcsv(excel doesnt matter)ですが、インデントが間違っています – cutzero

+0

'total ='の値を設定していますが、 'total_cost'を出力しています。 csv.reader(myfile3)のrの 'total_cost + = sum(float(r [4]))' –

+0

はいそれは本当ですが、まだ動作しなくても – imeziane

答えて

0

あなたは(ループとその中にリストの内包のための)最後に、ネストされたループを持っていますそれがあなたが望むように働いていない理由です。

total_costという名前の変数を0と定義し、何もしないで、それを印刷するだけです。

んが、ネストされたループが、これは動作するはずですので、必要ありません:

total_cost = 0.0 
for row in reader1: 
    if row[1] == "not found" 
     total_cost += float(row[4]) 

他のポインタ:

だけで文字列の連結とファイルへの書き込みよりも使用する方が安全ですあまりにcsv.writerありますが。

+0

は範囲外のインデックスを指しています – imeziane

+0

データの列が不十分な行 – Sevanteri

+0

どういう意味ですか? – imeziane