读取文件并与字典进行比较

时间:2014-08-17 16:46:56

标签: python string file python-3.x dictionary

我遇到了问题,并希望得到任何提示/建议。到目前为止,这是我的代码:

name = input("Enter text file name\n")
radio = {'a':'alfa', 'b':'bravo', 'c':'charlie', 'd':'delta','e':'echo', 'f':'foxtrot', 'g':'golf', 'h':'hotel','i':'india', 'j':'juliett', 'k':'kilo', 'l':'lima','m':'mike', 'n':'november', 'o':'oscar', 'p':'papa','q':'quebec', 'r':'romeo', 's':'sierra', 't':'tango','u':'uniform', 'v':'victor', 'w':'whiskey', 'x':'x-ray','y':'yankee', 'z':'zulu'}
def main():

    try:
        f = open(name, "r")
        for line in f.read().split():
            //print(line)
            if line in radio:
                print(radio[line])
            else:
                print("Not an radio/nato alphabet")

        f.close()
    except IOError:
        print("file", nimi, "does not exist.")
main()

目前我的if line in radio:无法找到单个字母。我想知道是因为" line"是str格式,广播是dict

澄清情况。这是文本文件和想要的输出。

textfile:

A O U
G 1 Y
C A !

想要输出:

alfa
oscar
uniform

golf
Not an radio/nato alphabet
yankee

charlie
alfa
Not an radio/nato alphabet

这是学校作业,而检验软件并不是最好的。想要的输出有那些额外的空格,但是当我使用split()命令进行for循环时,它不会添加这些新行。

3 个答案:

答案 0 :(得分:2)

看起来原因是因为文本文件中的字母全部为大写,但在dict中设置为全部小写。解决此问题的一种简单方法是首先将文件的内容转换为小写:

for letter in f.read().lower().split():
    if letter in radio:
        print(radio[letter])
    else:
        print("Not an radio/nato alphabet")

为了在每行文本之间添加换行符,您可以执行以下操作:

for line in f:
    for letter in line.lower().split():
        if letter in radio:
            print(radio[letter])
        else:
            print("Not an radio/nato alphabet")

    print('')

现在,您首先迭代每一行。对于每一行,您都试图将该字母转换为NATO代码,然后添加一个空行以将其与下一行分开。

答案 1 :(得分:2)

您正在将Aa进行比较,您需要使用lower将其设为小写。

if line.lower() in radio:
    print(radio[line.lower()])

您可以将dict.get与默认值一起用于不存在的密钥。

def main():
    try:
        f = open(nimi, "r")
        lines = [x.split() for x in f]
        for line in lines:
            for char in line:
                print(radio.get(char.lower(),"Not an radio/nato alphabet"))
            print('')
        f.close()
    except IOError:
        print("file", nimi, "does not exist.")

答案 2 :(得分:0)

有两个问题。其他问题提到了第一个问题:文件中的字符是大写字母,而字典中包含小写字符,因此请使用.lower()翻译您阅读的内容。

另一个问题是你提到的“额外空间”。输出包含组之间的换行符,这些换行符是原始文件中的行。您的代码使用f.read().split(),这会丢失原始文件中的换行符。

您可以使用for line in f:遍历文件的行,然后使用for letter in line.split():遍历一行中的字符。