Как правильно читать числовые данные (сохраненные в текстовом файле) в Python?

1

У меня есть информация о координатах патчей, которые необходимо сохранить для дальнейшей обработки. Я сохранил координаты (списки) в файлы patch_info.txt, и данные похожи на это для одного файла, и я добавляю информацию в цикл for для каждого файла мата в текстовый файл:

[[117, 90, 75, 102, 105, 132],
  [117, 83, 68, 102, 98, 132],
  [117, 82, 67, 102, 97, 132],
  [116, 73, 58, 101, 88, 131],
  [115, 67, 52, 100, 82, 130],
  [112, 129, 114, 97, 144, 127],
  [110, 97, 82, 95, 112, 125],
  [109, 55, 40, 94, 70, 124],
  [102, 93, 78, 87, 108, 117],
  [99, 134, 119, 84, 149, 114],
  [96, 117, 102, 81, 132, 111],
  [96, 72, 57, 81, 87, 111],
  [82, 126, 111, 67, 141, 97],
  [78, 110, 95, 63, 125, 93]],
 'labels-001-012.mat']

и я использовал следующий код, чтобы снова прочитать их в python:

patch_info=[]
with open('patch_info.txt') as f:
    for line in f.readlines():
        line=line.strip('\n')
        patch_info.append(ast.literal_eval(line))

Мой вопрос в том, что некоторые пользователи не предлагают использовать ast.literal_eval, что лучший способ прочитать числовой список данных в python?

Теги:
python-2.7
text-files
readline

1 ответ

1
Лучший ответ

Если вы можете форматировать данные в текстовом файле как данные json, вы используете json.load для анализа данных. Это намного лучше, чем использование ast.literal_eval Если ваши данные еще не отформатированы, вы можете использовать некоторую предварительную обработку с помощью sed/awk или что-то подобное, чтобы преобразовать его в необходимый формат json

Например, рассмотрите следующие данные в файле с именем test.data

[
[1,2],
[6,7],
[1,2],
[6,7],
[1,2],
[6,7],
[1,2],
[6,7],
[1,2],
[6,7]
]

Затем вы можете загрузить их на python, выполнив

>>> with open('test.data2', 'r') as f:
...     data = json.load(f)
... 
>>> data
[[1, 2], [6, 7], [1, 2], [6, 7], [1, 2], [6, 7], [1, 2], [6, 7], [1, 2], [6, 7]]
>>> 
  • 2
    Почему это "намного лучше"?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню