1

辞書を使用して、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 つなどに置き換えられません。これを修正する方法を知っている人はいますか?

4

0 に答える 0