删除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
最好的方法是创建一个新的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,或保留两者。
这很有效,但有一些复杂性。由于原始文件中有逗号(如文章标题),带有','分隔符的新文件会超级混乱。有没有办法规避这个问题? – Zlo 2014-10-03 14:53:41
在这里你可以:'print >> f,''''',''。join(row)+'“'' – 2014-10-04 10:22:45
或者你可以直接使用@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)
你为什么''''需要原始文件中输出行的确切数量'''' – wwii 2014-10-03 15:42:23