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


97

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

도와 주셔서 감사합니다.


8
그건 delimiter하지 delimeter: docs.python.org/library/csv.html
존 Paulett

당신이 writer.writerow이 문제가 있어요 경우 , 그것을리스트의리스트와 문자열이 아닌 목록을 전달합니다.
Noumenon 19.01.25

답변:


148

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

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

csvwriter.writerow([JD])

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


감사! 이것은 그것을 고쳤습니다. 다른 답변도해볼 게요. 나는 또한 빈 목록 JDList = []를 만들고 거기에 JD를 추가했습니다. 이것도 작동하지만 이것은 더 간단합니다.
Zeynel

1
이제 문자열의 따옴표도 씁니다. 그 주위에 방법이 있습니까?
CGFoX 2016

@CGFoX 이것을 보여주는 예제 코드를 게시 할 수 있습니까?
Laurence Gonsalves

writer.writerow([datetime.now().strftime("%Y-%m-%d %H:%M:%S")])datetime을 다음과 같이 기록합니다."2016-11-05 20:30:19"
CGFoX

@CGFoX 나는 그 행동을 재현 할 수 없습니다. 나는 2016-11-05 13:21:11따옴표없이 얻습니다 . 어떤 버전의 Python을 사용하고 있습니까?
Laurence Gonsalves

5

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

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

csvwriter.writerow(JD.split())

1

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.