我正在尝试使用python程序操作csv数据文件。
csv文件看起来像这样,长度不同:
1,B,T,P,B,B,B,P,P,P,T,P,P,P,P,T,B,P,P,B,P,P,B,B,P,P
2,T,P,B,P,B,B,P,P,B,B,T,P,B,B,T,P,P,B,B,B,B,P,T,B,T,B,B,B,P
3,P,P,B,B,P,B,T,T,B,P,P,B,B,B,P,B,B,P,P,B,P,T,P,B,P,P,P
4,B,B,P,P,P,B,P,B,T,B,P,P,B,B,P,P,B,B,B,T,B,P,B,B,B,P,P,B
所以在第1行我想评估:
B vs T
然后
T vs P
然后
P vs B
直到结束
B vs P
然后从下一行开始,直到文件结束。
我正在使用:
readCSV = csv.reader(csvfile, delimiter=',')
for row in readCSV:
for col in row:
我尝试了row[1]
vs row[2]
,但不确定如何为不同长度的行增加这些内容。
寻找最简单的评估方法的建议,以便我完成每一行?基本上我只测试新列[2]是否等于前一列[1],整个行。
答案 0 :(得分:0)
线条长度不同,所以我不会使用csv阅读器。我建议逐行读取文件,用逗号分隔行,并分别比较每个位置:
import itertools
with open("data.csv", "r") as datafile:
line1 = datafile.readline()
for line2 in datafile:
tokens1 = line1.strip().split(',')
tokens2 = line2.strip().split(',')
print(" --- Comparing lines %s <=> %s --- " % (tokens1[0], tokens2[0]))
for (a, b) in itertools.zip_longest(tokens1[1:], tokens2[1:]):
print("%s <=> %s : %s" % (a, b, "Equal" if a==b else "Not equal"))
line1 = line2
python 3.4的输出是:
--- Comparing lines 1 <=> 2 ---
B <=> T : Not equal
T <=> P : Not equal
P <=> B : Not equal
B <=> P : Not equal
B <=> B : Equal
B <=> B : Equal
P <=> P : Equal
P <=> P : Equal
P <=> B : Not equal
T <=> B : Not equal
P <=> T : Not equal
P <=> P : Equal
P <=> B : Not equal
P <=> B : Not equal
T <=> T : Equal
B <=> P : Not equal
P <=> P : Equal
P <=> B : Not equal
B <=> B : Equal
P <=> B : Not equal
P <=> B : Not equal
B <=> P : Not equal
B <=> T : Not equal
P <=> B : Not equal
P <=> T : Not equal
None <=> B : Not equal
None <=> B : Not equal
None <=> B : Not equal
None <=> P : Not equal
--- Comparing lines 2 <=> 3 ---
T <=> P : Not equal
P <=> P : Equal
B <=> B : Equal
P <=> B : Not equal
B <=> P : Not equal
B <=> B : Equal
P <=> T : Not equal
P <=> T : Not equal
B <=> B : Equal
B <=> P : Not equal
...