从文本文件中打印一系列行

时间:2017-11-09 19:34:15

标签: python

我有一个文本文件(美国宪法),我想打印前言。这是我到目前为止的代码:

lines = []
with open('Constitution.txt') as fhand:
    for line in fhand:
        lines.append(line.rstrip('\n'))
        print(lines[4:10])
        break

如果在我输入print(lines[0])的代码的第5行,它可以工作,并且只打印文本的第一行,这就是单词“THE”。但我希望它打印第5-11行,这是序言,但它总是回来说索引超出范围...我该如何解决这个问题?

4 个答案:

答案 0 :(得分:3)

确保所有内容都处于正确的缩进级别,并且print语句不在for循环中。

您还可以通过列表理解将其降低,以使其更清晰。

with open('Constitution.txt') as fhand:
    lines = [line.rstrip("\n") for line in fhand]
print(lines[4:10])

答案 1 :(得分:2)

你在循环中正在做print(lines[4:10])。所以第一行被添加到lines,然后你打印第4到第10行 - 它只包含1行。

将它移到循环外。

答案 2 :(得分:0)

好吧,你的代码的问题是你在形成列表之前尝试从5到11的print行。为了澄清,在print(lines[4:10])执行时,您的已发布代码中lines列表看起来像["THE"]。因此,解释器正确地说你指定了超出范围的索引,因为列表只包含1个项目。

你应该改变你的代码:

lines = []
with open('Constitution.txt') as fhand:
    for line in fhand:
        lines.append(line.rstrip('\n'))
print(lines[4:10])

顺便说一下,如果你的break语句的意图是在你读完前11行后终止读取文件,那就不是你做的了。您的break语句将在读取第一行结束时执行。

答案 3 :(得分:0)

您可以使用readlines()方法从文件生成行列表。然后,您可以使用join()打印出您要查找的特定行。

with open('Constitution.txt') as fhand:
     print "".join(fhand.readlines()[4:10])

“.join()位所做的就是从新形成的列表中获取列表元素4到10,并将它们端到端地连接在一起。由于列表元素已经有换行符,因此无需使用换行符将它们连接起来。看看你的清单,看看我的意思。

with open('Constitution.txt') as fhand:
    print fhand.readlines()[4:10]

> ['line5\n', 'line6\n', 'line7\n', 'line8\n', 'line9\n', 'line10\n']