2009-03-02 16 views
12

के बीच एक स्थान के साथ टेक्स्ट फ़ाइल खोलता है जब भी मैं python कमांड fread = open('input.csv', 'r') के साथ एक .csv फ़ाइल खोलने का प्रयास करता हूं, यह हमेशा प्रत्येक वर्ण के बीच रिक्त स्थान के साथ फ़ाइल खोलता है। मुझे लगता है कि यह टेक्स्ट फ़ाइल के साथ कुछ गलत है क्योंकि मैं एक ही कमांड के साथ अन्य टेक्स्ट फाइलें खोल सकता हूं और वे सही तरीके से लोड हो जाते हैं। क्या किसी को पता है कि पाठ फ़ाइल इस तरह पाइथन में क्यों लोड होगी?पायथन प्रत्येक चरित्र

धन्यवाद।

अद्यतन

ठीक है, मैं इसे Jarret हार्डी के पद

की मदद से मिला इस कोड है कि मैं फ़ाइल को रूपांतरित करने के लिए इस्तेमाल ASCII को

fread = open('input.csv', 'rb').read() 
mytext = fread.decode('utf-16') 
mytext = mytext.encode('ascii', 'ignore') 
fwrite = open('input-ascii.csv', 'wb') 
fwrite.write(mytext) 

धन्यवाद है!

उत्तर

14

रिकर्सिव द्वारा पोस्ट शायद सही है ... फ़ाइल की सामग्री बहु-बाइट वर्णमाला के साथ एन्कोड की संभावना है। यदि यह वास्तव में है, तो आप संभवतः पाइथन के बाहर फ़ाइल को बिना पाइथन के बाहर परिवर्तित किए बिना फ़ाइल को पढ़ सकते हैं।

fread = open('input.csv', 'rb').read() 
mytext = fread.decode('utf-16') 

'बी' झंडा फ़ाइल सुनिश्चित करता है बाइनरी डेटा के रूप में पढ़ा जाता है:

की तरह कुछ की कोशिश करो। आपको मूल एन्कोडिंग को जानने (या अनुमान लगाने) की आवश्यकता होगी ... इस उदाहरण में, मैंने utf-16 का उपयोग किया है, लेकिन वाईएमएमवी। यह फ़ाइल को यूनिकोड में परिवर्तित कर देगा। यदि आपके पास वास्तव में मल्टी-बाइट वर्णों वाली एक फ़ाइल है, तो मैं इसे एसीआई में परिवर्तित करने की अनुशंसा नहीं करता क्योंकि आप प्रक्रिया में बहुत से पात्रों को खो देते हैं।

संपादित करें: फ़ाइल अपलोड करने के लिए धन्यवाद। फ़ाइल के सामने दो बाइट हैं जो इंगित करता है कि वास्तव में, एक विस्तृत वर्णमाला का उपयोग करता है। यदि आप उत्सुक हैं, तो फ़ाइल को एक हेक्स संपादक में खोलें क्योंकि कुछ ने सुझाव दिया है ... आप 'आईडी | |' जैसे टेक्स्ट संस्करण में कुछ देखेंगे। (आदि)। डॉट प्रत्येक चार के लिए अतिरिक्त बाइट है।

उपरोक्त कोड स्निपेट मेरी फ़ाइल पर उस फ़ाइल के साथ काम करता प्रतीत होता है।

0

यह कभी मेरे लिए नहीं था, लेकिन ट्रूपो ने कहा, यह फ़ाइल के साथ कुछ गलत होना चाहिए।

एक्सेल/ब्रॉइस कैल्क में फ़ाइल खोलने का प्रयास करें और फ़ाइल को सीएसवी के रूप में सहेजें।

यदि समस्या बनी रहती है, तो डेटा का सबसेट आज़माएं: फ़ाइल की मुट्ठी 10/अंतिम 10/इंटरमीडिएट 10 लाइनें।

1

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

+0

अच्छी तरह से इनपुट को पार्स नहीं जाएगा, यह एक पाठ फ़ाइल है और ठीक से साथ स्वरूपित | अल्पविरामों के बजाय पात्र, लेकिन समस्या वास्तव में सीएसवी पाठक में पढ़ने की कोशिश करने से पहले है। – wlindner

0

आप http://drop.io/ जैसी साइट पर प्रश्न में फ़ाइल अपलोड कर सकते हैं और हमें एक लिंक दे सकते हैं।

+0

http://drop.io/nbcacm5 – wlindner

7

फ़ाइल कुछ यूनिकोड एन्कोडिंग में एन्कोड किया गया है, लेकिन आप इसे ascii के रूप में पढ़ रहे हैं। फ़ाइल को पायथन में उपयोग करने से पहले एएससीआई में कनवर्ट करने का प्रयास करें।

+0

हाँ, मुझे लगता है कि यह यूनिकोड में है, क्या पाइथन में फ़ाइल खोलने का एक तरीका है, फ़ाइल को ascii में कनवर्ट करें, फ़ाइल लिखें, फिर इसे एक सीएसवी के रूप में लोड करने के लिए फिर से खोलें? Scintilla का उल्लेख करने के लिए – wlindner

0

ठीक है, मैं इसे Jarret हार्डी के पद की मदद से मिला

इस कोड है कि मैं फ़ाइल को रूपांतरित करने के लिए इस्तेमाल ASCII को

fread = open('input.csv', 'rb').read() 
mytext = fread.decode('utf-16') 
mytext = mytext.encode('ascii', 'ignore') 
fwrite = open('input-ascii.csv', 'wb') 
fwrite.write(mytext) 

धन्यवाद है!

0

फ़ाइल को बाइनरी मोड, 'आरबी' में खोलें। इसे एक हेक्स संपादक में देखें और शून्य पैडिंग '00' की जांच करें। फ़ाइल में मौजूद वर्णों की जांच के लिए फ़ाइल को स्किंटाला टेक्स्ट एडिटर जैसे खोलें।

+0

+1 :) –

1

एन्कोडेड फ़ाइल पढ़ने के लिए, आप बस opencodecs.open के साथ प्रतिस्थापित कर सकते हैं।

fread = codecs.open('input.csv', 'r', 'utf-16') 
0

यहाँ त्वरित और आसान तरीका है, खास तौर पर अगर अजगर सही ढंग से

sed 's/ \(.\)/\1/g' 
संबंधित मुद्दे