Как заменить кириллические слова в юникодном txt файле из словаря

Я попытался использовать словарь для замены кириллических слов из текстового файла Unicode. Я не ожидал, что замена слов будет сложной, но при работе с кириллическим текстом возникает проблема с добавлением 16- или 8-байтового элемента. Я пробовал много разных кодов, но ни один из них не работает. Я был бы очень признателен за любую помощь!

Мой словарь находится в файле с именем 'chars' и содержит такие вещи, как:

cyrillic_ordinals = {
u'первый' : u'one',
u'второй' : u'two',
u'третий' : u'three',
u'четвёртый' : u'four'  }

Я не уверен, почему мой код не работает. Для контекста начало кода — это определение замены (с ошибкой), а вторая половина кода предназначена только для указания входного и выходного файлов.

import sys
import codecs
import os
import chars

def replaceordinals(text, cyrillic_ordinals):
    for i, j in cyrillic_ordinals.iteritems():
        text = text.replace(i, j)
        return text

def readAndWrite(input_file, output_file):
    try:
        w_f = codecs.open(output_file, encoding='utf-8', mode='w+')
    except IOError:
        print("Can't create or edit output file. Do you have rights to create file here?")
        print("For unix systems try to use \"sudo python\" instead of \"python\"")

    try:
        i_f = codecs.open(input_file, encoding='utf-8')
        for line in i_f:
            w_f.write(replaceordinals(line, chars.cyrillic_ordinals))
    except IOError:
       print("Can't read input file. Check your path to input file")
    except:
        try:
            i_f = codecs.open(input_file, encoding='utf-16')
            for line in i_f:
                w_f.write(replaceordinals(line, chars.cyrillic_ordinals))
        except IOError:
            print("Can't read input file. Check your path to input file")


def main(argv):
    #If user didn't provide path to input and/or output file - show an error, otherwise - try to run processing
    if len(argv) != 3:
        print("Missing file arguments.\nFormat: python " + argv[0] + " /home/user/Desktop/input_file.txt /home/user/Desktop/output_file.txt")
    else:
        readAndWrite(argv[1], argv[2])


if __name__ == "__main__":
    main(sys.argv)

Выходной файл, который создается, не меняется и кириллический текст не заменяется на раз, два и т.д. Кто-нибудь знает, как это исправить?


person user2584342    schedule 16.10.2013    source источник
comment
Работает ли ваш код на английских символах? UTF-8 без бомбы?   -  person Alexufo    schedule 16.10.2013
comment
возможный дубликат Заменить специальные символы в python   -  person Paul Sweatte    schedule 20.01.2015