Удалите специальные символы, числа в текстовом файле ARABI C с python - PullRequest
1 голос
/ 30 мая 2020

Я хочу сохранить только арабские c символы, без цифр, я получил эту инструкцию регулярного выражения из github.

    generalPath="C:/Users/Desktop/Code/dataset/"
    outputPath= "C:/Users/Desktop/Code/output/"
    files = os.listdir(generalPath)

    for onefile in files:
    # relative or absolute file path, e.g.:
        localPath=generalPath+onefile
        localOutputPath=outputPath+onefile
        print(localPath)
        print(localOutputPath)
        with open(localPath, 'rb') as infile, open(localOutputPath, 'w') as outfile:
            data = infile.read().decode('utf-8')
            new_data = t = re.sub(r'[^0-9\u0600-\u06ff\u0750-\u077f\ufb50-\ufbc1\ufbd3-\ufd3f\ufd50-\ufd8f\ufd50-\ufd8f\ufe70-\ufefc\uFDF0-\uFDFD]+', ' ', data)
            outfile.write(new_data)

В этом коде я получил эту ошибку: Traceback (последний вызов последним): файл «. \ CleanText.py», строка 23, в файле outfile.write (new_data) «C: \ ProgramData \ Anaconda3 \ lib \ encodings \ cp1252.py ", строка 19, в коде возврата codecs.charmap_encode (input, self.errors, encoding_table) [0] UnicodeEncodeError: код 'charmap' c не может кодировать символы в позиция 0-2: символы сопоставляются с

мой арабский c текст диакритизирован, и я хочу сохранить его таким enter image description here

1 Ответ

1 голос
/ 30 мая 2020

Похоже, ваша программа пытается прочитать ваш текстовый файл в кодировке CP1252 вместо UTF-8. Укажите юникод при открытии, как показано ниже. Кроме того, поскольку это текстовый файл, который вы можете читать, используя 'r' вместо 'rb'.

with open(localPath, 'r', encoding='utf8') as infile

Что касается вашего регулярного выражения, если вы просто хотите удалить числа, вы можете использовать

data = re.sub(r'[0-9]+', '', data)

Вам не нужно указывать весь алфавит араби c как символы, которые нужно сохранить. Но похоже, что у вас есть строки типа «(1/6)». Чтобы избавиться от скобок и косых черт, используйте:

data = re.sub(r'[0-9\(\)/]+', '', data)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...