删除Python中的csv行

删除Python中的csv行

问题描述:

脚本正在从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

最好的方法是创建一个新的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

如果一切顺利的话,你为什么不写的好行到另一个文件?

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)