Python .csv编写器

时间:2011-04-18 11:08:33

标签: python csv writer

我在循环中使用.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。

4 个答案:

答案 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想要一个序列(我总是将它与列表一起使用)和整行的字段,并且你正在迭代一组返回你的内容的东西?