簡體   English   中英

為什么 csvwriter.writerow() 在每個字符后加一個逗號?

[英]Why does csvwriter.writerow() put a comma after each character?

此代碼打開 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)

但我得到這個結果:

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

如果我將字符串更改為 ("JD", "Columbia Law School"...) 然后我得到

JD, Columbia Law School...)

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

如果我嘗試使用delimeter ,我會收到此錯誤:

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

它需要一個字符串序列(例如:列表或元組)。 您給它一個字符串。 一個字符串也恰好是一個字符串序列,但是它是一個由1個字符串組成的序列,這不是您想要的。

如果您只想每行一個字符串,則可以執行以下操作:

csvwriter.writerow([JD])

這會用列表包裝JD(字符串)。

csv.writer類使用一個可迭代的變量作為writerow的參數。 由於Python中的字符串可以按字符進行迭代,因此它們是writerow可接受的參數,但是您會得到上面的輸出。

為了解決這個問題,您可以根據空格分割值(我假設這就是您想要的)

csvwriter.writerow(JD.split())

發生這種情況的原因是,當MatchObject實例的group()方法僅返回單個值時,它將作為字符串返回。 當有多個值時,它們將作為字符串元組返回。

如果您要寫一行,我想csv.writer會遍歷傳遞給它的對象。 如果傳遞單個字符串(可迭代),則會對其字符進行迭代,從而產生您正在觀察的結果。 如果傳遞字符串的元組,它將獲得實際的字符串,而不是每次迭代都包含單個字符。

換句話說——如果您在整個 output 周圍添加方括號,它將被視為一個項目,因此不會添加逗號。 例如,而不是:

spamwriter.writerow(matrix[row]['id'],matrix[row]['value'])

使用:

spamwriter.writerow([matrix[row]['id'] + ',' + matrix[row]['value']])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM