为什么csvwriter.writerow()在每个字符后面加一个逗号?

Zey*_*nel 84 python csv

此代码打开URL并/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)
Run Code Online (Sandbox Code Playgroud)

但我得到了这个结果:

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
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助.

Lau*_*ves 124

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

如果你只想要每行一个字符串,你可以这样做:

csvwriter.writerow([JD])
Run Code Online (Sandbox Code Playgroud)

这包含JD(一个字符串)与列表.

  • 现在它还写字符串的引号。有没有办法解决这个问题? (2认同)

Gab*_*eid 5

csv.writer类采用iterable作为writerow的参数; 因为Python中的字符串可以按字符迭代,所以它们是writerow可接受的参数,但是你得到了上面的输出.

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

csvwriter.writerow(JD.split())
Run Code Online (Sandbox Code Playgroud)