2017-03-16 66 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庫可以很好地處理它。如果您希望Excel能夠閱讀您的文件,然後使用dialect='excel'參數:

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

感謝海武!基本上問題是我需要爲該特定字符串使用多個引號 – bjj

0

您可以使用雙引號:

任何字段可以被引用(即,雙引號字符 內封閉)。有些字段必須按照以下 規則中的規定引用。

  • 任何字段可以被引用(即,用雙引號包圍字符)。一些字段必須按照以下規則中的規定進行引用。

    "1997","Ford","E350" 
    
  • 帶嵌入逗號或雙引號字符的字段必須加引號。

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

見從Comma-separated values更多細節。