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はそうではなくdelimeterdocs.python.org/library/csv.html
John

writer.writerow sでこの問題が発生する場合は、文字列のリストではなく、リストのリストを渡してください。
Noumenon

回答:


148

文字列のシーケンス(例:リストまたはタプル)が必要です。あなたはそれに単一の文字列を与えています。文字列もたまたま文字列のシーケンスですが、これは1文字の文字列のシーケンスです。

行ごとに1つの文字列だけが必要な場合は、次のようにすることができます。

csvwriter.writerow([JD])

これはJD(文字列)をリストでラップします。


ありがとう!これはそれを修正しました。他の答えも試してみます。また、空のリストJDList = []を作成し、それにJDを追加しました。これも機能しますが、これはより簡単です。
Zeynel 2009年

1
現在は文字列の引用符も書き込みます。それを回避する方法はありますか?
CGFoX 2016年

@CGFoXこれを示すサンプルコードを投稿できますか?
ローレンスゴンサルベス2016年

writer.writerow([datetime.now().strftime("%Y-%m-%d %H:%M:%S")])日付時刻を次のように書き込みます"2016-11-05 20:30:19"
CGFoX 2016年

@CGFoXその動作は再現できません。2016-11-05 13:21:11引用符なしで取得します。どのバージョンのPythonを使用していますか?
ローレンスゴンサルベス2016年

5

csv.writerクラスは、writerowの引数として反復可能オブジェクトを取ります。Pythonの文字列は文字ごとに反復可能であるため、それらはwriterowの受け入れ可能な引数ですが、上記の出力が得られます。

これを修正するために、空白に基づいて値を分割することができます(私はそれがあなたが望むものだと思います)

csvwriter.writerow(JD.split())

1

これは、MatchObjectインスタンスのgroup()メソッドが単一の値のみを返す場合、文字列として返すためです。複数の値がある場合、それらは文字列のタプルとして返されます。

行を書き込んでいる場合、csv.writerは渡されたオブジェクトを繰り返し処理します。単一の文字列(反復可能)を渡すと、その文字を反復処理して、監視している結果を生成します。文字列のタプルを渡すと、反復ごとに1文字ではなく、実際の文字列を取得します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.