Как добавить номера из файла в список? - PullRequest
0 голосов
/ 15 апреля 2019

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

Я пытался добавить номера в список, и я могу получить только те номера, которые мне нужны, но я не могу их правильно добавить в список.

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

['23,43,56,', '67,87,34',]

И я хочу, чтобы это выглядело так:

[23, 43, 56, 67, 87, 34]

Вот мой код

def frequency():
f = open('Loto4.txt', "r")
list = []

    for line in f:
        line.strip('\n')
        start = line.find("[")
        end = line.find("]")
        line = line[start+1:end-1]
        list.append(line)
        print(line)

   print(list)
frequency()

Это файл, который я читаю:

1: [36,37,38,9]

2: [3,5,28,25]

3: [10,14,15,9]

4: [23,9,31,41]

5: [5,2,21,9]

Ответы [ 3 ]

1 голос
/ 15 апреля 2019

Попробуйте использовать список со списком в строке с append (я изменил его на extend), также, пожалуйста, сделайте не имя переменной встроенной в Python по умолчанию, так как list это одна, япереименовал его в l, но, пожалуйста, сделайте это самостоятельно в следующий раз, см. также комментарий @ MichaelButscher:

def frequency():
    f = open('Loto4.txt', "r")
    l = []

    for line in f:
        line = line.strip('\n')
        start = line.find("[")
        end = line.find("]")
        line = line[start + 1:end]
        l.extend([int(i) for i in line.split(',')])
        print(line)

    print(l)

frequency()
1 голос
/ 15 апреля 2019

В этом случае можно использовать метод literal_eval модуля ast.

from ast import literal_eval
def frequency()
    result_list = list()
    with open('Loto4.txt') as f:
        for line in f:
            result_list.extend(list(literal_eval(line)))
    print (result_list)
    return result_list

Модуль literal_eval для модуля ast (абстрактного синтаксического дерева) используется для безопасной оценки узла выражения или строки в кодировке Unicode или Latin-1, содержащей отображение литерала Python или контейнера , Предоставленная строка или узел могут состоять только из следующих литеральных структур Python: строк, чисел, кортежей, списков, диктов, логических значений и None. Это можно использовать для безопасной оценки строк, содержащих значения Python из ненадежных источников, без необходимости разбора значений самостоятельно. Он не способен вычислять произвольно сложные выражения, например, с использованием операторов или индексации.

0 голосов
/ 15 апреля 2019
def frequency():
    f = open('Loto4.txt', "r")
    retval = []

    for line in f:
        line.strip('\n')
        start = line.find("[")
        end = line.find("]")
        line = line[start+1:end-1]
        retval.extend([int(x) for x in line.split(',')])
        print(line)
    print(retval)

frequency()

Я изменил имя list на retval - поскольку list является встроенным классом.

...