Как получить наборы данных из текстового файла в списки и переменные? - PullRequest
0 голосов
/ 13 февраля 2020

У меня есть текстовый файл, подобный следующему:

1 2 10
10 9
1 3 10
2 9 5

В первой строке мне нужно, чтобы 3 числа были помещены в 3 разные переменные, а в строке после мне нужно 3 числа, чтобы вставить список. Каждые две строки представляют собой разные наборы данных.

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

Как мне это сделать?

Ответы [ 2 ]

1 голос
/ 13 февраля 2020

Вот примерная функция, которая делает это с комментариями о том, что делается в строке:

# open the file with a with statement so that
# it automatically closes via its context manager
# when we exit the context
with open('file.txt', 'r') as f:

    # We will enumerate the file handler
    # So that we can easily tell which number
    # is odd or which is even.
    # Note that enumerate starts at 0, not 1
    for num, line in enumerate(f):

        # Make sure no spaces, line breaks, etc. at the start/end of each line.
        # The list separator is a space (default) so `line.split()`
        # will accomplish this. 
        line = line.strip()
        line_as_list = line.split()

        # For the second, forth, etc. lines we want to grab the list
        if num % 2 == 1:
            print ('EVEN -- %s' % line_as_list)

        # On the other lines, if it has three items separated by a space
        # we will grab those three items (again using `line.split()` and
        # assign a, b, and c as the (arbitrary) variable names to those
        elif len(line_as_list) == 3:
            a,b,c = line_as_list
            print ('ODD -- a=%s, b=%s, c=%s' %(a,b,c))

        # Depending on what you want to do if there are not three variables
        # you would handle them in this section here.
        else:
            print ('ODD -- BUT NOT THREE VARS')


# ODD  -- a=1, b=2, c=10
# EVEN -- ['10', '9']
# ODD  -- a=1, b=3, c=10
# EVEN -- ['2', '9', '5']

Вышеприведенное, вероятно, может быть сжато в пару строк кода, но оно было подробно написано выше.

0 голосов
/ 13 февраля 2020

Вы можете сделать следующее:

with open('the_file.txt') as f:
    content = f.readlines()

Lines_list = [x.replace("\n","").split(sep=" ") for x in content]

print(Lines_list)

Печать будет выводить

[['1', '2', '10'], ['10', '9'], ['1', '3', '10'], ['2', '9', '5']]

Затем вы можете получить доступ к своим переменным как Lines_list [line_number] [var_number].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...