Изменение строки utf-8 на cp1251 (Python) - PullRequest
0 голосов
/ 06 августа 2020

Я пытаюсь преобразовать файл Excel с символами sh poli, такими как «ęśążćółń», в обычные буквы «esazcoln». Сначала мне удалось преобразовать файл xlsx в txt, затем:

f = open("PATH_TO_TXT_FILE")
r = f.read()
r.upper()
new_word = ""
for char in r:
    if char == "Ą":
        new_word += "A"
    elif char == "Ć":
        new_word += "C"
    elif char == "Ę":
        new_word += "E"
    elif char == "Ł":
        new_word += "L"
    elif char == "Ó":
        new_word += "O"
    elif char == "Ż"  "Ź":
        new_word += "Z"
    elif char == "Ź":
        new_word += "Z"
    elif char == "Ś":
        new_word += "S"
    else: 
        new_word += char

encoded_bytes = r.encode('utf-8', "replace")
decoded = encoded_bytes.decode(
    "cp1252", "replace")
print(decoded)

в файле написано: asdżółć

Вывод: asdÃ… ¼Ã³Å â € šÃ „â € ¡

Я бы хотел получить: asdzol c

Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 06 августа 2020

Я не могу найти страницу переполнения стека, с которой я получил шаблон / подшаблон, но это общая идея:

#!/usr/bin/env python3
# coding: UTF-8

import re


mapping = {
    'Ą': 'A',
    'Ć': 'C',
    'Ę': 'E',
    'Ł': 'L',
    'Ó': 'O',
    'Ż': 'Z',
    'Ź': 'Z',
    'Ś': 'S',

    'ą': 'a',
    'ć': 'c',
    'ę': 'e',
    'ł': 'l',
    'ó': 'o',
    'ż': 'z',
    'ź': 'z',
    'ś': 's',
}


pattern = re.compile("|".join(mapping.keys()))


def replace_by_mapping(text):
    return pattern.sub(lambda m: mapping[re.escape(m.group(0))], text)


if __name__ == '__main__':
    with open('polish_test.txt', 'r') as f:

        contents = f.read()
        contents = replace_by_mapping(contents)

        print(contents)
...