Первый символ в каждой строке игнорируется при обработке файла - PullRequest
0 голосов
/ 20 октября 2019

Я пытаюсь прочитать текстовый файл и преобразовать все буквы кириллицы в латиницу. Но в каждой строке первый символ игнорируется. Ниже приведен код. Может ли кто-нибудь помочь мне найти ошибку, пожалуйста.

alphabet = {'а':'a', 'б':'b', 'в':'v', 'г':'g', 'д':'d', 'е':'e', 
            'ё':'io', 'ж':'zh', 'з':'z', 'и':'i', 'й':'ii', 'к':'k', 
            'л':'l', 'м':'m', 'н':'n', 'о':'o', 'п':'p', 'р':'r', 
            'с':'s', 'т':'t', 'у':'u', 'ф':'f', 'х':'kh', 'ц':'tc', 
            'ч':'ch', 'ш':'sh', 'щ':'sh', 'ъ':'', 'ы':'y', 'ь':'', 
            'э':'e', 'ю':'u', 'я':'ya', ' ':' '}

path = "exec/onegin.txt"
f=open(path)
lines = list(f)

def changer(line):
    k = ''
    for i in line:
        if i in alphabet.keys():
            i=alphabet[i.lower()]
        k = k + i
    return k

for i in lines:
    a = changer(i)
    print(a)

В результате я получаю эти строки ...

...
Пoluzhivogo zabavlyat,
Еmu podushki popravlyat,
Пechalno podnosit lekarstvo,
...

Где первые буквы остаются кириллицей.

1 Ответ

1 голос
/ 20 октября 2019

Вам необходимо добавить .lower () в оператор if. Он не может найти символы в верхнем регистре в dict.

alphabet = {'а':'a', 'б':'b', 'в':'v', 'г':'g', 'д':'d', 'е':'e', 
            'ё':'io', 'ж':'zh', 'з':'z', 'и':'i', 'й':'ii', 'к':'k', 
            'л':'l', 'м':'m', 'н':'n', 'о':'o', 'п':'p', 'р':'r', 
            'с':'s', 'т':'t', 'у':'u', 'ф':'f', 'х':'kh', 'ц':'tc', 
            'ч':'ch', 'ш':'sh', 'щ':'sh', 'ъ':'', 'ы':'y', 'ь':'', 
            'э':'e', 'ю':'u', 'я':'ya', ' ':' '}

path = "exec/onegin.txt"
f=open(path)
lines = list(f)

def changer(line):
    k = ''
    for i in line:
        if i.lower() in alphabet.keys():   # <---
            i=alphabet[i.lower()]
        k = k + i
    return k

for i in lines:
    a = changer(i)
    print(a)
...