2017-09-14 180 views
0

我有以下文件和代碼工作絕對正常,但(見下文)使用相同的方法,第二個代碼段與給定的文件,引發錯誤。閱讀csv文件列中的異常

工作代碼

def test(): 
    with open('test.txt','r') as f: 
     reader=csv.reader(f) 
     for row in reader: 
      print(row[0]) #this is column 1 
      answer=input("Answer?>>") 
      if answer==row[1]: #this is column 2 
       print("Yes") 
      else: 
       print("No") 

文件內容

a,1 
b,2 
c,3 

正確的工作輸出

>>> test() 
a 
Answer?>>1 
Yes 
b 
Answer?>>2 
Yes 
c 
Answer?>> 

但是,下面的代碼無法正常工作:

def round(): 
    print("===Summary===") 
    with open('eventinfo.txt','r',newline="") as f: 
     reader=csv.reader(f) 
     for row in reader: 
      print(row[0]) 

文件的內容:(記錄之間的額外的行似乎已被創建,同時寫入文件)

1,Techhamper,9,9,9,9,9,27 

1,Moosecream,8,8,8,8,8,24 

1,BizTech,6,6,6,6,6,18 

1,Pigacheepot,1,1,1,1,1,3 

2,Techhamper,1,1,1,1,1,3 

2,Moosecream,2,2,2,2,2,6 

錯誤:

print(row[0]) 
IndexError: list index out of range 

寫到該文件中的代碼如下:

with open("eventinfo.txt","a") as fo: 
      writer=csv.writer(fo) 
      writer.writerow([round,inventor,i1,i2,i3,i4,i5,totalscore]) 

一個答案,我會很高興,如果:

  1. 在從文件中讀取代碼中的錯誤的解決方案/修復(如何最有效地剝離換行符)

  2. 此外,什麼是添加或改寫的最佳方式我'編寫'代碼,以更高效地創建文件內容(像第一個沒有每條記錄之間的換行符的文件)。

在此先感謝

回答

1

您可以通過檢查的row長度跳過空行:

for row in reader: 
    if len(row) > 0: 
     print(row[0]) 

我沒有看到在編寫代碼,將創建空行什麼,雖然,所以我不知道如何解決這個問題。您是否正在閱讀您正在閱讀的相同操作系統?如果不是,這可能是由於行結束約定的差異。

如果問題出現在換行符中,則可以使用newline=None(默認值)而不是newline=""來修復讀取器代碼。

+0

我刪除了閱讀器代碼中的newline =「」,並嘗試換行=無,但都沒有工作 – MissComputing

+0

我看不到空行如何被創建......任何人?不,不幸的是,我只是使用相同的操作系統 – MissComputing

+0

是否有可能「totalscore」以換行符結束? – Barmar