Я хочу перебрать список в 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
Вы просто добавляете всю связку в список, то есть одну большую строку, возвращаемую read()
. Можно попробовать pmid_s = list(file_object)
. Это даст вам линии.
Что именно read_file
должен делать? Вы читаете все содержимое в одну переменную, добавляете ее к пустому списку, а затем выполняете итерацию по списку синглетонов. Всю функцию можно упростить до read_file = lambda: open(...).read()
.
@Blorgbeard Извините, я отредактировал код.
@chepner функция read_file должна считывать данные из текстового файла и добавлять их в пустой список, который необходимо повторить, чтобы функция печати распечатала hello + pmid
Если я правильно понимаю ваш вопрос, вам нужно использовать драйвер (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()
Я также предполагаю, что числа, которые вы читаете, разделены пробелом
Возможно, вы захотите запустить свой код и убедиться, что он делает то, что ожидается, прежде чем публиковать его.
Небольшое переформатирование вашей программы @ionut, и готово! Да! Теперь ваша программа работает! Отличная работа.
У вас есть файл, состоящий из ряда целых чисел, по одному в строке. Итератор файла выдает строки файла. Вы можете создать список, перебирая сам файл.
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()
Это когда-либо считывает только одну строку файла в память за раз, когда потребитель пытается прочитать следующий элемент из результирующего генератора.
Какой результат вы получаете? Почему вы звоните
driver
вместоprint
? И почему вы переопределяете функциюprint
?!