簡體   English   中英

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

[英]Python: Reading Specific Sections of Huge Text File (Possibly with Itertools)

簡而言之,我試圖從文本文件中“提取”某些行(字符串)。 但還有更多。

我有一個相當大的文本文件(100,000 行,60 MB)。 有些數據塊很重要,有些則不重要。 這些塊有數百個。 沒有規律,一個停止的地方,下一個不一定開始。

我已經分析了文件以確定我對哪些行感興趣。 現在,我有一個字典,其中包含“開始”行號作為鍵,之后包含所需的連續行數作為值。 這里:

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() function 執行的。

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) 點數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM