2017-09-20 66 views
0

我有一個文件,它需要表格的模糊形式。換行(\r\n)不同的行和標籤(\t)在那裏有一個以上的將字符串與Python中的文件中的數據匹配

我已經打開了文件,然後由線讀取它行成像這樣的列表行單獨列:

file = open('data.txt') 
table = file.readlines() 

我現在試圖從文件中刪除某些行(從列表中的項目),這是不相關的(列標題等)。我的嘗試是這樣的:

for i in table: 
    if table[i] == "Tue": 
     del(table[i]) 

但既不"Tue""Tue\r\n"與條件匹配。 我查過記事本++Tue\r\n這個文件就行了。

我哪裏出錯了?

+0

只是''Tue \ n「'怎麼樣?同樣'對於我在表中'實際上使'i'成爲表格的一行,所以你不想用'i'重新索引。無論如何,最好的想法是詢問'Tue'是否在':'行中:'表中的行:...如果行中有「Tue」。對於例如'星期二'中的'Tue'返回'True'。 –

+0

列表中的每個項目都是完整的一行。所以,如果你有如果table [i] ==「Tue」,你正在檢查的是如果整行包含一個單詞和該單詞是星期二。你不是簡單地檢查單詞Tue是否存在於該行的某處。在這種情況下最好使用正則表達式或類似的東西:if table [i]中的'Tue'。 –

+1

我不明白,你期望什麼? 「'Tue'!=」Tue \ r \ n「'......,此外,正如答案所指出的那樣,您錯誤地使用了」for-loop「。最後,*在迭代時不要從列表中刪除*(除非你非常小心......) –

回答

0

當你爲「我在表中」做的i變量不是一個計數器到行中它是實際的數據行。如果你想反,那麼這個作品:

for i, line in enumerate(table): 

爲了應對任何可能的新行或結尾的空白rstrip是有幫助的:

#!/bin/python 
file = open('a') 
table = file.readlines() 
for line in table: 
    if line.rstrip() != 'Tue': 
    print line 

但是你必須要小心,從表中刪除 - 每次你所做的一切都會改變,所以目前的del(表格[i])會以神祕的方式失敗。如果你真的想創建一個新的陣列,這個工程:

#!/bin/python 
file = open('a') 
table = file.readlines() 
table2 = [] 
for line in table: 
    if line.rstrip() != 'Tue': 
    table2.append(line.rstrip()) 

for line in table2: 
    print line 

這將做你想要的東西。

2

for i in table將遍歷表列表,並將i設置爲列表中的每個成員,在您的情況下,文件中的一行 - 一個字符串。

所以,當你正在測試table[i]的內容時,你可能會得到一個索引錯誤(順便說一句,你應該發佈你的錯誤:))。

測試i而不是table[i]

+1

好趕上!但是,''Tue'!=「Tue \ r \ n」' –

+0

爲了解決這個問題,@ juanpa.arrivillaga狀態就像檢查「Tue」是否在行中一樣簡單,而不是如果它等同於行。也許最好給我一個更具描述性的名字。 –

0

不要以字符串形式讀取文件。使用某種類型的CSV庫,並在行上作爲記錄和列作爲字段進行操作。有太多的特殊情況需要考慮,有人已經在圖書館爲你解決了。

tablib就是這樣一個圖書館,但有很多要根據你的口味考慮。

0

亞歷克斯實際上在第一個評論「Tue \ n」中找到了匹配文檔。/r必須被刪除。