为什么csvwriter.writerow()在每个字符之后都放一个逗号?

此代码打开url并在末尾附加/names ,并打开页面并将string打印到test1.csv

 import urllib2 import re import csv url = ("http://www.example.com") bios = [u'/name1', u'/name2', u'/name3'] csvwriter = csv.writer(open("/test1.csv", "a")) for l in bios: OpenThisLink = url + l response = urllib2.urlopen(OpenThisLink) html = response.read() item = re.search('(JD)(.*?)(\d+)', html) if item: JD = item.group() csvwriter.writerow(JD) else: NoJD = "NoJD" csvwriter.writerow(NoJD) 

但是我得到这个结果:

J,D,",", ,C,o,l,u,m,b,i,a, ,L,a,w, ,S,c,h,o,o,l,....

如果我把string改成(“JD”,“哥伦比亚法学院”),那么我就可以得到

JD, Columbia Law School...)

在文档中我找不到如何指定分隔符。

如果我尝试使用delimenter我得到这个错误:

 TypeError: 'delimeter' is an invalid keyword argument for this function 

谢谢您的帮助。

它期望一个string的序列(例如:一个列表或元组)。 你给它一个单一的string。 一个string恰好也是一串string,但它是一串1个字符的string,这不是你想要的。

如果你只想每行一个string,你可以这样做:

 csvwriter.writerow([JD]) 

这包装一个列表的JD(一个string)。

csv.writer类需要一个迭代,因为它是writerow的参数; 由于Python中的string可以按字符迭代,它们是Writer可以接受的参数,但是您可以获得上述输出。

要纠正这个问题,你可以根据空格分割值(我假设你想要的)

 csvwriter.writerow(JD.split()) 

发生这种情况是因为当一个MatchObject实例的group()方法只返回一个值时,它会以stringforms返回它。 当有多个值时,它们作为string的元组返回。

如果你正在写一行,我想,csv.writer遍历你传递给它的对象。 如果你传递一个单一的string(这是一个可迭代的),它遍历它的字符,产生你正在观察的结果。 如果你传递一个string元组,它会得到一个实际的string,而不是每个迭代中的一个字符。