读取巨大的文本文件的特定部分 (可能使用 Itertools) 读取巨大文本文件的特定部分 (可能用 Itertools)

问题描述 投票:0回答:1

简而言之,我试图从一个文本文件中 "提取 "某些行(字符串)。 但还有更多。

我有一个相当大的文本文件(100,000行,60MB)。 有些数据块是重要的,有些则不重要。 这些数据块有几百个。 没有模式,一个数据块在哪里停止,下一个数据块就不一定开始。

我已经对文件进行了解析,以确定哪些行是我感兴趣的。 现在,我有一个字典,其中包含 "开始 "的行号作为键,以及之后所需的连续行数作为值。 在这里,我可以将其转换为显式的 "开始 "行号,并将之后的连续行数作为值。

paired_points =
{51: 7,
 69: 67,
...
 870623: 1730,
 872364: 1801}



len(paired_points) = 
783

我可以把它转换成明确的 "开始 "和 "停止 "的整数 (例如 51 -> 58, 69 -> 136, 等等), 但这仍然不能帮助我.

我试图使用itertools中的islice,但它返回的是一个islice对象的列表。

from itertools import islice

file = r'575852.roi'

f = open(file, "r")

a = list()

for key in paired_points:
    with open(file) as f:
        try:
            a.append(islice(f, key, key + int(paired_points[key]))) # Start and stop lines

这在概念上是可行的--但我需要将islice对象转换为字符串。 我的意思是,我想从文本文件中寻找一个行的列表(字符串)。

任何帮助将是非常感激的。 先谢谢你

python file parsing text itertools
1个回答
0
投票

解决方法

我自己就解决了这个问题(将感兴趣的行转换为字符串,然后再转换为浮动数组)。 实际上,我还需要对每一行进行 "消毒"--通过将文本行分割成三个浮动值(与(X,Y,Z)坐标相关)。 这是在最后一行内置的map()函数中进行的,在我们建立了一个字符串列表之后。

f = open(file, "r")
a = f.readlines()
f.close()

ext_pts = list()
for key in paired_points:
    a1 = a[key : key + paired_points[key]]
    ext_pts.append(a1)

ext_pts2 = list(itertools.chain.from_iterable(ext_pts))
ext_pts2 = np.asarray(list(map(sanitize, ext_pts2)))

ext_pts 现在是一个 Nx3 numpy 数组,包含 (X, Y, Z) 点。

© www.soinside.com 2019 - 2024. All rights reserved.