programing tip

csvwriter.writerow ()가 각 문자 뒤에 쉼표를 넣는 이유는 무엇입니까?

itbloger 2020. 10. 8. 07:47
반응형

csvwriter.writerow ()가 각 문자 뒤에 쉼표를 넣는 이유는 무엇입니까?


이 코드는 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...)

구분 기호를 지정하는 방법을 설명서에서 찾을 수 없습니다.

사용하려고 delimenter하면이 오류가 발생합니다.

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

도와 주셔서 감사합니다.


문자열의 시퀀스 (예 : 목록 또는 튜플)를 예상합니다. 단일 문자열을 제공합니다. 문자열은 문자열의 시퀀스이기도하지만 원하는 것이 아닌 1 개의 문자열로 구성된 시퀀스입니다.

행당 하나의 문자열 만 원하면 다음과 같이 할 수 있습니다.

csvwriter.writerow([JD])

이것은 JD (문자열)를 목록으로 감싼다.


csv.writer 클래스는 writerow에 대한 인수로 iterable을 사용합니다. Python의 문자열은 문자별로 반복 가능하므로 writerow에 허용되는 인수이지만 위의 출력을 얻습니다.

이를 수정하기 위해 공백을 기준으로 값을 분할 할 수 있습니다 (원하는 것으로 가정합니다).

csvwriter.writerow(JD.split())

이것은 MatchObject 인스턴스의 group () 메서드가 단일 값만 반환 할 때 문자열로 반환하기 때문에 발생합니다. 값이 여러 개인 경우 문자열 튜플로 반환됩니다.

행을 작성하는 경우 csv.writer는 전달하는 객체를 반복합니다. 단일 문자열 (반복 가능)을 전달하면 문자를 반복하여 관찰중인 결과를 생성합니다. 문자열의 튜플을 전달하면 모든 반복에서 단일 문자가 아닌 실제 문자열을 가져옵니다.

참고 URL : https://stackoverflow.com/questions/1816880/why-does-csvwriter-writerow-put-a-comma-after-each-character

반응형