【问题标题】:Python doesn't read whole txt filePython 不读取整个 txt 文件
【发布时间】:2018-05-08 09:38:06
【问题描述】:

我正在学习 python 基础知识,并在需要阅读 txt 文件并逐行打印文件内容的地方进行练习。这是我的代码:

t = open('mbox-short.txt')

for line in t:
    print(line)

这是文件:https://www.py4e.com/code3/mbox-short.txt

问题是当我运行脚本时,输出没有显示文件的前几行。上述原始文件中的第一行是:

From stephen.marquard@uct.ac.za Sat Jan  5 09:14:16 2008

每次我运行我的脚本时,它都会显示从行开始的内容:

Received: from nakamura.uits.iupui.edu (localhost [127.0.0.1])

        by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11) with ESMTP id m04GA5LR007211

请帮助我了解我做错了什么以及如何解决它。正如我正确理解的那样,它与 txt 文件编码有关。我尝试下载并复制了几次,通过记事本将编码从 ANSI 更改为 UTF-8,但每次我运行脚本时,它都会打印相同的输出,跳过几行并仅从行开始:

Received: from nakamura.uits.iupui.edu (localhost [127.0.0.1])

还想提一下,我尝试读取从网络上随机下载的 robots.txt 文件,并且脚本会按应有的方式读取所有内容,而不会跳过任何行。 我正在使用 Windows 8.1 64 位和最新的 Python 3.6.5。 谢谢。

【问题讨论】:

  • 我下载了指定的文件并运行了你的代码。 “它可以在我的机器上运行。”
  • 我猜只是你的cmd/powershell的缓冲区不能包含那个文件的1910行,而且开头的行已经被滚动了。
  • @quemrana ,他要获取文本的第一行
  • @halfelf 你是对的。我增加了缓冲区大小(达到 5000),现在终于显示了所有行。谢谢!
  • @SkillerDz OP 发布的代码说他想要文件中的 all 行。这就是我在“我的机器上”运行它时观察到的。而句柄是quamrana,都是a的。

标签: python python-3.x


【解决方案1】:

我这样做没有任何问题:

>>> with open('./mbox-short.txt', 'r') as f:
        txt = f.read()

>>> print(txt.splitlines()[0])  # display the first line 
'From stephen.marquard@uct.ac.za Sat Jan  5 09:14:16 2008'

所以我建议你稍微修改一下你的代码,首先read() 文本文件,然后使用splitlines() 遍历行。

【讨论】:

    【解决方案2】:

    也许像这样只打印行?

    with open("./mbox-short.txt", "r") as ins:
        for line in ins:
            print(line)
    

    【讨论】:

      【解决方案3】:

      为了得到所有的行,你必须这样做:

      t = open('mbox-short.txt', 'r').readlines()
      for n in t:
        line = n.strip()
        print line
      

      【讨论】:

        【解决方案4】:

        @halfelf 在 cmets 中发布了正确答案,所以我将其复制在这里:

        我猜这只是你的 cmd/powershell 的缓冲区不能包含 1910 该文件的行,并且开始行已滚动

        我只是在 cmd 属性中增加了缓冲区大小,现在它显示了所有行。谢谢大家的回答,不胜感激。

        【讨论】:

          【解决方案5】:

          如果您想查找第一个单词,请使用 [0] 打开并尝试使用正索引查找第一行,如果您想查找第一行,请使用 splitlines()

          f = open('mbox-short.txt', 'r').read()
          print f.split()[0] # Using Positive Indexing
          

          输出:

          >>> print f.split()[0]  
          From
          >>>>
          

          现在我们将找到第一行

          f = open('file.txt', 'r').read()
          print f.splitlines()[0] # First Line Using Positive Indexing
          

          输出:

          >>> print f.splitlines()[0]
          From stephen.marquard@uct.ac.za Sat Jan  5 09:14:16 2008
          >>>
          

          或者你也可以用 readline() 来做:

          f = open('mbox-short.txt', 'r').readline()
          print f
          

          输出:

          >>> f = open('mbox-short.txt', 'r').readline()
          >>> print f
          From stephen.marquard@uct.ac.za Sat Jan  5 09:14:16 2008
          >>>
          

          谢谢!

          【讨论】:

            猜你喜欢
            • 2021-08-12
            • 2016-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-06-20
            • 2021-02-06
            • 1970-01-01
            相关资源
            最近更新 更多