为什么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,而不是每个迭代中的一个字符。