Как прочитать файл, содержащий значения 12 разных массивов в 4 строки? - PullRequest
0 голосов
/ 07 октября 2019

У меня есть текстовый файл, где столбцы с 6 по 9 представляют значения некоторых переменных. 4 значения (от 6 до 9) в первой строке относятся к 4 arrays(say a1, a2, a3, a4). Затем 4 во второй строке для b1, b2, b3, b4 (скажем) и так далее для line:3 (c1 to c4) и line:4 (d1 to d4). строки с 5 по 8 представляют второй элемент из этих 16 массивов и так далее. Число строк в файле кратно 4. Как мне прочитать такие текстовые файлы и сохранить элементы в переменных?

Текстовые файлы создаются в APDL Ansys другим файлом. Эти значения необходимы для дальнейшей постобработки данных.

Столбец 5 в файле содержит: 1,4,8,11 в том же порядке до EOF. Я попытался найти «1» в столбце 5 и добавить 4 переменные (от a1 до a4), затем найти «4» в столбце 5 и добавить переменные (от b1 до b4) и так далее. но это очень медленно, особенно когда длина файла слишком велика.

FTSIZE,   1,   1,18593                     
FP, 1,  10.000    ,  20.000    ,  50.000    ,  100.00    ,  200.00    
FP, 6,  500.00    ,  1000.0    ,  2000.0    ,  5000.0    ,  10000.    
FP,11,  20000.    ,  50000.    , 0.10000E+06, 0.20000E+06, 0.50000E+06
FP,16, 0.10000E+07, 0.20000E+07, 0.50000E+07, 0.10000E+09, 0.10000E+12
FP,21,  6000.0    ,  4300.0    ,  2748.0    ,  1978.0    ,  1440.0    
FP,26,  974.00    ,  745.00    ,  590.00    ,  450.00    ,  368.00    
FP,31,  300.00    ,  235.00    ,  196.00    ,  168.00    ,  142.00    
FP,36,  126.00    ,  113.00    ,  102.00    ,  97.000    ,  93.000    
FS,       1,   1,   1, 1, -9.9985    ,  1.0121    ,  12.023    ,  0.0000    
FS,       1,   1,   1, 4, 0.14230E-10,  0.0000    ,  0.0000    ,  317.10    
FS,       1,   1,   1, 8,  0.0000    ,  0.0000    ,  0.0000    ,  0.0000    
FS,       1,   1,   1,11,  0.0000    ,  0.0000    ,  0.0000    ,  0.0000    
FS,       1,   1,   2, 1, -9.9996    ,  1.0245    ,  12.597    ,  0.0000    
FS,       1,   1,   2, 4, 0.46318E-11,  0.0000    ,  0.0000    ,  317.10    
FS,       1,   1,   2, 8,  0.0000    ,  0.0000    ,  0.0000    ,  0.0000    
FS,       1,   1,   2,11,  0.0000    ,  0.0000    ,  0.0000    ,  0.0000

для этого файла я бы ожидал: a1 = -9.9985, -9.9996; a2 = 1.0121, 1.0245; a3 = 12.023, 12.597 и так далее. Первые 9 строк также должны быть пропущены.

Ответы [ 2 ]

0 голосов
/ 07 октября 2019
a1, a2, a3= [], [], []
    with open("file.txt") as f:
        for _ in range(16):
            next(f)
        for count, line in enumerate(f, start=1):
            if (count % 4) - 1 == 0:
                a1.append(line.split(",")[5])
                a2.append(line.split(",")[6])
                a3.append(line.split(",")[7])

Это может быть использовано для решения этой проблемы

0 голосов
/ 07 октября 2019

Вопрос немного неясен, но это поместит данные из столбцов 6–9 в список списков, группирующих данные каждые четыре строки, пропуская первые 9 строк.

import itertools

with open('my_file.txt', 'r') as f:
    data = f.read()

lines = [item.split(',')[5:8] for item in data.replace(' ','').split('\n')[9:]]
output = []
for x in range(len(lines)):
    if x % 4 == 0:
        output.append(list(itertools.chain(*output[x-4:x])))

Обратите внимание, чтоПредполагается, что после первых 9 строк количество строк будет кратно 4. Также оно удаляет пробелы из данных.

...