2015-06-09 27 views
2

我想分割csv文件。閱讀分隔文件後,我想分割所需的列更遠。我的示例代碼:分割分隔文件並存儲到新列

import csv 
sample = open('~/sample.txt') 
adr = csv.reader(sample, delimiter='|') 
for row in adr: 
    a = row[0] 
    b = row[1] 
    c = row[2] 
    d = row [3] 
    new="" 
    new = row[4].split(",") 
    for row1 in new: 
     print row1 

sample.txt的文件包括:

aa|bb|cc|dd|1,2,3,4|xx 
ab|ax|am|ef|1,5,6|jk 
cx|kd|rd|j|1,9|k 

上面的代碼產生輸出:

[1,2,3,4] 
[1,5,6] 
[1,9] 

我想進一步分裂新列和要使用splited輸出進行比較。例如,對於分裂所需的輸出將是:

aa|bb|cc|dd|1|2|3|4|xx 
ab|ax|am|ef|1|5|6| |jk 
cx|kd|rd|j|1|9| | |k 

此外,我想存儲新列的多發性空白或空值,如上面的例子[1,2,3,4],[1,5 ,6]。有更好的方法來分裂嗎?

+0

所以最子欄目的行總是第一個?否則,在處理輸入文件的其他行時,如何確定要添加的空白或NULL的數量... – martineau

回答

3

你已經差不多了!在new = row[4].split(",")之後還有幾行是你需要的。編輯2:儘可能以最簡單的方式處理您的評論,只需循環兩遍,第一次尋找最長的「子陣列」。回覆:打印額外的時間,你可能將代碼複製到錯誤的地方/縮進,並在循環中。

全碼:

import csv 
sample = open('~/sample.txt') 
adr = csv.reader(sample, delimiter='|') 
longest = 0 
for row in adr: 
    curLen = len(row[4].split(',')) 
    if curLen > longest: 
     longest = curLen 

sample.seek(0) 
for row in adr: 
    new = row[4].split(",") 
    for i in range(len(new), longest): 
     new.append(' ') 
    newrow = row[0:4] + new + row[5:] 
    print('|'.join(newrow)) 
+0

感謝您的回答。我有一個疑問,可能有n個新的列,例如[1,2,3,4]或[1,2,3,4,5,6,7]等我們可以修復多個列嗎?還有一件事,現在的代碼給了t次重複輸出。 –

+0

更新它,尋找最長的一次,因爲這似乎是你想要的。 – bbill

+0

感謝bbil的幫助:) ..我們可以將連接的行存儲到csv文件中嗎? –

相關問題