2014-10-03 121 views
0

腳本正在從csv文件獲取鏈接並從網頁中刪除一些信息。有些鏈接不起作用,腳本摸不着頭腦。我已經包含了一個try/except,但是這會混淆我的輸出,因爲我需要原始文件中的確切數量的輸出行。刪除Python中的csv行

for row in reader: 
    try: 
     url = row[4] 
     req=urllib2.Request(url) 
     tree = lxml.html.fromstring(urllib2.urlopen(req).read()) 
    except: 
     continue 

有沒有辦法從csv文件中刪除有錯誤鏈接的行? 喜歡的東西:

for row in reader: 
    try: 
     url = row[4] 
     req=urllib2.Request(url) 
     tree = lxml.html.fromstring(urllib2.urlopen(req).read()) 
    except: 
     continue 
     DELETE_THE_ROW 
+0

你爲什麼''''需要原始文件中輸出行的確切數量'''' – wwii 2014-10-03 15:42:23

回答

1

最好的方法是創建一個新的csv文件並繼續只寫出那些鏈接有效的行。

f = open('another_csv.csv','w+') 
for row in reader: 
    try: 
     url = row[4] 
     req=urllib2.Request(url) 
     tree = lxml.html.fromstring(urllib2.urlopen(req).read()) 
     print >>f,','.join(row) 
    except: 
     #can log the faulty links in another file 
     continue 
f.close() 

您可以將新的csv重命名爲原始的csv,或保​​留兩者。

+0

這很有效,但有一些複雜性。由於原始文件中有逗號(如文章標題),帶有','分隔符的新文件會超級混亂。有沒有辦法規避這個問題? – Zlo 2014-10-03 14:53:41

+0

在這裏你可以:'print >> f,''''',''。join(row)+'「'' – 2014-10-04 10:22:45

+0

或者你可以直接使用@Yann中提到的csv.writer。它只會引用那些有逗號的字段。對所有字段使用引號也會增加文件大小。 – 2014-10-04 10:23:57

0

如果一切順利的話,你爲什麼不寫的好行到另一個文件?

writer = csv.writer(out_file_handle) 
for row in reader: 
    try: 
     url = row[4] 
     req=urllib2.Request(url) 
     tree = lxml.html.fromstring(urllib2.urlopen(req).read()) 
    except: 
     continue 
    else: 
     writer.writerow(row)