繁体   English   中英

在python中读取特定行数

[英]Read specific number of lines in python

我有BIG数据文本文件,例如:

#01textline1
1 2 3 4 5 6
2 3 5 6 7 3
3 5 6 7 6 4
4 6 7 8 9 9

1 2 3 6 4 7
3 5 7 7 8 4
4 6 6 7 8 5

3 4 5 6 7 8
4 6 7 8 8 9
..
..

您不需要循环即可实现您的目的。 只需使用列表上的index函数即可获取两行的索引,并获取它们之间的所有行。

请注意,我更改了您的file.readlines()来删除尾随的换行符。

(如果read()在一行数据的中间结束,则使用file.read().splitlines()可能会失败。)

file1 = open("data.txt","r")
file2=open("newdata.txt","w")
lines = [ line.rstrip() for line in file1.readlines() ]

firstIndex = lines.index("#02textline2")
secondIndex = lines.index("#03textline3")

print firstIndex, secondIndex
file2.write("\n".join(lines[firstIndex  + 1 : secondIndex]))


file1.close()
file2.close()

每行的末尾都有一个行返回字符,因此:

if line == "#03textline3":

永远不会是真的,因为该行实际上是"#03textline3\\n" 为什么不使用与"#02textline2"相同的语法? 它本来可以工作:

if "#03textline3" in line: # Or ' line == "#03textline3\n" '
    break;

此外,您必须更正always_print = True行的缩进。

我建议这样做:

firstKey = "#02textline2"
secondKey = "#03textline3"

with open("data.txt","r") as fread:
    for line in fread:
        if line.rstrip() == firstKey:
            break

    with open("newdata.txt","w") as fwrite:
        for line in fread:
            if line.rstrip() == secondKey:
                break
            else:
                fwrite.write(line)

这种方法利用了Python将文件视为迭代器的事实。 第一个for循环遍历文件迭代器f直到找到第一个键为止。 循环中断,但迭代器保持当前位置。 取回后,第二个循环开始,第一个循环开始。 然后,我们直接将所需的行写到新文件中,并丢弃其余的行

好处:

  • 这不会将整个文件加载到内存中,只会存储firstKeysecondKey之间的行,并且脚本secondKey读取secondKey之前的行。

  • 没有条目被查看或处理超过一次

  • 上下文管理with一个更安全的消费方式的文件

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM