Python .csv写入器

问题描述:

我在循环中使用.writer()方法,如Python文档中所示。 我想逐行写出变量u的结果(或者逐行更好)。Python .csv写入器

其实它在解释器中完美工作,但模块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

python解释器会抛出错误还是什么问题?顺便说一句,你打印的是变量“u”的值,但是你写了字母“u”给csv。那是你要的吗? – 2011-04-18 11:15:22

+0

口译员没有错误。我想打印变量u的值。顺便说一句,该文件似乎并未打开。 – c24b 2011-04-18 12:13:35

+0

你看到了什么结果?是空的吗?将文件打开,尝试除块外,并尝试打开文件(ifile,ofile)时是否引发任何IOError。如果没有IOError,请检查网站源是否为空?打印其内容并查看它是否有任何值。 – sateesh 2011-04-18 13:17:50

猜你真正的意思,我想如下重写代码:

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,因为它是不使用。当您创建url时,您已经重复了其中的内容,因此我摆脱了for row in file (ifile):

我改变

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)代替最后的循环。

+0

谢谢我只是创建一个新的.csv做相同的更改比你,它的作品。因为> url = [urlparse(u).netloc for you in ifile] 因为您已经打开了该文件。非常感谢 – c24b 2011-04-18 16:09:01

你想写字符串“u”吗?或变量的内容?如果是后面的选项,则删除括号。

+0

我想通过在解释器中打印它来给变量u写入变量u的内容。但是当我用一个简单的字符串(如writer.writerow(“blabla”))在空白区域尝试它时。不起作用。它似乎是模块csv不起作用...但我放在开始导入csv。 – c24b 2011-04-18 12:14:38

不完全确定,但csv.writer.writerow想要一个序列(我总是使用它与列表)与整个行的字段,并且你迭代一组什么返回什么在你?

+0

解释器中没有类型错误。我使用打印功能来检查它是否相关。但也许你是对的一点:作家想要也许“,”返回整个行。但函数写不起作用...... – c24b 2011-04-18 13:37:28

+0

那么你得到的变量“u”是什么值? – Torp 2011-04-18 13:42:26

writerow()预计序列参数,所以我认为你需要使用writer.writerow([u])因为每个u是一个字符串 - 否则,你传递给它做它,你现在有它的方式的字符序列。

+0

好的,我已经做了一个改变,并给它一个序列参数退出分裂功能。它返回列表集合(['','alain-bazot.fr','blog.lefigaro.fr','humeursdejeandornac.blogspot.com','lefigaro.fr','machronique)中的简化网址列表。 com','lemoci.com','france-amerique.com','agriculture.gouv.fr']),但仍然没有办法将它写入csv文件 – c24b 2011-04-18 13:47:40