【问题标题】:Distinguishing between blank lines and end of file in Python [duplicate]在Python中区分空行和文件结尾[重复]
【发布时间】:2014-11-19 20:30:13
【问题描述】:

我经常遇到的情况如下:

readFile = open("myFile.txt", "r")
while True:
    readLine = readFile.readline()
    if readLine == "":
        #Assume end of file
        break
    #Otherwise, do something with the line
    #...

问题是我正在阅读的文件包含空行。根据我读过的文档,file.readline() 将返回"\n" 以在文件中找到一个空行,但这不会发生在我身上。如果我不将那个空行条件放在 while 循环中,它会无限继续,因为在文件末尾或之后执行的 readline() 返回一个空白字符串。

谁能帮我创建一个条件,允许程序读取空行,但在到达文件末尾时停止?

【问题讨论】:

    标签: python file while-loop eof blank-line


    【解决方案1】:

    只需使用 for 循环:

    for readLine in open("myFile.txt"):
        print(readLine); # Displayes your line contents - should also display "\n"
        # Do something more
    

    在文件末尾自动停止。

    如果您有时需要额外的一行,这样的方法可能会起作用:

    with open("myFile.txt") as f:
        for line in f:
            if needs_extra_line(line):  # Implement this yourself :-)
                line += next(f)  # Add next line to this one
            print(line)
    

    或生成您要使用的块的生成器:

    def chunks(file_object):
        for line in file_object:
            if needs_extra_line(line):
                line += next(file_object)
            yield line
    

    然后处理这些行的函数可以在该生成器上运行 for 循环。

    【讨论】:

    • 我唯一遇到的问题是,对于文件的某些部分,我必须读取两行才能收集我需要的所有数据。换句话说,我会在同一个循环中执行第二个 readline() 。我不确定是否可以使用您描述的 for 循环来做到这一点。
    • 你可以这样做,如果你将打开的文件分配给一个变量,然后调用next()从迭代器中获取下一个值。我会编辑。
    • @jdrobers 然后在循环期间在文件对象上调用next(),如果出现StopIteration 错误,则文件已到达结尾。
    • 好吧,我尝试转换为“for”循环,但遇到了同样的问题。空行终止循环(如果 readLine == "",顺便说一句,我已经删除了要中断的条件。)如果它意味着什么,我使用的是 Python 2.7.5。还有其他解决方法吗?
    • 不,我很确定如果你得到一个空行,你实际上已经到达了文件的末尾。否则那不是一条线,它会继续下去。也许您的文件有问题?
    猜你喜欢
    • 1970-01-01
    • 2020-02-15
    • 2017-03-01
    • 2018-02-28
    • 2012-10-27
    • 2020-04-20
    • 1970-01-01
    • 2014-01-25
    • 1970-01-01
    相关资源
    最近更新 更多