Покрытие строк из текстового файла в целые числа - PullRequest
2 голосов
/ 30 июня 2019
[0, 1, 2, 3],[4, 5, 6, 7, 8],[9, 10, 11],[12, 13, 14, 15],[16, 17, 18, 19, 20],[21, 22, 23]
[0, 1, 2],[3, 4, 5],[6, 7, 8, 9],[10, 11, 12, 13]

[0, 1],[2],[3, 4, 5],[6, 7, 8, 9]
[0, 1, 2, 3],[4, 5, 6, 7],[8],[9, 10, 11, 12],[13, 14, 15]

У меня есть вышеуказанный текстовый файл.Проблема в том, что каждый из индексов в этом файле является строкой, но я хочу преобразовать их обратно в целые числа.Я попробовал это:

with open("abc.txt", "r") as text_file:
    new_list = [int(line) for line in text_file]

Я получил эту ошибку:

ValueError: invalid literal for int() with base 10: '[0, 1, 2, 3],[4, 5, 6, 7, 8],[9, 10, 11],[12, 13, 14, 15],[16, 17, 18, 19, 20],[21, 22, 23]\n'

Output-

[0, 1, 2, 3],[4, 5, 6, 7, 8],[9, 10, 11],[12, 13, 14, 15],[16, 17, 18, 19, 20],[21, 22, 23]
[0, 1, 2],[3, 4, 5],[6, 7, 8, 9],[10, 11, 12, 13]

[0, 1],[2],[3, 4, 5],[6, 7, 8, 9]
[0, 1, 2, 3],[4, 5, 6, 7],[8],[9, 10, 11, 12],[13, 14, 15]

Просто, что все эти строки представляют списки, содержащие INTEGERS.

Ответы [ 3 ]

3 голосов
/ 30 июня 2019

Читать о ast.literal_eval

Попробуйте это,

import ast
with open("abc.txt", "r") as text_file:
    new_list = [list(ast.literal_eval(line)) for line in text_file if line.strip()]

Выход:

[[[0, 1, 2, 3],  [4, 5, 6, 7, 8],  [9, 10, 11],  [12, 13, 14, 15],  [16, 17, 18, 19, 20],  [21, 22, 23]],
 [[0, 1, 2], [3, 4, 5], [6, 7, 8, 9], [10, 11, 12, 13]],
 [[0, 1], [2], [3, 4, 5], [6, 7, 8, 9]],
 [[0, 1, 2, 3], [4, 5, 6, 7], [8], [9, 10, 11, 12], [13, 14, 15]]]
2 голосов
/ 30 июня 2019

Вы можете использовать literal_eval и chain:

from ast import literal_eval
from itertools import chain

with open("abc.txt", "r") as text_file:
    new_lines = (list(literal_eval(line)) for line in text_file if line.strip())
    new_list = list(chain(*new_lines))

line.strip() - пропустить пустую строку.

1 голос
/ 30 июня 2019

Regex - ваша лучшая ставка после прочтения данных,

z = re.findall("[\d]+",your_string)

Тогда осталось преобразовать каждую строку в списке в целое число, вот простой пример,

for i in range(len(z)): 
    new_z[i] = int(z[i]) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...