2017-09-14 136 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