Python没有读取整个txt文件

时间:2018-05-08 09:38:07

标签: python python-3.x

我正在学习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])

还想提一下,我已经尝试阅读从web robots.txt文件中下载的随机文件,脚本会按原样读取所有内容,而不会跳过任何行。 我使用的是Windows 8.1 64位和最新的Python 3.6.5。 谢谢。

5 个答案:

答案 0 :(得分:0)

我这样做没有任何问题:

>>> 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()迭代行。

答案 1 :(得分:0)

这样的印刷线可能是这样的吗?

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

答案 2 :(得分:0)

你可以打开并尝试使用[0]使用正数索引找到第一行如果你想找到第一个单词只使用split(),如果你想找到第一行使用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
>>>

谢谢!

答案 3 :(得分:0)

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

  

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

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

答案 4 :(得分:0)

获取所有行,你必须这样做:

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