我有一个文本文件(美国宪法),我想打印前言。这是我到目前为止的代码:
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行,这是序言,但它总是回来说索引超出范围...我该如何解决这个问题?
答案 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']