2016-11-23 144 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 
...