Python: Чтение спецификаций c разделов огромного текстового файла (возможно, с помощью Itertools) - PullRequest
0 голосов
/ 05 мая 2020

Короче, я пытаюсь «извлечь» определенные строки (строки) из текстового файла. Но это еще не все.

У меня довольно большой текстовый файл (100 000 строк, 60 МБ). Одни фрагменты данных являются важными, а другие - нет. Таких блоков несколько сотен. Нет никакого шаблона, и там, где один останавливается, следующий не обязательно начинается.

Я уже проанализировал файл, чтобы определить, какие строки меня интересуют. Прямо сейчас у меня есть словарь, который содержит «начальные» номера строк в качестве ключей и желаемое количество следующих друг за другом строк в качестве значений. Здесь:

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



len(paired_points) = 
783

Вместо этого я могу преобразовать это в явные целые числа "start" и "stop" (например, 51 -> 58, 69 -> 136, и т.д. c.), Но это все равно не не помогло.

Я пытаюсь использовать islice из itertools, но он возвращает список объектов 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 объекты для строк. Я имею в виду, я ищу список строк (строк) из текстового файла.

Любая помощь будет принята с благодарностью. Заранее спасибо!

1 Ответ

0 голосов
/ 05 мая 2020

РЕШЕНИЕ

Я решил это сам (преобразовать интересующие строки в строки, а затем в массив чисел с плавающей запятой). На самом деле мне нужно было «дезинфицировать» каждую строку - разделив текстовую строку на три значения с плавающей запятой (коррелирующие с координатами (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) очков.

...