我有一个csv文件,第一部分由3个条目组成,第二部分由2个条目组成。我想隔离由3个条目组成的数据。
我写了以下内容:
filename=open("datafile.txt","r")
data_3_entries_list=[]
for line in filename:
fields=line.split(",")
if fields[2] == 0:
break
else:
data_3_entries_list.extend(line)
我收到错误消息:
如果fields [2] == 0:
IndexError:列表索引超出范围
打印(data_3_entries_list)
我也尝试过如果fields [2]为None但我得到同样的错误。 我不明白为什么我得到这个错误?
答案 0 :(得分:2)
使用len()或str.count()
for line in filename:
fields=line.split(",")
if len(fields) == 3:
data_3_entries_list.append(line)
for line in filename:
if fields.count(",") == 2:
data_3_entries_list.append(line)
答案 1 :(得分:1)
列表中不存在的元素没有隐含值;如果fields
只有2个项目,则fields[2]
根本不存在,并会产生错误。
明确检查清单的长度:
if len(fields) == 3:
break
data_3_entries_list.append(line) # You may want append here, not extend
答案 2 :(得分:0)
如果我有像这样的csv文件,那么这可以解决
with open('datafile.csv', 'w') as p:
p.write("Welcome,to,Python")
p.write("Interpreted,Programming,Language")
filename=open("datafile.csv","r")
data_3_entries_list=[]
for line in filename:
fields=line.split(",")
if fields[2] == 0:
break
else:
data_3_entries_list.extend(line)
否则,您必须至少向我们展示您的csv文件是如何格式化的。
答案 3 :(得分:0)
您收到错误是因为您试图获取可能不存在的索引的值。不过,还有更好的方法。
您可以使用拆分来查看索引是否存在,而不是直接测试长度。不是len(a_list) >= 3
的列表只会返回一个空列表。
>>> mylist = range(3) #this list is [0, 1, 2]
>>> mylist[2:]
[2]
>>> mylist = range(2) #however THIS list is [0, 1]
>>> mylist[2:]
[]
通过这种方式,您可以使用pythonic if a_list: do_work()
来测试您是否想要处理数据。此语法通常优先于if len(a_list) == value: do_work()
。
filename=open("datafile.txt","r")
data_3_entries_list=[]
for line in filename:
fields=line.split(",")
if fields[2:]: ##use a split to verify that such a split yields a result
data_3_entries_list.extend(line)