Python连续从文件读取

时间:2015-05-11 11:00:14

标签: python input readlines

我有一个从文件中读取的Python脚本。 第一个命令计算行数。第二行打印第二行,但第二行不起作用。

lv_file = open("filename.txt", "rw+")

# count the number of lines =================================
lv_cnt = 0
for row in lv_file.xreadlines():
    lv_cnt = lv_cnt + 1

# print the second line =====================================
la_lines = la_file.readlines()
print la_lines[2]

lv_file.close()

当我这样写它时,它可以工作,但我不明白为什么我必须关闭文件并重新打开才能使它工作。是否存在某些我滥用的功能?

lv_file = open("filename.txt", "rw+")

# count the number of lines =================================
lv_cnt = 0
for row in lv_file.xreadlines():
    lv_cnt = lv_cnt + 1

lv_file.close()

lv_file = open("filename.txt", "rw+")

# print the second line =====================================
la_lines = la_file.readlines()
print la_lines[2]

lv_file.close()

3 个答案:

答案 0 :(得分:4)

文件对象是迭代器。一旦你完成了所有的行,迭代器就会耗尽,进一步的读取将什么都不做。

为避免关闭并重新打开文件,您可以使用seek快退到开头:

lv_file.seek(0)

答案 1 :(得分:1)

你所追求的是file.seek()

示例:基于您的代码

lv_file = open("filename.txt", "rw+")

# count the number of lines =================================
lv_cnt = 0
for row in lv_file.xreadlines():
    lv_cnt = lv_cnt + 1

lv_file.seek(0)  # reset file pointer

# print the second line =====================================
la_lines = la_file.readlines()
print la_lines[2]

lv_file.close()

这会将文件指针重置回它的起始位置。

pydoc file.seek

  

seek(offset, whence=SEEK_SET)将流位置更改为   给定字节偏移量。 offset是相对于位置解释的   由...表示。从哪里来的值是:

     

SEEK_SET或0 - 开始流(默认值);抵消应该是   零或正SEEK_CUR或1-当前流位置;抵消可能   是负SEEK_END或2 - 流的结尾;偏移通常是   否定返回新的绝对位置。

     

2.7版中的新功能:SEEK_ *常量

更新:更好的计算数字的方法。迭代地在一个文件中的行,只关心第二行:

def nth_line_and_count(filename, n):
    """Return the nth line in a file (zero index) and the no. of lines"""

    count = 0

    with open(filename, "r") as f:
        for i, line in enumerate(f):
            count += 1
            if i == n:
                value = line

    return count, value

nlines, line = nth_line_and_count("filename.txt", 1)

答案 2 :(得分:0)

因为xreadlines()保持指向它发送给你的最后一行的指针

la_lines = la_file.readlines()

它基本上会记住它给你的最后一行的索引。 当你关闭文件然后打开它时,它会创建一个新的迭代器,它再次指向第0行。