在python中使用文本文件

时间:2011-11-30 18:45:58

标签: python

我试图获取一个文本文件,并在python中仅使用它的前30行。 这就是我写的:

text = open("myText.txt")
lines = myText.readlines(30)
print lines

出于某种原因,我打印时会得到超过150行? 我究竟做错了什么?

4 个答案:

答案 0 :(得分:5)

使用itertools.islice

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)

readlinessizehint参数不是您认为的(字节,而不是行)。

如果您确实想使用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>