[python] पाइथन में सीएसवी एक अतिरिक्त कैरिज रिटर्न जोड़ रहा है


Answers

जबकि @ जॉन-माचिन एक अच्छा जवाब देता है, यह हमेशा सबसे अच्छा तरीका नहीं है। उदाहरण के लिए, यह पायथन 3 पर काम नहीं करता है जब तक कि आप अपने सभी इनपुट को CSV लेखक को एन्कोड नहीं करते। साथ ही, यदि स्क्रिप्ट धारा के रूप में sys.stdout का उपयोग करना चाहता है तो यह समस्या को हल नहीं करता है।

मैं लेखक बनाते समय 'लिनेटरमिनेटर' विशेषता को सेट करने का सुझाव देता हूं:

import csv
import sys

doc = csv.writer(sys.stdout, lineterminator='\n')
doc.writerow('abc')
doc.writerow(range(3))

वह उदाहरण पाइथन 2 और पायथन 3 पर काम करेगा और अवांछित न्यूलाइन वर्णों का उत्पादन नहीं करेगा। नोट, हालांकि, यह अवांछनीय न्यूलाइन (यूनिक्स ऑपरेटिंग सिस्टम पर एलएफ चरित्र को छोड़कर) उत्पन्न कर सकता है।

हालांकि, ज्यादातर मामलों में, मेरा मानना ​​है कि व्यवहार सभी सीएसवी को द्विआधारी प्रारूप के रूप में इलाज करने से बेहतर और अधिक प्राकृतिक है। मैं इस उत्तर को आपके विचार के लिए एक विकल्प के रूप में प्रदान करता हूं।

Question

पाइथन 2.7 में विंडोज एक्सपी समर्थक पर चल रहा है:

import csv
outfile = file('test.csv', 'w')
writer = csv.writer(outfile, delimiter=',', quoting=csv.QUOTE_MINIMAL)
writer.writerow(['hi','dude'])
writer.writerow(['hi2','dude2'])
outfile.close()

यह प्रत्येक पंक्ति पर एक अतिरिक्त \ r के साथ एक फ़ाइल, test.csv उत्पन्न करता है, जैसे:

test.csv

hi,dude\r\r\nhi2,dude2\r\r\n

अपेक्षित के बजाय:

hi,dude\r\nhi2,dude2\r\n

यह क्यों हो रहा है, या यह वास्तव में वांछित व्यवहार है?




आप csv लेखक कमांड में lineterminator = '\ n' पैरामीटर पेश कर सकते हैं।

import csv
delimiter='\t'
with open('tmp.csv', '+w', encoding='utf-8') as stream:
    writer = csv.writer(stream, delimiter=delimiter, quoting=csv.QUOTE_NONE, quotechar='',  lineterminator='\n')
    writer.writerow(['A1' , 'B1', 'C1'])
    writer.writerow(['A2' , 'B2', 'C2'])
    writer.writerow(['A3' , 'B3', 'C3'])



मुझे यकीन नहीं है कि यह क्यों हो रहा है, लेकिन "w" से "wb" तक आपके फ़ाइल मोड को बदलना इसे ठीक करता है। अधिक जानकारी के लिए " एम एम को कैसे निकालें " का मेरा जवाब देखें।




Links