【问题标题】:Reading file and comparing to dictionary读取文件并与字典进行比较
【发布时间】:2014-10-10 15:53:05
【问题描述】:

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

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格式而radio是adict?

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

文本文件:

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-loop 时,它不会添加那些新行。

【问题讨论】:

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


    【解决方案1】:

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

    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 代码,然后添加一个空行以将其与下一行分隔开。

    【讨论】:

    • 可能要指出print(radio.get(letter, 'Not a radio/nato alphabet')) 可用...
    • @PadraicCunningham - OP 想要在每行文本之间添加一个换行符。我还有一个错字——应该是for letter in line.lower().split()
    • 非常感谢,第一个问题现在感觉很傻,我不想告诉我多久没有得到它们是大写的......非常感谢第二个问题,没有你,很难找到解决方案!
    【解决方案2】:

    您将A 与a 进行比较,您需要使用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.")
    

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-10-14
        • 2021-04-21
        • 2020-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多