我在循环中使用.writer()
方法,如Python文档中所示。
我想逐行写出变量u
的结果(或逐行更好)。
实际上它在解释器中工作得很好,但模块writerow()
似乎不起作用。为什么呢?
from urlparse import urlparse
import csv
import re
ifile =open(ipath,'r')
ofile = open(opath, 'wb')
writer = csv.writer(ofile, dialect='excel')
url =[urlparse(u).netloc for u in file (ipath, "r+b")]
sitesource = set([re.sub("www.", "", e) for e in url])
liste = [re.split(",'", e) for e in liste]
ofile
for row in file (ifile) :
for u in sitesource:
print ("Creation de:", u)
writer.writerow(u)
ofile.close()
我正在使用Python 2.7。
答案 0 :(得分:5)
猜猜你真的是说,我会按如下方式重写你的代码:
from urlparse import urlparse
import csv
import re
ifile =open(ipath,'r')
ofile = open(opath, 'wb')
writer = csv.writer(ofile, dialect='excel')
url =[urlparse(u).netloc for u in ifile]
sitesource = set([re.sub("www.", "", e) for e in url])
for u in sitesource:
print ("Creation de:", u)
writer.writerow([u])
ofile.close()
ifile.close()
我删除liste
,因为它没有被使用。当你创建for row in file (ifile):
时已经迭代了它的内容,我摆脱了url
。
我改变了
url =[urlparse(u).netloc for u in file (ipath, "r+b")]
到
url =[urlparse(u).netloc for u in ifile]
因为您已经打开了该文件。如果你正在阅读字符串,我假设你不想要二进制模式。
我更改了writerow(u)
来编写序列:writerow([u])
。这会在每行中放置一个u
,这意味着您的csv文件中不会包含任何逗号。如果您希望将所有结果放在一行中,请使用此参数writer.writerow(sitesource)
替换最终循环。
答案 1 :(得分:2)
writerow()
需要一个序列参数,因此我认为您需要使用writer.writerow([u])
,因为每个u
都是一个字符串 - 否则您将传递一系列字符来执行此操作你现在的方式。
答案 2 :(得分:0)
你想写字符串“你”吗?还是变量的内容?如果是后一个选项,则删除括号。
答案 3 :(得分:0)
不完全确定,但是csv.writer.writerow想要一个序列(我总是将它与列表一起使用)和整行的字段,并且你正在迭代一组返回你的内容的东西?