简而言之,我试图从一个文本文件中 "提取 "某些行(字符串)。 但还有更多。
我有一个相当大的文本文件(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对象转换为字符串。 我的意思是,我想从文本文件中寻找一个行的列表(字符串)。
任何帮助将是非常感激的。 先谢谢你
解决方法
我自己就解决了这个问题(将感兴趣的行转换为字符串,然后再转换为浮动数组)。 实际上,我还需要对每一行进行 "消毒"--通过将文本行分割成三个浮动值(与(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) 点。