Python: чтение файла набора данных - PullRequest
0 голосов
/ 10 мая 2018

Мне нужно прочитать и сохранить файл данных, состоящий из 3 столбцов и N строк. * Количество блоков. Вот простой пример:

z=3 
1 2 3 
2 5 6 
1 5 7

z=2
1 3 9
2 5 7

, который является лучшим способом прочитать этот файл и сохранитьнесколько блоков Z строки с помощью Python?

РЕДАКТИРОВАТЬ : я должен хранить их в отдельных блоках (проиндексированных), например, в приведенном выше примере у меня должно быть

block[0]=[[1 2 3],[2 5 6],[1 5 7]] 
block[1] = [[1 3 9],[2 57]]   

@ shahaf e come lo indicizzo?scusa ma sono un noob в python :) Может ли кто-нибудь объяснить мне, как обозначить несколько блоков?и в частности, я написал z= N, но на самом деле это

 ZONE I=     41  F=POINT  TIME T=      0.0000715363

Я должен поймать 41 ... и прочитать и сохранить следующую 41 строку, чем после пары белых линий я сталкиваюсь с другой ZONEраздел .. Я не знаю, сколько зон I есть в файле ..

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Вот простой черновик решения, его можно упростить, но вы можете взять его отсюда

tmp_arr= list()
output=list()
with open('file.txt') as f:
  for line in f.readlines():
    if len(line.strip()) == 0:
      pass
    elif line.startswith('z='):
      counter = int(line.split('=')[-1])
    else:
      tmp_arr.append(line.split())
      counter -= 1
      if counter == 0:
        output.append(tmp_arr)
        tmp_arr = list()

output

[[['1', '2', '3'], ['2', '5', '6'], ['1', '5', '7']], [['1', '3', '9'], ['2', '5', '7']]]
0 голосов
/ 10 мая 2018

Я не уверен, как именно вы хотите их хранить, но быстрый общий способ сделать это я нашел с помощью модуля regex и цикла for:

import re

with open('path/to/file', 'r') as fh:
    lines = fh.readlines()

# Should give this structure
# lines = ['z=3','1 2 3', '4 5 6', '7 8 9', 'z=2', '3 5 9', '8 6 4', 'z=5', '12 3 5', '8 5 7', '1 1 1', '2 3 2', '6 6 5']

blocks = []

for i in range(len(lines)):
    if 'z=' in lines[i]:
        j = re.findall('\d',lines[i])[0]
        block = lines[i+1:i+j]
        blocks.append(block)
    else:
        continue

blocks будет иметь структуру списка списков: [['1 2 3', '4 5 6', ...], [...]]. Вы можете уточнить его, используя метод split(), но это должно оторваться от земли. Конечно, это предполагает, что вы можете поместить свои данные в структуру с самого начала, что легко, если они находятся в файле, но я не уверен, извлекаете ли вы данные из базы данных или нет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...