3

入力.csvファイルの結合フィールドを結合して.csvファイルに出力したいのですが、一部にはコンマが含まれています。これが私のコードです、簡略化されています

outfile = open('output.csv', 'w')

#these values are made up for this example; normally they would be read from
#a csv and passed to the following 'combine()' function

a = "John"  
b = ",Jr."  

def combine(a, b):  
    if a == "":  
        pass  #don't write anything if the field is empty
    else:  
        outfile.write(a)  
    if b =="":  
        pass  
    else:  
        outfile.write(b)  

bがコンマで始まる場合、出力「John、Jr」を作成するにはどうすればよいですか。?csv.writer writerow()を使用してみましたが、各文字の間にコンマ区切り文字が挿入されています。を定義しようとしましたescapecharが、「John \ "、"Jr。」が出力されます。提案?

4

4 に答える 4

4

CSVの詳細を知りたい場合は、仕様があります:https ://www.rfc-editor.org/rfc/rfc4180

一般に、「改行(CRLF)、二重引用符、およびコンマを含むフィールドは二重引用符で囲む必要があります」と記載されています。

「フィールドを囲むために二重引用符が使用されている場合、フィールド内に表示される二重引用符は、その前に別の二重引用符を付けてエスケープする必要があります。」

Excelのような実装では、すべてのフィールド値が常に二重引用符で囲まれます。

読み取りまたは書き込み用にファイルを開く場合は、引用のタイプを直接指定できます

mcvs = csv.writer(open('file.csv', 'wb'), quoting=csv.QUOTE_ALL)

フィールド値の前後に常に引用符を追加します。

可能なすべての値については、Pythonのドキュメントを参照してください

http://docs.python.org/library/csv.html#module-csv

于 2012-02-22T05:49:30.467 に答える
1

csv.writer引用方法を制御するために使用できるキーワードを追加quotingできます。

あなたはおそらくのようなものが欲しいでしょうcsv.QUOTE_MINIMAL

>>> import csv
>>> with open('eggs.csv', 'wb') as outfile:
...     writer = csv.writer(outfile, quoting=csv.QUOTE_MINIMAL)
...     writer.writerow(['Spam'] * 5 + ['Baked Beans'])
...     writer.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])
于 2012-02-22T05:51:56.577 に答える
0

csv.writer writerow()値のリストが必要です。

foo.writerow(['John', ',Jr.'])
于 2012-02-22T05:38:37.517 に答える
0

そして、純粋なPythonを使い続けたい場合は、次のようにします。

resultStr = a+b
if ',' in resultStr: resultStr= '"' + resultStr + '"'
于 2012-02-22T05:42:25.917 に答える