【问题标题】:Unable to read multiline files in python using readline()无法使用 readline() 在 python 中读取多行文件
【发布时间】:2021-07-17 09:03:22
【问题描述】:

以下代码无法正常工作。在 python 中使用 readline() 无法读取多行文件。

myobject=open("myfile.txt",'r')
while ((myobject.readline())):
    print(myobject.readline())
myobject.close()

它只打印第一行然后换行。我不明白为什么?

【问题讨论】:

  • 文件的内容是什么?请提供一个简短的样本。请注意,您的代码会丢弃在 while 中读取的行,并且只打印下一行(即每隔一行)。

标签: python file-handling readline multiline


【解决方案1】:

这是因为readline 一次读取一行,您的代码仍将打印一个新行,因为readline 一直在尾随换行。

解决方法是这样做:

with open("myfile.txt", 'r') as f:
    for line in f:
        print(line)

【讨论】:

  • readline 的文档说“如果流已经在 EOF,则返回一个空字符串。”
  • @MisterMiyagi 哦,是的,误读了这个问题!感谢您指出。
  • @MisterMiyagi 编辑了我的答案:)
【解决方案2】:

readline() 返回它当前指向的行并移动到下一行。所以,while 条件和 print 语句中对函数的调用是不一样的。实际上,它们指向的是相邻的行。

首先,将该行存储在一个临时变量中,然后检查并打印。

myobject = open('myfile.txt')
while True:
    line = myobject.readline()
    if line:
        print(line)
    else:
        break

【讨论】:

    【解决方案3】:

    'r'模式下打开文件时,文件对象返回文件开头的点。

    每次调用 readline 时,都会读取一行,对象现在指向文件中的下一行

    由于您的循环条件也读取文件并将其移至下一行,因此您只能在偶数位置获取行,例如第 2、4、6 行。行号、1、3、5,... 将被while ((myobject.readline())): 读取并丢弃。

    一个简单的解决方案是

    myobject = open("myfile.txt",'r')
    for line in myobject:
        print(line, end='')
    myobject.close()
    

    对于您的情况,当您只想使用 readline() 时

    myobject = open("myfile.txt",'r')
    
    while True:
        x = myobject.readline()
        if len(x) == 0:
            break
        print(x, end='')
    
    myobject.close()
    

    此代码有效,因为 readline 的行为方式如下。

    根据python文档,https://docs.python.org/3/tutorial/inputoutput.html#methods-of-file-objects

    f.readline() 从文件中读取一行;换行符 (\n) 留在字符串的末尾,如果文件不以换行符结尾,则仅在文件的最后一行省略。这使得返回值明确;如果 f.readline() 返回一个空字符串,则表示已到达文件末尾,而空行由 '\n' 表示,该字符串仅包含一个换行符。

    【讨论】:

    • 我只想使用 readline() 读取文件。
    • @AnkitGupta 你有理由想要使用不太合适的方法吗?您是否有任何其他限制可能会排除合适的方法?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-16
    • 2021-11-22
    • 2015-05-10
    • 1970-01-01
    • 2019-07-23
    • 1970-01-01
    相关资源
    最近更新 更多