2011-09-14 16 views
10

अस्वीकरण: मैं यूरोप में हूं।पायथन सीएसवी लेखक गलत विभाजक?

this page के अनुसार एक्सेल अर्धविराम ; यूरोप में डिफ़ॉल्ट विभाजक के रूप में दशमलव अल्पविराम के साथ "संघर्ष को रोकने" के रूप में उपयोग करता है।

import csv 

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

कौन इस फाइल उत्पन्न करनी चाहिए:

अब, मैं इस अजगर कोड है

test;data 
foo;bar 

लेकिन इसके बजाय यह अल्पविराम का उपयोग करता है। ये क्यों हो रहा है? locale.getdefaultlocale()('nl_NL', 'cp1252') देता है।

+3

मुझे डाउनवोट समझ में नहीं आता है। यह एक प्रासंगिक समस्या है, यह अनुसंधान प्रयास दिखाती है, और समाधान स्पष्ट नहीं है। –

+0

विभिन्न असंबद्ध प्रश्न: क्या आपने उद्धृत किए गए "इस पृष्ठ" में चौथा समाधान पढ़ा था? इस एसएसवी फ़ाइल के उद्देश्य वाले उपभोक्ता कौन हैं - लोग या कंप्यूटर? वे इसके साथ क्या करेंगे? क्या आपने एक एक्सएलएस या एक्सएलएसएक्स फ़ाइल लिखने पर विचार किया है (जिसे देखभाल के साथ लोकेल-अज्ञेयवादी बनाया जा सकता है)? –

उत्तर

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.py, line 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

निश्चित रूप से यह आसानी से तय किया गया है, लेकिन मुझे लगता है कि यदि पाइथन में एक्सेल बोली शामिल है तो यह इसे सही ढंग से कार्यान्वित करेगा = एस – orlp

+0

@miku: -1। आपके दूसरे कथन के बाद, 'csv.excel.delimiter'' ''के बजाय'' '' '' '' को संदर्भित करता है। @ डोंकोपोटामस द्वारा जवाब पढ़ें। –

+0

@ जॉन, धन्यवाद, सही किया गया। – miku

संबंधित मुद्दे