所以我有一个csv风格的文本文档,如下所示:
Line number,1
1,K1,O1,L1,L2,L3
2,K2,O2,L2,L3
3,K3,O3,L1,L3
4,K4,O4,L2
我想检查第一行中“行号”之后的数字是否等于以下行之一中的第一个元素。在这种情况下,这个数字可以是1,2,3或4.
我的代码如下:
import csv
lineNumber = 0
with open('B.txt', 'r') as f:
reader = csv.reader(f, delimiter=",")
for row in reader:
if "Line Number" in row[0]:
lineNumber = int(row[1]) <- not sure about this syntax btw
print("Is equal")
break
我最终得到了这个错误:
if "Line Number" in row[0]:
IndexError: list index out of range
有行[n]的所有内容似乎都会出错。
答案 0 :(得分:3)
您的代码有两项改进:
int
与int
。next(reader)
提取for
循环前的第一行。这是你可以重构逻辑的一种方式:
import csv
with open('B.txt', 'r') as f:
reader = csv.reader(f, delimiter=",")
headers = next(reader)
lineNumber = int(headers[1])
for row in reader:
if int(row[0]) == lineNumber:
print("Is equal")
break
答案 1 :(得分:1)
import csv
lineNumber = 0
with open('test', 'r') as f:
reader = csv.reader(f, delimiter=",")
for row in reader:
if row[0] == 'Line number':
lineNumber = row[1]
else:
if row[0] == lineNumber:
print 'isEqual for row ',row
答案 2 :(得分:0)
您的示例csv文件列表'Line number,1'
- 您测试'Line Number'
- 查看 n umber 与 名词强>棕土
minimal verifyable complete example创建文件并实现逻辑:
import csv
t= """Line number,1
1,K1,O1,L1,L2,L3
2,K2,O2,L2,L3
3,K3,O3,L1,L3
4,K4,O4,L2
"""
# create file
fn = "B.txt"
with open(fn,"w") as f:
f.write(t)
# parse file
lineNumber = 0
with open(fn, 'r') as f:
reader = csv.reader(f, delimiter=",")
for row in reader:
if "Line number" in row[0]: # fixed capitalization
lineNumber = row[1] # no need to make it an int, str compare is fine
elif row[0] == lineNumber:
print("Is equal", row)
break