2016-11-23 118 views
0

我想用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],整个行。

+0

请编辑的问题,包括您的预期的数据输出。 –

+0

“B vs P”是什么意思? – erip

回答

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 
...