2015-06-22 76 views
0

我是新來的Python和我在一個腳本的工作從通過雙標籤分隔(除了第一行至極文件讀取由單一的標籤」Python的文件分隔的雙標籤

我分隔試過如下:

f = open('data.csv', 'rU') 
source = list(csv.reader(f,skipinitialspace=True, delimiter='\t')) 

     for row in source: 
      print row 

的事情是,csv.reader不會採取兩個字符分隔符是否有做雙片分隔符工作的好辦法

輸出目前的樣子?這個:

['2011-11-28 10:25:44', '', '2011-11-28 10:33:00', '', 'Showering', ''] 
['2011-11-28 10:34:23', '', '2011-11-28 10:43:00', '', 'Breakfast', ''] 
['2011-11-28 10:49:48', '', '2011-11-28 10:51:13', '', 'Grooming',''] 

應該只有三列數據,但是,由於分隔字段的雙選項卡,它將拾取額外的空字段。

回答

0

您對數據有多少了解?有沒有可能一個條目包含雙標籤?如果沒有,我會放棄csv模塊,並使用簡單的方法:

with open('data.csv') as data: 
    for line in data: 
     print line.strip().split('\t\t') 

csv模塊做技巧性的東西,比如確定何時分隔符應拆分字符串不錯,而當它不應該,因爲它是一個條目的一部分。例如,假設我們使用空格作爲分隔符,和我們有一排如:

"this" "is" "a test" 

我們用引號括每個條目,給三個條目。很明顯,如果我們使用分隔空間的方法,我們將獲得

['"this"', '"is"', '"a', 'test"'] 

這不是我們想要的。 csv模塊在這裏很有用。但是如果我們可以保證每當空間出現時,它就是一個分隔符,那麼就不需要使用csv模塊的功能。只需使用str.split並稱之爲一天。

1

如果在這裏性能不是問題,那麼你會用這個快速和黑客解決方案好嗎。

f = open('data.csv', 'rU') 
source = list(csv.reader(f,skipinitialspace=True, delimiter='\t')) 

    for row in source: 
     print row[::2] 

行[:: 2]不爲是2對於上述輸出倍數指標在列表行了一大步,指數由一大步偏移(這裏是其2)是一條路可走!