处理文件时忽略每行的第一个字符

问题描述 投票:0回答:1

我正在尝试读取文本文件,并将西里尔文中的所有字母都转换为拉丁文。但是在每一行,第一个字符都会被忽略。下面是代码。有人可以帮我发现一个错误。

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,
...

首字母保持西里尔字母的位置。

python loops readfile
1个回答
1
投票

您需要将.lower()添加到if语句中。它在字典中找不到大写字符。

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)
© www.soinside.com 2019 - 2024. All rights reserved.