Итерация по списку с помощью функции

Я хочу перебрать список в python и напечатать его со словом «привет» после него. Однако я не получаю желаемого результата.

Код читает текстовый файл с числовыми идентификаторами. Я создал список прочитанных идентификаторов и использовал цикл for для его итерации. Ниже приведен мой код:

def read_file():
 pmid_s = []
 file_object = open("file.txt", "r", encoding='cp1252')
 pmid =file_object.read()
 pmid_s.append(pmid)
 for pmid in pmid_s:
    return(pmid)

def driver(pmid):
 print("hello"+pmid) 

def main():
 pmid= read_file
 driver(pmid)

if __name__ == '__main__':
   main()

Желаемый результат выглядит следующим образом в новой строке:

hello1
hello2
hello3
hello4
hello5

Какой результат вы получаете? Почему вы звоните driver вместо print? И почему вы переопределяете функцию print?!

Blorgbeard 10.04.2019 17:10

Вы просто добавляете всю связку в список, то есть одну большую строку, возвращаемую read(). Можно попробовать pmid_s = list(file_object). Это даст вам линии.

a_guest 10.04.2019 17:10

Что именно read_file должен делать? Вы читаете все содержимое в одну переменную, добавляете ее к пустому списку, а затем выполняете итерацию по списку синглетонов. Всю функцию можно упростить до read_file = lambda: open(...).read().

chepner 10.04.2019 17:12

@Blorgbeard Извините, я отредактировал код.

RRg 10.04.2019 17:15

@chepner функция read_file должна считывать данные из текстового файла и добавлять их в пустой список, который необходимо повторить, чтобы функция печати распечатала hello + pmid

RRg 10.04.2019 17:17
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
5
85
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Если я правильно понимаю ваш вопрос, вам нужно использовать драйвер (pmid) вместо return (pmid). Также вы можете разделить прочитанное непосредственно с помощью метода split(), и после этого нет необходимости добавлять что-либо. Смотри ниже:

def read_file():
    pmid_s = []
    file_object = open("file.txt", "r", encoding='cp1252')
    pmid_s =file_object.read().split()
    for pmid in pmid_s:
        driver(pmid)


def driver(pmid):
    print("hello {} \n ".format(pmid))


def main():
    pmid= read_file()


if __name__ == '__main__':
    main()

Я также предполагаю, что числа, которые вы читаете, разделены пробелом

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

glibdud 10.04.2019 17:17

Небольшое переформатирование вашей программы @ionut, и готово! Да! Теперь ваша программа работает! Отличная работа.

quamrana 10.04.2019 17:27
Ответ принят как подходящий

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

def read_file(fname):
    with open(fname, "r", encoding='cp1252') as f:
        return [line.strip() for line in f]

def driver(s):
    print("hello" + s)

def main():
    for num in read_file("file.txt"):
        driver(s)

if __name__ == "__main__":
    main()

Если вы хотите сделать это лениво, сделайте read_file функцию генератора.

def read_file(fname):
    with open(fname, "r", encoding='cp1252') as f:
        for line in f:
            yield line.strip()

Это когда-либо считывает только одну строку файла в память за раз, когда потребитель пытается прочитать следующий элемент из результирующего генератора.

Другие вопросы по теме