2012-03-23 7 views
19

मुझे एहसास है कि सीएसवी पाइथन में लाइब्रेरी हमेशा डॉस एंड-ऑफ-लाइन वर्ण उत्पन्न करती है। भले ही मैं 'wb' मोड का उपयोग करता हूं, भले ही मैं लिनक्स का उपयोग करता हूं।क्या पाइथन सीएसवी लेखक हमेशा डॉस एंड-ऑफ-लाइन वर्णों का उपयोग करता है?

import csv 

f = open('output.txt', 'wb'); 
writer = csv.writer(f) 
writer.writerow([2,3,4]); 
f.close() 

उपरोक्त कोड हमेशा लाइन विभाजक के अंत के रूप में '\r\n' का उपयोग करता है। मैं इसे केवल '\n' का उपयोग कैसे कर सकता हूं?

+3

सीएसवी एमआईएम स्पेक सीआरएलएफ को लाइन डिलीमीटर के रूप में अनिवार्य करता है: https://tools.ietf.org/html/rfc4180 –

+0

मुझे विश्वास है कि सीएसवी * पाठक * हमेशा करता है और बदला नहीं जा सकता है, लेकिन आप केवल पूछ रहे हैं * लेखक * के बारे में, जिसका डिफ़ॉल्ट बदला जा सकता है। – smci

उत्तर

42

आप give your writer उदाहरण निर्माता में एक कस्टम lineterminator तर्क कर सकते हैं:

writer = csv.writer(f, lineterminator="\n") 
+0

lineterminator दो अक्षर के संयोजन के रूप में दिया जा सकता है? – user1479571

+0

@ user1479571 क्या आपने कोशिश की है? –

19

Niklas answered के रूप में, lineterminator argument आप अपनी लाइन अंत चुनने देता है। इसे \n पर हार्ड कोडिंग करने के बजाय, अपने प्लेटफ़ॉर्म के line separator: os.linesep का उपयोग करके इसे प्लेटफ़ॉर्म स्वतंत्र बनाएं।

import csv 
import os 

f = open('output.csv', 'wb') 
writer = csv.writer(f, lineterminator=os.linesep) 
writer.writerow([2,3,4]) 
f.close() 

अन्य लोगों को जो इस पोस्ट को ढूंढते हैं, 'wb' को याद न करें। यदि आप इसे जीएनयू/लिनक्स जैसे कुछ प्लेटफ़ॉर्म पर याद कर रहे हैं, तो आपको कोई समस्या नहीं दिखाई देगी, लेकिन फ़ाइल को binary mode में प्लेटफ़ॉर्म पर खोलना महत्वपूर्ण है, जहां यह विंडोज़ की तरह मायने रखता है। अन्यथा, सीएसवी फ़ाइल \r\r\n जैसे लाइन एंडिंग के साथ समाप्त हो सकती है। यदि आप 'wb' और os.linesep का उपयोग करते हैं, तो आपकी लाइन समाप्ति सभी प्लेटफ़ॉर्म पर सही होनी चाहिए।

+0

इसलिए यदि आप लेखक "* प्लेटफ़ॉर्म स्वतंत्र *" बनाते हैं, तो भी आपकी स्क्रिप्ट अभी भी प्लेटफॉर्म पर निर्भर है क्योंकि आपको इसे बाइनरी में खोलने की आवश्यकता है, लेकिन केवल जहां आवश्यक हो? यदि मैं लिनक्स पर 'wb'' का प्रयास करता हूं तो मुझे 'writer.writeheader()' –

+1

के लिए एक त्रुटि मिलती है। मैंने इसे 'लेखक' और 'डिक्टवाइटर' दोनों का उपयोग 'wb', @CiprianTomoiaga' के साथ उबंटू 16.04 पर किया है और यह ठीक काम करता है मुझे। मेरा सुझाव है कि आप कोड नमूना और त्रुटि संदेश के साथ एक नया प्रश्न पोस्ट करें, फिर अपने प्रश्न के लिंक के साथ यहां एक टिप्पणी जोड़ें। –

+1

@CiprianTomoiaga यह पायथन 3 के साथ काम नहीं करता है। सीएसवी मॉड्यूल मानता है कि यह सामान्य तार लिख सकता है और यदि आप 'wb''' के साथ फ़ाइल खोलते हैं तो यह मामला नहीं है (आपको 'टाइप' त्रुटि मिलेगी) । इस प्रकार, आपको इस तरह की फ़ाइल खोलनी होगी: जब आप पाइथन 3 का उपयोग करते हैं तो 'f = open (' output.csv ',' w ', newline =' ')' 'देखें। [पायथन 3 सीएसवी दस्तावेज] (https: //docs.python.org/3.5/library/csv.html#csv.writer)। – maxschlepzig

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