【问题标题】:Why unexpected ' ' at the end while printing read file in python 3?为什么在 python 3 中打印读取文件时出现意外的“”?
【发布时间】:2014-01-24 03:33:07
【问题描述】:

我正在读取一个简单的文本文件并将其打印为 python 中的列表,所以我运行一个这样的 while 循环:

while line != "":
        line = file_ob.readline().strip()
        genres.append(line)

一切正常,但最后,"" 也会被打印出来。

我的问题是为什么会这样?由于行等于"" 或者可以说已经到达文本文件的末尾,如果没有"",循环不应该中断并显示输出吗?我的逻辑可能有缺陷吗?我该如何解决这个问题?

【问题讨论】:

    标签: list file-io python-3.x


    【解决方案1】:

    循环不会自动在中间中断;它将运行到底部,然后返回顶部再次检查条件。因此,您读取空行,附加它,检查它是否为空,然后中断。如果要排除最后一行,一般是这样写的:

    while (line = file_ob.readline().strip()) != "":
        genres.append(line)
    

    (编辑:正如 OP 所指出的,这在 Python 中不是有效的语法,因为赋值不是表达式,与大多数其他语言不同。)

    或者这个:

    line = file_ob.readline().strip()
    while line != "":
        genres.append(line)
        line = file_ob.readline().strip()
    

    实际上,这些都不完全等同于您的代码,因为一开始您没有显示line 是如何定义的。这也可以:

    while True:
        line = file_ob.readline().strip()
        if line == "":
            break
        genres.append(line)
    

    【讨论】:

    • 你看,我必须先添加一行,说 line = 'anything' 才能使循环工作。如果我使用第二个选项,列表包含我不想要的“任何东西”。第一个选项似乎不起作用。
    • 一个更简单的解决方案是先读取一行并将其分配给 line 而不是“anything”。已经成功了,感谢您的帮助
    • 啊,确实,第一个选项不起作用,愚蠢的 Python(愚蠢的我认为它的行为就像我习惯的其他东西一样)。第二个选项将在没有line = "anything" 的情况下工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-05
    • 2016-03-27
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多