2014-03-12 40 views
0

我一直在研究Python腳本來解析csv文件中的單個分隔列。但是,列有多個不同的分隔符,我不知道如何做到這一點。使用Python解析分隔的csv文件,輸出到終端或文件

我有另一個腳本工作在類似的數據,但不能讓這個工作。以下數據位於該行的單個列中。我想讓腳本解析出來並在每個腳本之間添加製表符。然後,我想將這些數據附加到僅包含唯一項目的列表中。通常,我正在處理數百行這些數據,並希望解析整個文件,然後僅返回兩列中的唯一項(一個用於IP,另一個用於URL)。

數據解析:123.123.123.123::url.com,url2.com,234.234.234.234::url3.com(注意「:」和「」被用作在同一行上的分隔符)

import sys 
import csv 

csv_file = csv.DictReader(open(sys.argv[1], 'rb'), delimiter=':') 

uniq_rows = [] 

for column in csv_file: 
    X = column[' IP'].split(':')[-1] 
    row = X + '\t' 

    if row not in uniq_rows: 
     uniq_rows.append(row) 

for row in uniq_rows: 
    print row 

有誰知道如何完成我想做的事:

腳本我有工作?

+0

是::一個分隔符還是兩個? –

回答

0

更改列表(uniq_rows = [])的一組(uniq_rows = set()):

csv_file = csv.DictReader(open(sys.argv[1], 'rU'), delimiter=':') 
uniq_rows = set() 
for column in csv_file: 
    X = column[' IP'].split(':')[-1] 
    row = X + '\t' 
    uniq_rows.add(row) 

for row in list(uniq_rows): 
    print row 

如果您需要進一步的幫助,發表評論

+0

我做了更改,但仍然無法解析文件。我在「分割」行遇到錯誤。 – user3413087

+0

權,把錯誤在你的問題 – hd1

+0

我的最終目標是有大量的行狀: 123.123.123.123::url.com,url2.com,234.234.234.234::url3.com 123.123.123.123: :url.com,url2.com,234.234.234.234 :: url3.com 123.123.123.123:::::url.com,url2.com,234.234.234.234::url3.com 並將該數據解析爲: 123.123.123.123 url.com url2.com 234.234.234.234 url​​3.com 注意url2.com沒有一個IP與它相關 – user3413087

0

,你也可以只用更換來改變你的進口線:(在評論中提及了這裏一個簡單的文本操作,讓你(希望

>>> a = "123.123.123.123::url.com,url2.com,234.234.234.234::url3.com" 
>>> a = a.replace(',','\t') 
>>> a = a.replace(':','\t') 
>>> print (a) 
123.123.123.123  url.com url2.com 234.234.234.234  url3.com 
>>> 

)右輸出PR:不是過於Python的我猜,但標準內置) ior清潔非重複:

import sys 

read_raw_file = open('D:filename.csv') # open current file 
read_raw_text = read_raw_file.read() 
new_text = read_raw_text.strip() 

new_text = new_text.replace(',','\t') 
# new_text = new_text.replace('::','\t') optional if you want double : to only include one column 
new_text = new_text.replace(':','\t') 

text_list = new_text.split('\n') 
unique_items = [] 
for row in text_list: 
    if row not in unique_items: 
     unique_items.append(row) 


new_file ='D:newfile.csv' 
with open(new_file,'w') as write_output_file: #generate new file 
    for i in range(0,len(unique_items)): 
     write_output_file.write(unique_items[i]+'\n') 
    write_output_file.close() 
+0

是的,但我也可以在excel中使用分隔符功能並以此方式重複數據刪除...我只是試圖自動執行此操作,並且製作速度更快。 – user3413087

+0

我的意思是一旦你讀完了csv文件,讓我修改一下 –