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




4 Answers

विंडोज़ पर, csv.reader या csv.writer को पास करने से पहले हमेशा अपनी फ़ाइलों को द्विआधारी मोड ("आरबी" या "wb") में खोलें।

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

यह पिछला उत्तर देखें।

यह उत्तर 2010 में पोस्ट किया गया था और Python3 में समस्या का समाधान नहीं करता है।

@ YiboYang के उत्तर में वर्णित Python3 में संभावित सुधारों में से एक, एक खाली स्ट्रिंग होने के लिए सेटलाइन newline पैरामीटर के साथ फ़ाइल खोल रहा है:

f = open(path_to_file, 'w', newline='')
writer = csv.writer(f)
...
...

पाइथन 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

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




पायथन 3 में (मैंने पायथन 2 में यह कोशिश नहीं की है), आप बस भी कर सकते हैं

with open('output.csv','w',newline='') as f:
    writer=csv.writer(f)
    writer.writerow(mystuff)
    ...

documentation अनुसार।

डॉक्टर के footnote में इस पर और अधिक:

यदि न्यूलाइन = '' निर्दिष्ट नहीं है, तो उद्धृत फ़ील्ड के अंदर एम्बेडेड न्यूलाइनों का सही ढंग से व्याख्या नहीं किया जाएगा, और प्लेटफॉर्म पर \ r \ n लिनेंडिंग्स को अतिरिक्त \ r लिखने के लिए उपयोग किया जाएगा। यह हमेशा नई लाइन = '' निर्दिष्ट करने के लिए सुरक्षित होना चाहिए, क्योंकि सीएसवी मॉड्यूल अपनी (सार्वभौमिक) न्यूलाइन हैंडलिंग करता है।




इस तरह के फ़ंक्शन को खोलने के लिए आपको विशेषता newline = "\ n" जोड़नी होगी:

with open('file.csv','w',newline="\n") as out:
    csv_out = csv.writer(out, delimiter =';')



ध्यान दें कि यदि आप डिक्टवाइटर का उपयोग करते हैं, तो आपके पास ओपन फ़ंक्शन से एक नई लाइन और लेखकव फ़ंक्शन से एक नई पंक्ति होगी। अतिरिक्त न्यूलाइन को हटाने के लिए आप खुले फ़ंक्शन के भीतर newline = '' का उपयोग कर सकते हैं।




Related

python csv newline