Я попытался использовать словарь для замены кириллических слов из текстового файла 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)
Выходной файл, который создается, не меняется и кириллический текст не заменяется на раз, два и т.д. Кто-нибудь знает, как это исправить?