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

2024-06-08 00:37:48 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我有一个相当大的文本文件(100000行,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对象转换为字符串。我的意思是,我正在从文本文件中查找行(字符串)列表

任何帮助都将不胜感激。提前谢谢你


Tags: 文件数据对象key字符串gt列表模式
1条回答
网友
1楼 · 发布于 2024-06-08 00:37:48

解决方案

我自己解决了这个问题(将感兴趣的行转换为字符串,然后转换为浮点数组)。实际上,我还需要通过将文本行拆分为三个浮点值(与(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现在是一个(X,Y,Z)点的Nx3 numpy数组

相关问题 更多 >

    热门问题