2013-07-01 93 views
1

所以我有下面的數據源(「/」代表製表符分隔的語言環境),我想把它變成JSON格式。該數據沒有標題,我希望能夠插入名稱,學位,區域(CEP),電話號碼,電子郵件和網址。不知道這是否適用於包含多個變量的第一列。如何將標題插入製表符分隔文件?

有關如何插入標題然後解析第一列的任何建議? csv模塊具有「has_header」功能,但我想插入一個標題。

Rxxxx G. Axxxx M.A.T., xxx 561-7x0-xxx  [email protected] www.txxxx.com 
Pxxxx D. Axxxx Ed.M. 
xxxxx D. xxxx Ed.M.   413-xxx-xxxx [email protected]  www.pxxxxt.com 
xxxxx xxxx xxxxx M.S. 
xxx xxx xxxxxx M.S. 
xxxxxx R. xxxxx M.B.A. 
xxxxxx xxxxxx M.A.Ed., CEP 

This is a similar post

我已經試過:

echo $'name\ phone\ email\ url' | cat - IECA_supplement_output.txt > ieca_supp_output.txt 

但這不起作用。它只是給了我'姓名\電話......'在頂部,然後在右邊的數據。標題不是由tab分隔的。

+0

因此,這個問題的早期版本有一條評論指出,這不是一個CSV,因爲換行符不會被轉義,每行也不代表單行,也可能是'/'似乎沒有將第3行中的電話號碼和電子郵件地址分開。您是否可以控制傳入數據? –

+0

對......呃......我不確定爲什麼這些行不代表行。我試圖放置第一行以顯示它是製表符分隔的。我手動插入「/」來表示TextWrangler標記標籤的位置。 – goldisfine

回答

1

首先確保分隔符真的是你的想法。您可以通過使用openoffice打開文件或使用正則表達式(re模塊)編寫python函數來檢測分隔符來檢查此問題。還要確保線以「/ n」或Windows風格(另外的r)結尾。

標題不過是第一行。所以在python中打開文件,讀取所有行。在第一行添加標題字符串(用/t作爲製表符分隔符)。將行寫回文件。 就是這樣。

0

可能有一種優雅的編程方法來實現這一點,但我使用的方法是在Excel中使用'tab'作爲分隔符打開.txt文件。打開文件後,我只是在第一行中輸入列標題。小菜一碟! :)

1

要做到這一點在Python中,你可以嘗試讀取每一行(當您去固定數據),然後寫一個固定的製表符分隔值與頭部像這樣的文件:

import csv 

rows = [] 
with open('rawdata.txt') as f: 
    row = [''] 
    for line in f.readlines(): 
     data = line.rstrip().split('\t') 
     if len(data) > 1: 
      row[0] += data[0] 
      row.extend(data[1:]) 
      rows.append(row) 
      row = [''] 
     else: 
      row[0] += data[0] + ' ' 

with open('data.csv', 'wb') as o: 
    file_writer = csv.writer(o, delimiter='\t') 
    file_writer.writerow(['Name','Phone','EMail','URL']) 
    for row in rows: 
     file_writer.writerow(row) 

這需要以下數據文件作爲它的輸入:

rawdata.txt:

Rxxxx G. Axxxx M.A.T., xxx 561-7x0-xxx [email protected] www.txxxx.com 
Pxxxx D. Axxxx Ed.M. 
xxxxx D. xxxx Ed.M. 413-xxx-xxxx [email protected] www.pxxxxt.com 
xxxxx xxxx xxxxx M.S. 
xxx xxx xxxxxx M.S. 
xxxxxx R. xxxxx M.B.A. 
xxxxxx xxxxxx M.A.Ed., CEP 415-xxx-xxxx [email protected]rve.net www.hxxxxxl.com 

此代碼假定該文件的最後一行符合「姓名,電話號碼,電子郵件和網站」的理想格式,否則最後的「不完整」行將被無聲地丟棄。當它讀取每一行時,它會查看是否有足夠的列來滿足有效的行。如果沒有它將名稱列添加到變量並繼續讀取,如果它帶有名稱列並將其與聯繫人信息結合並將其附加到名爲rows的數組。讀完輸入後,它會使用Pythons csv模塊在追加標題行後寫入數據。

相關問題