此代码打开网址并在最后添加/names
并打开页面并将字符串打印到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,....
如果我将字符串更改为(“JD”,“哥伦比亚大学法学院”......),那么我得到
JD, Columbia Law School...)
我在文档中找不到如何指定分隔符。
如果我尝试使用delimenter
,我会收到此错误:
TypeError: 'delimeter' is an invalid keyword argument for this function
感谢您的帮助。
答案 0 :(得分:108)
它需要一个字符串的序列(例如:列表或元组)。你给它一个字符串。字符串恰好也是一个字符串序列,但它是一个1个字符串的序列,这不是你想要的。
如果你只想要每行一个字符串,你可以这样做:
csvwriter.writerow([JD])
这包含带有列表的JD(字符串)。
答案 1 :(得分:5)
csv.writer类采用iterable作为writerow的参数;因为Python中的字符串可以按字符迭代,所以它们是writerow可接受的参数,但是你得到了上面的输出。
要纠正这个问题,您可以根据空格分割值(我假设这是你想要的)
csvwriter.writerow(JD.split())
答案 2 :(得分:1)
这种情况会发生,因为当MatchObject实例的group()方法只返回一个值时,它会将其作为字符串返回。当有多个值时,它们将作为字符串元组返回。
如果你要写一行,我想,csv.writer会迭代你传递给它的对象。如果传递单个字符串(可迭代),它会遍历其字符,从而产生您正在观察的结果。如果传递一个字符串元组,它会获得一个实际的字符串,而不是每次迭代时的单个字符。