2012-12-19 16 views
7

मुझे ऑनलाइन अंग्रेजी शब्दों के बहुमत की एक सूची मिली, लेकिन लाइन ब्रेक यूनिक्स-शैली (यूनिकोड में एन्कोडेड: यूटीएफ -8) के हैं। मैंने इसे इस वेबसाइट पर पाया: http://dreamsteep.com/projects/the-english-open-word-list.htmlमैं एलएफ को सीआरएलएफ में कैसे परिवर्तित करूं?

मैं लाइन ब्रेक को सीआरएलएफ में कैसे परिवर्तित करूं ताकि मैं उन पर फिर से चालू हो सकूं? प्रोग्राम में मैं उनका उपयोग करूँगा फ़ाइल में प्रत्येक पंक्ति के माध्यम से चला जाता है, इसलिए शब्दों को प्रति पंक्ति एक होना चाहिए।

इस फ़ाइल के एक हिस्से को है: bitbackbitebackbiterbackbitersbackbitesbackbitingbackbittenbackboard

यह होना चाहिए:

bit 
backbite 
backbiter 
backbiters 
backbites 
backbiting 
backbitten 
backboard 

मैं कैसे इस प्रकार करने के लिए अपने फ़ाइलों को कनवर्ट कर सकते हैं? नोट: यह 26 फाइलें (प्रति पत्र एक) 80,000 शब्दों या कुल में है (इसलिए कार्यक्रम बहुत तेज़ होना चाहिए)।

मुझे नहीं पता कि कहां से शुरू करना है क्योंकि मैंने कभी यूनिकोड के साथ काम नहीं किया है। अग्रिम में धन्यवाद!

मेरी कोड में पैरामीटर (के रूप में सुझाव) के रूप में rU का उपयोग करना, इस के साथ:

Traceback (most recent call last): 
    File "<pyshell#5>", line 1, in <module> 
    addWords('B Words') 
    File "D:\my_stuff\Google Drive\documents\SCHOOL\Programming\Python\Programming Class\hangman.py", line 138, in addWords 
    for line in my_file: 
    File "C:\Python3.3\lib\encodings\cp1252.py", line 23, in decode 
    return codecs.charmap_decode(input,self.errors,decoding_table)[0] 
UnicodeDecodeError: 'charmap' codec can't decode byte 0x8d in position 7488: character maps to <undefined> 

किसी को भी इस के साथ मेरी मदद कर सकते:

with open(my_file_name, 'rU') as my_file: 
    for line in my_file: 
     new_words.append(str(line)) 
my_file.close() 

मैं इस त्रुटि मिलती है?

+0

आप संभवतः यह http://stackoverflow.com/questions/3891076/how-to-convert-windows-end-of-line-in-unix-end-of-line-cr-lf-to- lf सहायक – dmi3y

+1

क्या आप अपना प्रोग्राम दोनों प्रकार की लाइन समाप्त करने में सक्षम नहीं हो सकते हैं? –

+0

@JamesMcLaughlin मेरे पास पहले से ही शब्दों की एक सूची है। इसके अलावा, मैंने कभी भी यूनिकोड (जैसा कि बताया गया है) का उपयोग नहीं किया है, इसलिए मुझे नहीं पता कि उन प्रकार के अंत को कैसे संभालना है। –

उत्तर

16

परिवर्तित करने की बजाय, आप बस का उपयोग कर पायथन के universal newline support फ़ाइल खोलने के लिए सक्षम होना चाहिए:

f = open('words.txt', 'rU') 

(नोट U।)

+2

ऐसा लगता है यह अब बहिष्कृत है: https://docs.python.org/3.6/library/functions.html#open – cinatic

9

आप तारों की प्रतिस्थापन विधि का उपयोग कर सकते हैं।

तरह
txt.replace('\n', '\r\n') 

संपादित करें:
आपके मामले में:

with open('input.txt') as inp, open('output.txt', 'w') as out: 
    txt = inp.read() 
    txt = txt.replace('\n', '\r\n') 
    out.write(txt) 
+0

का उपयोग करें यदि आप एक नई फ़ाइल फ़ाइल बनाने के बिना एक ही फ़ाइल में सभी लाइन समाप्ति को बदलना चाहते हैं, तो मेरा उत्तर यहां देखें: http://stackoverflow.com/a/43678795/3459910 – winklerrr

2

आप डी उन पर पुनरावृत्त करने में सक्षम होने के लिए फ़ाइलों में लाइन अंतराल को बदलने की आवश्यकता नहीं है। जैसा कि एनपीई द्वारा सुझाया गया है, बस python's universal newlines mode का उपयोग करें।

UnicodeDecodeError इसलिए होता है क्योंकि फ़ाइलें आप कार्रवाई कर रहे हैं UTF-8 और जब आप एक स्ट्रिंग के लिए बाइट्स से सामग्री को डिकोड करने के str(line) के माध्यम से प्रयास करते हैं, अजगर बाइट्स फ़ाइल से पढ़ने कन्वर्ट करने के लिए cp1252 एन्कोडिंग का उपयोग कर रहा है के रूप में इनकोड एक पायथन 3 स्ट्रिंग में (यानी यूनिकोड कोड बिंदुओं का अनुक्रम)। हालांकि, उन फ़ाइलों में बाइट्स हैं जिन्हें cp1252 एन्कोडिंग के साथ डीकोड नहीं किया जा सकता है और यह यूनिकोडडेकोड एरर का कारण बनता है।

यदि आप str(line) से line.decode('utf-8') बदलते हैं तो आपको अब यूनिकोडडेकोड एरर नहीं मिलना चाहिए। कुछ और विवरणों के लिए Text Vs. Data Instead of Unicode Vs. 8-bit लेखन देखें।

अंत में, आपको जोएल स्पॉस्की द्वारा उपयोगी The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!) भी मिल सकता है।