[python] पाइथन के साथ लिखी गई सीएसवी फ़ाइल में प्रत्येक पंक्ति के बीच खाली रेखाएं हैं



Answers

बाइनरी मोड "wb" में फ़ाइल खोलना पायथन 3+ में काम नहीं करेगा। या इसके बजाय, आपको इसे लिखने से पहले अपने डेटा को बाइनरी में बदलना होगा। यह सिर्फ एक परेशानी है।

इसके बजाए, आपको इसे टेक्स्ट मोड में रखना चाहिए, लेकिन नई लाइन को खाली के रूप में ओवरराइड करना चाहिए। इस तरह:

with open('/pythonwork/thefile_subset11.csv', 'w', newline='') as outfile:
Question
import csv

with open('thefile.csv', 'rb') as f:
  data = list(csv.reader(f))
  import collections
  counter = collections.defaultdict(int)

  for row in data:
        counter[row[10]] += 1


with open('/pythonwork/thefile_subset11.csv', 'w') as outfile:
    writer = csv.writer(outfile)
    for row in data:
        if counter[row[10]] >= 504:
           writer.writerow(row)

यह कोड thefile.csv पढ़ता है, परिवर्तन करता है, और thefile_subset1 को परिणाम लिखता है।

हालांकि, जब मैं माइक्रोसॉफ्ट एक्सेल में परिणामी सीएसवी खोलता हूं, तो प्रत्येक रिकॉर्ड के बाद एक अतिरिक्त खाली रेखा होती है!

क्या यह अतिरिक्त खाली लाइन नहीं डालने का कोई तरीका है?




नोट: ऐसा लगता है कि विंडोज सिस्टम पर अतिरिक्त लाइन को कैसे जोड़ा जा रहा है, इस वजह से यह पसंदीदा समाधान नहीं है। जैसा कि पाइथन दस्तावेज में कहा गया है:

यदि csvfile एक फ़ाइल ऑब्जेक्ट है, तो इसे प्लेटफ़ॉर्म पर 'बी' ध्वज के साथ खोला जाना चाहिए जहां इससे कोई फर्क पड़ता है।

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

पायथन डॉक्स से :

विंडोज़ पर, मोड में जोड़ा गया 'बी' बाइनरी मोड में फ़ाइल खोलता है, इसलिए 'आरबी', 'डब्ल्यूबी' और 'आर + बी' जैसे मोड भी हैं। विंडोज़ पर पायथन टेक्स्ट और बाइनरी फाइलों के बीच एक अंतर बनाता है; जब डेटा पढ़ा या लिखा जाता है तो पाठ फ़ाइलों में अंत-पंक्ति वर्ण स्वचालित रूप से थोड़ा बदल जाते हैं। फ़ाइल डेटा में यह दृश्य-दृश्य दृश्य ASCII टेक्स्ट फ़ाइलों के लिए ठीक है, लेकिन यह जेपीईजी या EXE फ़ाइलों में बाइनरी डेटा दूषित कर देगा। ऐसी फाइलें पढ़ने और लिखते समय बाइनरी मोड का उपयोग करने के लिए बहुत सावधान रहें। यूनिक्स पर, यह मोड में 'बी' जोड़ने में कोई दिक्कत नहीं होती है, इसलिए आप इसे सभी बाइनरी फ़ाइलों के लिए स्वतंत्र रूप से मंच का उपयोग कर सकते हैं।

मूल :

Csv.writer के लिए वैकल्पिक paramaters के हिस्से के रूप में यदि आपको अतिरिक्त रिक्त रेखाएं मिल रही हैं तो आपको lineterminator ( here जानकारी) को बदलना पड़ सकता है। पाइथन पेज सीएसवी दस्तावेज़ों से अनुकूलित उदाहरण नीचे दिया गया है इसे '\ n' से जो कुछ भी होना चाहिए उसे बदलें। चूंकि यह समस्या पर अंधेरे में सिर्फ एक स्टैब है, यह काम कर सकता है या नहीं भी हो सकता है, लेकिन यह मेरा सबसे अच्छा अनुमान है।

>>> import csv
>>> spamWriter = csv.writer(open('eggs.csv', 'w'), lineterminator='\n')
>>> spamWriter.writerow(['Spam'] * 5 + ['Baked Beans'])
>>> spamWriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])



Related



Tags

python python   csv