2012-12-19 28 views
7

Online ingilizce kelimelerin çoğunun bir listesini buldum, ancak satır sonları unix tarzında (Unicode: UTF-8 olarak kodlanmış). Bu sitede buldum: http://dreamsteep.com/projects/the-english-open-word-list.htmlLF'yi CRLF'ye nasıl dönüştürebilirim?

Satır sonlarını CRLF'ye nasıl dönüştürebilirim? Onları kullanacağım program dosyadaki her satırdan geçiyor, bu yüzden kelimeler satır başına bir olmak zorunda.

Bu dosyanın bir kısmıdır: bitbackbitebackbiterbackbitersbackbitesbackbitingbackbittenbackboard

Olmalıdır:

bit 
backbite 
backbiter 
backbiters 
backbites 
backbiting 
backbitten 
backboard 

Nasıl bu tip dosyalarımı dönüştürebilirsiniz? Not: Toplamda 80.000 kelime veya toplamda 26 dosya (harf başına bir tane) (böylece program çok hızlı olmalıdır).

Nereden başlayacağımı bilmiyorum çünkü unicode ile çalışmadım. Şimdiden teşekkürler!

benim kodunda bununla, (önerilen) parametre olarak rU kullanma:

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> 

kimse bu konuda bana yardımcı olabilir:

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

bu hatayı alıyorum?

+0

Bu http://stackoverflow.com/questions/3891076/how-to-convert-windows-end-of-line-in-unix-end-of-line-cr-lf-to- sayfasını bulabilirsin Yararlı – dmi3y

+1

Programınızı, her iki satır sonu türünü işlemek mümkün kılmıyor musunuz? –

+0

@JamesMcLaughlin Zaten bir kelime listesi içeren bir dosyam var. Ayrıca, hiç bir zaman unicode kullanmamıştım (belirtildiği gibi), bu türden sonlarla nasıl başa çıkacağımı bilmiyorum. –

cevap

16

yerine dönüştürme, sadece Python en universal newline support kullanarak dosyayı açmak mümkün olmalıdır:

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

(Not U.)

+2

görünüyor Bu şimdi kullanımdan kaldırıldı: https://docs.python.org/3.6/library/functions.html#open – cinatic

9

Dizelerin değiştirme yöntemini kullanabilirsiniz.

txt.replace('\n', '\r\n') 

gibi DÜZENLEME: sizin durumunuzda
:

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

Aynı dosyadaki tüm satır sonlarını yeni bir çıktı dosyası oluşturmadan değiştirmek isterseniz, cevabıma şu adresten bakın: http://stackoverflow.com/a/43678795/3459910 – winklerrr

2

Siz d bunların üzerinden yineleyebilmek için satır sonlarını dosyalara dönüştürmeye gerek yoktur. NPE tarafından önerildiği gibi, python's universal newlines mode'u kullanın. Eğer işleniyor dosyaların UTF-8 ve str(line) aracılığıyla, bir dizeye bayt içeriğini deşifre çalıştığınızda, Python dosyadan okunan bayt dönüştürmek için cp1252 kodlamasını kullandığını olarak kodlanmış olduğundan

UnicodeDecodeError olur bir Python 3 dizesine (yani bir unicode kod noktası dizisi). Ancak, bu dosyalarda cp1252 kodlamasıyla kodlanamayan ve bir UnicodeDecodeError neden olan baytlar vardır.

str(line) - line.decode('utf-8') değiştirirseniz, artık UnicodeDecodeError değerini almanız gerekir. Daha fazla ayrıntı için Text Vs. Data Instead of Unicode Vs. 8-bit yazımına göz atın.

Son olarak, Joel Spolsky tarafından yararlı The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!) bulabilirsiniz.

İlgili konular