2012-08-09 54 views
2

我正在處理一個小項目,並且遇到了一個問題。保留製表符後.split()

我讀文件像這樣(注意,原來的文件大約有40K行):

35 IMAGE:1679942 SAMD4 Sterile alpha motif domain Hs.98259 ATI146610 
36 IMAGE:1700154   AI049531 
37 IMAGE:1865232   AI269361 

正如你可以看到,有一些細胞,其包含的信息,有些不是。 所以我希望在沒有信息存儲的每個單元格中,N/A。我怎樣才能做到這一點? .split()確實沒有這些單元格的列表。是否有解決方案,我怎樣才能把所有這些水龍頭在列表中即line = ["36", "IMAGE:1700154", "", "", "", "AI049531", ...]

+1

列是否對齊?如何定義「單元格」? – 2012-08-09 09:35:29

+2

這是一個txt文件,也沒有電池的定義 也許這會有所幫助: 35 \的TImage:1679942 \ tSAMD4 \ tSterileα基序域\ tHs.98259 \ tATI146610 36 \的TImage:1700154 \ t \ t \ tAI049531 – 2012-08-09 09:36:59

+0

所以這些列由標籤'\ t'分隔嗎? – 2012-08-09 09:39:30

回答

2

您可以split在標籤(編輯運用註釋數據):

data = """35\tIMAGE:1679942\tSAMD4\tSterile alpha motif domain\tHs.98259\tATI146610 
36\tIMAGE:1700154\t\t\tAI049531""" 

for line in data.split("\n"): 
    print line.split("\t") 

結果:

['35', 'IMAGE:1679942', 'SAMD4', 'Sterile alpha motif domain', 'Hs.98259', 'ATI146610'] 
['36', 'IMAGE:1700154', '', '', 'AI049531'] 
+0

這個解決方案對於這種情況是錯誤的,因爲它看起來像這樣: line = [「36」,「IMAGE:1700154」,「AI049531」,...]並且我需要空點 – 2012-08-09 09:45:53

+0

爲什麼它是假的?什麼不行? – 2012-08-09 09:46:11

+1

謝謝,多數民衆贊成它:)我以爲我已經嘗試過它......但似乎不是:D非常感謝 – 2012-08-09 09:52:24

0

您必須先準備好數據,然後才能將其導入CSV並隨後導入您所需的列表格式。

1)通過查找欄的最大數量開始你就必須

2)找到的每一行項目的模式。例如。 A *,Sterite *等。希望這種模式可以區分不同的行項目。

3)對於每一行,執行row.split(「\ t」)`並將每個行項與模式匹配以在行中找到正確的索引。

4)newRow[correct_index] = oldrow[index] and "" for others