辞書を使用して、Unicode txt ファイルのキリル語を置き換えようとしました。単語の置換が難しいとは思っていませんでしたが、キリル文字を扱う場合、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)
作成される出力ファイルは変更されず、キリル文字は 1 つ、2 つなどに置き換えられません。これを修正する方法を知っている人はいますか?