我试图获取一个文本文件,并在python中仅使用它的前30行。 这就是我写的:
text = open("myText.txt")
lines = myText.readlines(30)
print lines
出于某种原因,我打印时会得到超过150行? 我究竟做错了什么?
答案 0 :(得分:5)
import itertools
for line in itertools.islice(open("myText.txt"), 0, 30)):
print line
答案 1 :(得分:4)
如果您要单独处理您的线路,可以选择使用循环:
file = open('myText.txt')
for i in range(30):
line = file.readline()
# do stuff with line here
编辑:下面的一些评论表达了对此方法的担忧,假设文件中至少有30行。如果这是您的应用程序的问题,您可以在处理之前检查行的值。一旦达到EOF,readline()
将返回空字符串''
:
for i in range(30):
line = file.readline()
if line == '': # note that an empty line will return '\n', not ''!
break
index = new_index
# do stuff with line here
答案 2 :(得分:2)
readlines
的sizehint
参数不是您认为的(字节,而不是行)。
如果您确实想使用readlines
,请尝试使用text.readlines()[:30]
。
请注意,对于大型文件来说这是低效的,因为它在返回一个片段之前首先创建一个包含整个文件的列表。
直接的解决方案是在循环中使用readline
(如mac's answer所示)。
要处理各种大小(多于或少于30)的文件,Andrew's answer使用itertools.islice()
提供了强大的解决方案。要在没有itertools
的情况下获得类似结果,请考虑:
output = [line for _, line in zip(range(30), open("yourfile.txt", "r"))]
或作为生成器表达式(Python> 2.4):
output = (line for _, line in zip(range(30), open("yourfile.txt", "r")))
for line in output:
# do something with line.
答案 3 :(得分:0)
readlines的参数是您要读入的大小(以字节为单位)。显然,150多行是30字节的数据。
使用for循环执行此操作将为您提供正确的结果。不幸的是,似乎没有更好的内置功能。</ p>