2012-10-06 83 views
0

我有一個網頁抓取工具,可以將刮擦數據保存到CSV文件中。數據是這樣的:Python爲列和行創建/格式化CSV文件

 
random text 
Johm May 
1234 Big Street 
Atlanta, GA 30331 
acre .14 small 
random text 
Jane Jones 
4321 Little Street 
Atlanta, GA 30322 
acre .07 small 
random text 

我想:

(1)添加在列名,街道,,地址< ---請注意,該樣品是由逗號分隔。

(2)我想在上面發佈的地址結果中添加逗號。一個例子是:

 
jane jones 
,4321 Little Street 
,,Atlanta, GA 30344 
,,,acre .07 small 
,,,random text 

注意如何逗號用於每一行推到與所述不需要的數據英畝0.07小和隨機文本所需的列從命名的列被推開。

如何在python中執行此操作?我可以手工完成,但我正在處理數以千計的地址,我需要一個簡單的方法來在python中執行此操作。

是否有可能在if已被刪除後將所有數據拖入列表中,併爲逗號分配變量,如a =,b =,c = ,,,然後將該變量加入到列表中的特定行,然後再次保存它?

另外,我需要添加列信息,以及:列名,街道,,地址

+0

我認爲你需要澄清你的問題相當多。這聽起來像你想要一個「稀疏」的CSV文件,每行只有一列填充。我想「英畝.07小」和「隨機文本」都應該在你的「地址」列中出現? –

回答

2

我只是猜測您是說了很多這方面的東西,因爲你的問題似乎缺少一些細節,但這應該讓你類似你想要的東西:

import csv 

with open('data.txt', 'r') as f: 
    with open('data.csv', 'wb') as csv_out: 
     line_iter = iter(l.rstrip('\n') for l in f) 
     writer = csv.writer(csv_out) 
     writer.writerow(['Name', 'Street', '', 'Address']) 
     try: 
      line_iter.next() # discard 'random text' (?) 
      while True: 
       writer.writerow([line_iter.next(), '', '', '']) 
       writer.writerow(['', line_iter.next(), '', '']) 
       writer.writerow(['', '', line_iter.next(), '']) 
       writer.writerow(['', '', '', line_iter.next()]) 
       writer.writerow(['', '', '', line_iter.next()]) 
     except StopIteration: 
      pass  # reached end of file 

它給出了這樣的輸出作爲示例數據上面:

 
Name,Street,,Address 
Johm May,,, 
,1234 Big Street,, 
,,"Atlanta, GA 30331", 
,,,acre .14 small 
,,,random text 
Jane Jones,,, 
,4321 Little Street,, 
,,"Atlanta, GA 30322", 
,,,acre .07 small 
,,,random text 
+0

爲什麼不直接使用'f'而不是'line_iter'? – DSM

+0

我可以這樣做,但由於'file.readline()'不會返回異常,所以我必須在每個'line_iter.next()'周圍添加代碼來檢查EOF和'break'。 –

+0

謝謝。我會試試這個。 – user1718373