2013-10-25 3 views
39

पर सहेजने में मुझे फ़ाइल से पढ़ने में समस्याएं आ रही हैं, इसकी स्ट्रिंग को संसाधित करना और यूटीएफ -8 फ़ाइल में सहेजना है।एक फ़ाइल से पाइथन पढ़ने और utf-8

try: 
    filehandle = open(filename,"r") 
except: 
    print("Could not open file " + filename) 
    quit() 

text = filehandle.read() 
filehandle.close() 

मैं तो चर पाठ पर कुछ प्रसंस्करण कार्य करें:

यहाँ कोड है।

और फिर

try: 
    writer = open(output,"w") 
except: 
    print("Could not open file " + output) 
    quit() 

#data = text.decode("iso 8859-15")  
#writer.write(data.encode("UTF-8")) 
writer.write(text) 
writer.close() 

यह आउटपुट फ़ाइल पूरी तरह से है, लेकिन यह अपने संपादक के अनुसार आईएसओ 8859-15 वृद्धि हो। चूंकि एक ही संपादक इनपुट फ़ाइल (चर फ़ाइल नाम में) को यूटीएफ -8 के रूप में पहचानता है, मुझे नहीं पता कि यह क्यों हुआ। जहां तक ​​मेरे शोध ने दिखाया है कि टिप्पणी की गई लाइनों को समस्या का समाधान करना चाहिए। हालांकि जब मैं उन पंक्तियों का उपयोग करता हूं जिसके परिणामस्वरूप फ़ाइल विशेष चरित्र में मुख्य रूप से गड़बड़ी होती है, तो पाठ के रूप में tilde के साथ शब्द स्पेनिश में होते हैं। मैं वास्तव में किसी भी मदद की सराहना करता हूं क्योंकि मैं स्टंप हो गया हूं ....

+2

यह कौन सा संपादक है? कौन सा पायथन संस्करण? यहां से यह कोड पूरी तरह से मान्य प्रतीत होता है और उम्मीद के अनुसार काम करना चाहिए ... – filmor

+0

केट संपादक है। पायथन - संस्करण का उत्पादन पायथन 2.7.5+ – aarelovich

+0

है मैंने 2.6.8, 2.7.5+ और 3.3.2+ के साथ अपने कोड का परीक्षण किया है सब कुछ ठीक काम करता है। क्या आप कुछ उदाहरण इनपुट प्रदान कर सकते हैं? – zero323

उत्तर

108

प्रक्रिया पाठ: में लिखने के लिए UTF-8 यह कोशिश मॉड्यूल अब कोडेक के बजाय की सिफारिश की और अजगर 3 के open वाक्य रचना के साथ संगत है है:

import io 
with io.open(filename,'r',encoding='utf8') as f: 
    text = f.read() 
# process Unicode text 
with io.open(filename,'w',encoding='utf8') as f: 
    f.write(text) 
+3

मैंने वही किया जो आपने मुझे बताया था। अन्य सुझाव – aarelovich

+1

के साथ ही त्रुटि मुझे यह काम करने के लिए मिला है।समस्या मूल फ़ाइल थी Io-8859-15 – aarelovich

+0

@Aarelovich आपको 'त्रुटियों = अनदेखा' या 'त्रुटियों = प्रतिस्थापन' को 'open() 'में पास करने की आवश्यकता हो सकती है ... यदि आप फ़ाइल के एन्कोडिंग को नहीं जानते हैं। :) – g33kz0r

4

आप इसे खोलकर ऐसा नहीं कर सकते। कोडेक्स का प्रयोग करें।

जब आप खुले अंतर्निर्मित फ़ंक्शन का उपयोग करके अजगर में फ़ाइल खोल रहे हैं तो आप हमेशा ascii में फ़ाइल को पढ़/लिखेंगे।

import codecs 
with codecs.open(filename,'r',encoding='utf8') as f: 
    text = f.read() 
# process Unicode text 
with codecs.open(filename,'w',encoding='utf8') as f: 
    f.write(text) 

संपादित करें::io अपने कार्यक्रम codecs मॉड्यूल का उपयोग करने का आई/ओ सीमा पर करने के लिए और यूनिकोड से

import codecs 
file = codecs.open('data.txt','w','utf-8') 
+1

ने कोशिश की और मुझे एक त्रुटि मिली: यूनिकोड डीकोड त्रुटि: 'utf8' कोडेक स्थिति 57 में बाइट 0xe9 को डीकोड नहीं कर सकता: अवैध निरंतर बाइट – aarelovich

+0

क्या आप utf-8 एन्कोड से बचत कर रहे हैं? देखो, अगर आप एसीआईआई की दूसरी फाइल से पढ़ रहे हैं, तो आपको इसे पहले डीकोड करना होगा। –

+0

कोड जैसा आप इसे देखते हैं। मैंने जो किया वह लाइन लेखक = ओपन (आउटपुट, 'डब्ल्यू') को लेखक = codecs.open (आउटपुट, 'डब्ल्यू', 'यूटीएफ -8') के साथ बदल दिया गया है और मुझे यह त्रुटि मिली है कि – aarelovich

2

Y कहां नीचे दिए गए कोड से इसे प्राप्त कर सकते हैं:

file=open(completefilepath,'r',encoding='utf8',errors="ignore") 
file.read() 
संबंधित मुद्दे