Как сохранить плавающие файлы из txt файла с несколькими массивами? - PullRequest
0 голосов
/ 11 марта 2019

Я хотел бы извлечь данные из текстового файла, хранящегося как:

[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]

(между скобками нет вертикального пространства)

Не могли бы вы знать, как поступить? Я попробовал это ниже, который не распознает скобки.

with open(filename) as f:
    array = []
    for line in f:
        array.append([float(x) for x in line.split()])

Ответы [ 5 ]

0 голосов
/ 11 марта 2019

Если у вас нет запятых между этими целыми числами.

with open('file.txt') as f:
    arr = []
    for line in f:
        integer_array = eval(line.replace(' ', ','))
        arr.append([float(item) for item in integer_array])
    print(arr)
0 голосов
/ 11 марта 2019

Следующий код оценивает содержимое файла строка за строкой как код Python. Однако, хотя это работает, это, вероятно, не оптимальное решение, тем более что оно может быть потенциально опасным и должно выполняться только в том случае, если вы уверены, что в файле не будет вредоносного содержимого.

import ast

arr = []
with open('values.txt', 'r') as f:
    for line in f: 
        arr.extend(ast.literal_eval(line.replace("[ ", "[").replace(" ", ",")))
print(arr)
0 голосов
/ 11 марта 2019

Предполагая, что каждый подсписок в скобках хранится в новой строке.

Замените line.split() на:

line.strip()[1:-1].split()

Это просто избавляет от обоих скобок (или от первого и допоследний символ) с [1:-1].

0 голосов
/ 11 марта 2019

Вам нужно добавить проверку, является ли строка цифрой или нет, чтобы достичь этого, просто добавьте if x.isdigit(), см. Пример ниже:

with open(filename) as f:
    array = []
    for line in f:
        array.append([float(x) for x in line.split() if x.isdigit()])
print array

вывод: [[0,0, 1,0, 2,0], [4,0, 5,0, 6,0], [8,0, 9,0, 10,0]]

0 голосов
/ 11 марта 2019

Можете ли вы попробовать следующее:

with open(filename) as f:
    array = []
    for line in f: 
        array.append([float(x) for x in line.replace('[', '').replace(']', '').strip().split()])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...