2014-01-30 210 views
1

如果第二列匹配字符串,我試圖從csv文件中刪除一行。我的csv文件包含以下信息:使用python刪除csv文件中的特定行

Name 
15 Dog 

我想要將其中的「Name」行刪除。我正在使用的代碼是:

import csv 

reader = csv.reader(open("info.csv", "rb"), delimiter=',') 

f = csv.writer(open("final.csv", "wb")) 
for line in reader: 
    if "Name" not in line: 
     f.writerow(line) 
     print line 

但「名稱」行未被刪除。我究竟做錯了什麼?

編輯:我使用了錯誤的分隔符。將其更改爲\ t工作。以下是現在可用的代碼。 導入CSV

reader = csv.reader(open("info.csv", "rb"), delimiter='\t') 

f = csv.writer(open("final.csv", "wb")) 
for line in reader: 
    if "Name" not in line: 
     f.writerow(line) 
     print line 
+0

你縮進你的代碼示例(for循環後無壓痕)搞砸了。你能解決這個問題嗎?由於沒有行被過濾掉,所以你可以假設「Name」不在行中總是評估爲「True」。也許你可以告訴我們該文件實際上是什麼樣子? –

+0

抱歉有縮進,但保存時格式不正確。以防萬一http://pastebin.com/9XwBkUx7那裏也是 – Howli

回答

4

似乎要指定在csv.reader錯誤的分隔符(逗號)

+0

+1。這可能是Howlin正在描述的問題的原因,但是我希望能夠看到來自OP的更多細節,因爲現在您正在迴應預感。 –

+0

我使用逗號的原因是因爲我使用了[SO]上另一個問題的代碼(http://stackoverflow.com/a/8566894/3204827),並假定我也使用它(我知道一個壞主意)。我將它從逗號改爲\ t,現在就可以使用。編輯:我已經添加了適用於我的第一篇文章的代碼。 – Howli

2

通過reader產生每行都是一個list,通過您的分隔符分割。順便說一句,你指定爲,,你確定這是你想要的分隔符嗎?您的示例由製表符分隔。

無論如何,你想檢查'Name'是否在任何元素的給定線。因此,這仍然可以工作,不管你的分隔符是否正確:

for line in reader: 
    if any('Name' in x for x in line): 
     #write operation 

注意到其中的差別。此版本在每個列表元素中檢查'Name',您的檢查是否'Name'in的列表。它們在語義上是不同的,因爲'Name' in ['blah blah Name']False

我會建議先修復分隔符錯誤。如果仍有問題,請使用if any(...),因爲確切標記'Name'不在您的列表中,但包含「名稱」的內容爲。

相關問題