Python - импортировать список из текстового файла, повторять и передавать в качестве аргумента - PullRequest
2 голосов
/ 07 февраля 2020

Я пытаюсь импортировать разделенный запятыми список из файла .txt (lib.txt) в список python. Затем я хотел бы перебрать каждый элемент списка, передав каждое значение в качестве аргумента другой функции. По окончании l oop должен затем перейти к следующему элементу в списке и быть бесконечным в том, что, как только он достигает конца списка, он начинается заново.

Пример txt-файла (lib.txt):

483749, 9384723, 38485903, 4875659, 27388495

Вот что я пытаюсь:

def iterateList():
    li=open('lib.txt').readlines()
    li=list(li.split(','))
    for i in li:
        otherFunction(i)

У меня есть несколько проблем с этот код В python 3.6 я не могу запустить 3-ю строку (с li.split), я думаю, потому что li не строка. Но если я преобразую li в строку перед попыткой разбить, это также не работает.

Правильно ли я подхожу к этому? Вы бы сделали это по-другому?

Спасибо, что посмотрели.

Ответы [ 3 ]

2 голосов
/ 07 февраля 2020
with open("test.txt") as f:
    file = f.readlines()

for line in file:
    numbers = line.split(", ")

    for number in numbers:
        number = number.replace("\n", "")

        print(number)

выходы:

483749
9384723
38485903
4875659
27388495

1. Убедитесь, что вы используете with open().

. Это гарантирует, что ваша файловая операция закрывается на Python после использования. См. docs для получения дополнительной информации:

Рекомендуется использовать ключевое слово with при работе с объектами файла. Преимущество заключается в том, что файл правильно закрывается после завершения его набора, даже если в какой-то момент возникает исключение.

2. Проще .split(", "), а не .split(",")

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

483749
 9384723
 38485903
 4875659
 27388495\n # We remove the '\n' in number 4 below.

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

Именно здесь в игру вступает for line in file:. После того, как вы получите линию, вы получите номера; for number in line.split(", ").

4. Замените "\n" на "".

С конца строки у вас будет \n, не забудьте заменить его ничем.

2 голосов
/ 07 февраля 2020

readlines возвращает список, и вы хотите выполнить разбиение строки, поэтому вам нужно использовать read вместо того, чтобы вернуть строку.

Возможное решение будет:

def iterateList():
    with open('lib.txt') as f:
        data = f.read().split(',')
    while True:
        for i in data:
            otherFunction(i)
1 голос
/ 07 февраля 2020

Вам нужно перебрать li в вашем коде. Проверьте это в качестве примера:

def iterateList():
    li=open('lib.txt').readlines()

    for line in li:
        items = line.split(',')
        for item in items:
            print(item)
            # otherFunction(item)
...