2011-08-26 15 views
38

मैं एक साधारण सीएसवी फ़ाइल लिखने के लिए विंडोज कंप्यूटर पर पायथन 3.2 का उपयोग करने की कोशिश कर रहा हूं, हालांकि मुझे कोई भाग्य नहीं है। csv module documentation for Python 3.2 से:पायथन 3: सीएसवी फाइलें लिखना

>>> import csv 
>>> spamWriter = csv.writer(open('eggs.csv', 'w'), delimiter=' ', 
...       quotechar='|', quoting=csv.QUOTE_MINIMAL) 
>>> spamWriter.writerow(['Spam'] * 5 + ['Baked Beans']) 
>>> spamWriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam']) 

बाइट क्रम \r\r\n द्वारा समाप्त प्रत्येक पंक्ति के साथ एक फ़ाइल पैदा करता है, तो यह लग रहा है प्रत्येक पंक्ति की तरह एक अतिरिक्त खाली पंक्ति है जब आप के साथ इसे खोलने, उदाहरण के लिए, एमएस एक्सेल है। यह एक "सीएसवी फ़ाइल" नहीं है।

ध्यान दें, यदि मैं कोशिश अजगर 3.2 (जहां बड़ा अंतर 'w' बनाम फ़ाइल मोड के लिए 'wb' है) जब मैं spamWriter.writerow कोशिश, मैं कोई त्रुटि मिलती है में same example for Python 2.7:

Traceback (most recent call last): File "", line 1, in TypeError: 'str' does not support the buffer interface

मैं कैसे लिख सकता हूँ एक विंडोज कंप्यूटर पर पाइथन 3.2 से सरल सीएसवी फ़ाइल?

+3

समस्या लगती है विंडोज विशिष्ट होना । लिनक्स पर ठीक काम करता है। – phihag

उत्तर

53

प्रलेखन का कहना है कि यदि आप एक footnote में open('eggs.csv', 'w', newline='')

http://docs.python.org/py3k/library/csv.html#id2

+2

आह, ऐसा लगता है कि मैंने प्रलेखन के थोड़ा पुराने संस्करण (-0.1) को उठाया (तुलना [3.2] (http: // docs.python.org/release/3.2/library/csv.html#csv.writer) बनाम [3.2.1] (http://docs.python.org/release/3.2.1/library/csv.html#csv .writer)) –

1

सीधे अपने सवाल का जवाब करने के लिए, आप lineterminator स्वरूपण पैरामीटर का उपयोग करने में सक्षम होना चाहिए:

... इसलिए इस लाइन को संशोधित (untested) काम करना चाहिए:

>>> spamWriter = csv.writer(open('eggs.csv', 'w'), delimiter=' ', 
...       quotechar='|', quoting=csv.QUOTE_MINIMAL, lineterminator='\n') 

क्यों उदाहरण के लिए के रूप में बॉक्स के बाहर काम नहीं करता है, ऐसा लगता है कि मुझे एक बग की तरह दिखता है।

+0

यह एकमात्र उत्तर है जो मेरे लिए काम करता है।और पांच साल बाद उदाहरण अभी भी बॉक्स के बाहर काम नहीं करते हैं :-( – Rup

5

का उपयोग करना चाहिए documented के रूप में:

csv.writer(csvfile, dialect='excel', **fmtparams)

If csvfile is a file object, it should be opened with newline=''.

If newline='' is not specified, newlines embedded inside quoted fields will not be interpreted correctly, and on platforms that use \r\n linendings on write an extra \r will be added. It should always be safe to specify newline='', since the csv module does its own (universal) newline handling.

निम्नलिखित संस्करण लिनक्स और विंडोज पर काम करता है:

spamWriter = csv.writer(open('eggs.csv', 'wb'), delimiter=' ', quotechar='|', 
         quoting=csv.QUOTE_MINIMAL, newline='') 
spamWriter.writerow(['Spam'] * 5 + ['Baked Beans']) 
spamWriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam']) 
+4

मुझे एक टाइप टाइपर मिलता है: 'newline' इस फ़ंक्शन के लिए एक अवैध कीवर्ड तर्क है, जब इसे py34 में करने का प्रयास किया जाता है। –

17

यह मर्जी दोनों अजगर 2 और अजगर 3 पर काम:

if sys.version_info >= (3,0,0): 
    f = open(filename, 'w', newline='') 
else: 
    f = open(filename, 'wb') 
1

spamWriter के इस कार्यान्वयन मेरे लिए काम कर रहा है ...

with open('assignmentresults.csv', 'wb') as csvfile: 
    spamwriter = csv.writer(csvfile, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL) 
    spamwriter.writerow(["Hullo", "World"]) 
+1

यह पायथन 3 का उत्तर नहीं है, जो "टाइप एरर: 'str' करता है बफर इंटरफेस का समर्थन नहीं करते " –

1

मैं इस त्रुटि का समाधान [पायथन 2.x के लिए] के रूप में मैं आगे बढ़ रहा था Python2.6.6 से मेरे कोड python3.4.3 को

Python2.6.6 में से एक

with open(os.path.join(path, name) , 'r') as mycsvfile: 
writer = csv.writer(open(newFilename, 'w')) 
0 (मैं अपने csvfile पर कुछ कहानियो को ऐसा करने के लिए कोशिश कर रहा हूँ)

ऊपर python2.6.6 साथ अच्छी तरह से काम लेकिन python3.4.3 पर काम नहीं किया, जैसा कि मैंने कुछ utf-8 यूनिकोड त्रुटियों हो रही थी जब मैं python3 फ़ाइल को चलाने की कोशिश की, तो मैं नीचे में परिवर्तन Python3.4.4

import codecs 
with codecs.open(os.path.join(path, name) , 'r', encoding='ISO-8859-1') as mycsvfile: 
writer = csv.writer(open(newFilename, 'w')) 
बनाया

यह, मेरे कोड अब ठीक काम करता है, मूल रूप से यूनिकोड में से कुछ python3 पर विचार नहीं कर रहा है और हम, कोडेक आयात का उपयोग करने के लिए यह काम कर रहे बनाने की जरूरत है आशा है कि यह मदद करता है है कि ..