Чтение отформатированного массива из файла в Python - PullRequest
0 голосов
/ 09 мая 2019

У меня есть файл, который содержит несколько строк, а затем два отформатированных массива.Это выглядит примерно так:

megabuck
Hello world

[58, 50, 42, 34, 26, 18, 10, 2,
      61, 53, 45, 37, 29, 21, 13, 5,
      63, 55, 47, 39, 31, 23, 15, 7]

[57, 49, 41, 33, 25, 17, 9,
        1, 58, 50, 42, 34, 26, 18,
        14, 6, 61, 53, 45, 37, 29,
        21, 13, 5, 28, 20, 12, 4]

Я не знаю заранее размер массивов.Единственное, что я знаю, это разделитель для массива, равный [].Что может быть элегантным способом чтения массивов.

Я новичок в Python.

Ответы [ 2 ]

3 голосов
/ 09 мая 2019

Использование Regex.re.findall

Пример:

import re
import ast

with open(filename) as infile:
    data = infile.read()

for i in re.findall(r"(\[.*?\])", data, flags=re.S):
    print(ast.literal_eval(i))

Выход:

[58, 50, 42, 34, 26, 18, 10, 2, 61, 53, 45, 37, 29, 21, 13, 5, 63, 55, 47, 39, 31, 23, 15, 7]
[57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4]
0 голосов
/ 09 мая 2019

Я бы не назвал это элегантным, но оно работает

ars = """
megabuck
Hello world

[58, 50, 42, 34, 26, 18, 10, 2,
    61, 53, 45, 37, 29, 21, 13, 5,
    63, 55, 47, 39, 31, 23, 15, 7]

[57, 49, 41, 33, 25, 17, 9,
        1, 58, 50, 42, 34, 26, 18,
        14, 6, 61, 53, 45, 37, 29,
        21, 13, 5, 28, 20, 12, 4]
"""
arrays = [] 
for a in ars.split("["):
    if ']' in a:
        arrays.append([i.strip() for i in a.replace("]",'').split(',')])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...