2011-09-14 23 views
10

免責事項:私はヨーロッパにいる。Python csv writer間違った区切り文字ですか?

this pageによれば、Excelでは、セミコロンで「競合を防止する」ためにセミコロン;がヨーロッパのデフォルトセパレータとして使用されます。

test;data 
foo;bar 

ではなく、それはコンマを使用しています。このファイルを生成する必要があります

import csv 

data = [["test", "data"], ["foo", "bar"]] 
writer = csv.writer(open("data.csv", "wb"), dialect="excel") 
writer.writerows(data) 

は今、私はこのPythonコードを持っています。なぜこうなった? locale.getdefaultlocale()('nl_NL', 'cp1252')を返します。

+3

私はdownvoteを理解していません。それは関連する問題であり、研究努力を示しており、解決策はそれほど明白ではありません。 –

+0

さまざまな無関係な質問:あなたが引用した「このページ」の第4の解決策をお読みになりましたか?このSSVファイルの意図された消費者は誰ですか?人やコンピュータですか?彼らはそれで何をしますか?あなたはXLSやXLSXファイルを書くことを考えましたか(ロケールに依存しないように注意してください)? –

答えて

16

これは、csv.excelの方言がロケールに対応していないためです。あなたが明示的に区切り文字としてセミコロンを使用したい場合、あなたはcsv.open

writer = csv.writer(open("data.csv", "wb"), delimiter=";") 

として、あるいは新しい方言を作成して登録するか、明示的に区切り文字を渡す必要があり、それのいずれかの場合には

class excel_semicolon(csv.excel): 
    delimiter = ';' 
register_dialect("excel-semicolon", excel_semicolon) 
、浮動小数点数がどのように書かれているかをテストする必要があります...私は彼らがあなたが望むヨーロッパの書式で書かれていないと思われます(基数としてカンマ)

6

excel方言は(Lib/csv.pyline 57に)次の属性によって指定されています

delimiter = ',' 
quotechar = '"' 
doublequote = True 
skipinitialspace = False 
lineterminator = '\r\n' 
quoting = QUOTE_MINIMAL 

私は、これは何とかロケールに依存していることを、何のヒントを参照してくださいしない - ので、あなたは常にデフォルトで,を取得します方言。

しかし、これは簡単に修正できます。

class excel_semicolon(csv.excel): 
    delimiter = ';' 

writer = csv.writer(open("data.csv", "wb"), dialect=excel_semicolon) 
+0

これは簡単に修正できますが、PythonにExcelの方言が正しく実装されていると仮定しました= S – orlp

+0

@miku:-1。あなたの2番目のステートメントの後、 'csv.excel.delimiter'は' '、' 'の代わりに'; ''を参照します。 @Donkopotamusによる答えを読んでください。 –

+0

@John、ありがとうございました。 – miku

関連する問題