2010-06-08 155 views
2

我有多個CSV文件,需要在循環中解析以收集信息。 問題是雖然它們是相同的格式,但有些由'\ t'分隔,而另一些則由','分隔。 之後,我想刪除字符串周圍的雙引號。Python:使用多分割分隔符分割文件

python可以通過多個可能的分隔符分割嗎?

在一分鐘,我可以通過使用一個分割線:

f = open(filename, "r") 
fields = f.readlines() 
for fs in fields: 
    sf = fs.split('\t') 
    tf = [fi.strip ('"') for fi in sf] 

任何建議都歡迎。

sf = re.split(r'[,\t]', fs) 

這並不佔例如:

+0

可能重複([正則表達式的Python通過兩個分隔符中的一個分割的字符串] http://stackoverflow.com/questions/618551/python-regex-split-a-string-by-one-of-兩個分隔符) – danben 2010-06-08 16:43:04

+2

請不要將其作爲重複關閉:正如我在我的回答中所說的,手動分割在這裏是錯誤的解決方案,所以其他問題不會有幫助。 – interjay 2010-06-08 16:55:31

回答

14

像這樣拆分文件並不是一個好主意:如果其中一個字段中有逗號,它將會失敗。例如(對於製表符分隔的文件):行"field1"\t"Hello, world"\t"field3"將被分成4個字段而不是3個。

相反,您應該使用csv模塊。它包含有幫助的Sniffer類,它可以檢測文件中使用了哪些分隔符。 csv模塊也會爲您刪除雙引號。

import csv 

csvfile = open("example.csv") 
dialect = csv.Sniffer().sniff(csvfile.read(1024)) 
csvfile.seek(0) 
reader = csv.reader(csvfile, dialect) 

for line in reader: 
    #process line 
+0

+1在python中,你通常會找到一些工具來幫助你解決問題,只要你使用一些熟悉的格式。從許多重複發明的嘗試中學到的教訓:) – daramarak 2010-06-08 17:36:36

+0

1024是指什麼? – user809695 2013-08-23 20:22:39

+0

@ user809695它意味着根據文件的前1024個字節確定格式。它可以是任何其他數字,它只需要足夠大以包含足夠的數據來確定格式。 – interjay 2013-08-23 23:03:23

2

你可以用正則表達式(可選編譯)做到這一點以製表符分隔的字段中的逗號。我會看看csv模塊是否有用。