按列读取CSV文件列
问题描述:
我想用python程序操纵数据的csv文件。按列读取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对ŧ
然后
T vs P
然后
P对B
直到结束
B对P
然后在下一行开始,直到结束的文件。
我使用:
readCSV = csv.reader(csvfile, delimiter=',')
for row in readCSV:
for col in row:
我已经试过row[1]
VS row[2]
但不知道如何来增加这些针对不同长度的行。
寻找最简单的方法来评估这些,以便我完成每一行的建议?基本上我只是测试新列[2]是否等于前一列[1],整个行。
答
这些线条有不同的长度,所以我不会使用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
...
请编辑的问题,包括您的预期的数据输出。 –
“B vs P”是什么意思? – erip