2017-03-16 1 views
0

私はタプルで大きなリストを持っている:pythonが区切り文字で分割されない理由を誰かが明確にすることはできますか?

data = [(
    u'378329', 
    u'104', 
    u'13/03/2017 12:41:29', 
    u'18.19', 
    u'7891008171730;CHOC GAROTO BRANCO NEGRESCO 
    125G;1;UN;5.29;5.297891021006934;CAFE MELITTA EXTRAFORTE  
    500G;1;UN;12.9;12.90'), similar entries...., 
] 

私は次のコードを使用してCSVファイルにこれらのエントリを記述しようとしています:

with open('sefaz.csv', 'wb') as f: 
    writer = csv.writer(f, delimiter=',', quotechar="'", quoting=csv.QUOTE_MINIMAL) 
    writer.writerow(data[0]) 

これが私の出力です:

bad output

誰でもこの動作を私に説明できますか?なぜそれは奇妙に分割されますか?

私は、この文字列全体たい:

'7891008171730;CHOC GAROTO BRANCO NEGRESCO 125G;1;UN;5.29;5.297891021006934;CAFE MELITTA EXTRAFORTE  500G;1;UN;12.9;12.90' 

は、行の一つであると。

答えて

0

csv.reader()のすべてのオプションであまりにも頑張っています。最後の列は複数行の文字列であるようです。 csvライブラリは、以下の私の例に示すようにそれをうまく処理できます。

import csv 

data = [(
    u'378329', 
    u'104', 
    u'13/03/2017 12:41:29', 
    u'18.19', 
    u'''7891008171730;CHOC GAROTO BRANCO NEGRESCO 
    125G;1;UN;5.29;5.297891021006934;CAFE MELITTA EXTRAFORTE 
    500G;1;UN;12.9;12.90'''), 
] 

with open('sefaz.csv', 'wb') as f: 
    writer = csv.writer(f, dialect='excel') 
    writer.writerow(data[0]) 

with open('sefaz.csv') as f: 
    reader = csv.reader(f) 
    print(next(reader)) 

出力:

['378329', '104', '13/03/2017 12:41:29', '18.19', '7891008171730;CHOC GAROTO BRANCO NEGRESCO\n 125G;1;UN;5.29;5.297891021006934;CAFE MELITTA EXTRAFORTE\n 500G;1;UN;12.9;12.90'] 

Excelにインポート:

Imgur

+0

おかげハイヴあなたはExcelがファイルを読むことができるようにしたい場合は、dialect='excel'パラメータを使用します!基本的には、その特定の文字列に対して複数引用符を使用する必要があるという問題でした – bjj

0

あなたは二重引用符を使用することができます。

任意のフィールド(つまり、二重引用符 文字で囲まれた)引用されていてもよいです。一部のフィールドは、次の ルールで指定されているように、引用符で囲む必要があります。

  • 任意のフィールド(つまり、二重引用符で囲まれた)引用されていてもよいです。一部のフィールドは、次の規則で指定されているように引用符で囲む必要があります。埋め込まれたカンマまたは二重引用符で

    "1997","Ford","E350" 
    
  • フィールドは引用符で囲む必要があります。

    1997,Ford,E350,"Super, luxurious truck" 
    

Comma-separated valuesから詳細をご覧ください。

関連する問題