вызов функции из другого / Программный питон - PullRequest
2 голосов
/ 15 марта 2019

`Первая программа: first.py

list=["ab","cd","ef"]
for i in list:
    with open("input.txt", "w") as input_file:
        print(" {}".format(i), file = input_file)

Ожидаемый вывод:

ab
cd
ef

Но я получил вывод:

ef

Вторая программа: вторая.py

input_file = open('input.txt','r')     

for line in input_file:
    if "ef" in line:
       print(line)

Ожидаемый вывод:

ef

Получен Ouput:

ef

Теперь я хочу напрямую вызвать текстовый файл (input.txt) из первого.py и использовать его в second.py? `Как вызвать функцию из другой программы python?

Редактировать: Блоки прикладного кода

Ответы [ 2 ]

2 голосов
/ 15 марта 2019

Вы открываете файл в цикле for, и w в качестве параметра режима для функции open заставляет open перезаписать открываемый файл, поэтому вы получаете тольковывод из последней итерации цикла.

Вместо этого вы должны открыть файл вне цикла:

with open("input.txt", "w") as input_file:
    for i in list:
        print("{}".format(i), file = input_file)
0 голосов
/ 15 марта 2019

В first.py измените свой код следующим образом.

Режим

w предназначен для операции записи. В каждой итерации цикла for вы перезаписываете последний контент и пишете новый. Итак, input.txt имел в этом (1007) * (наконец).

list=["ab","cd","ef"]

for i in list:
    with open("input.txt", "a+") as input_file:
        print("{}".format(i), file = input_file)

И теперь вы получите то, что ожидали от этого. Теперь у input.txt будет следующее в отличие от вашего случая.

ab
cd
ef

Примечание: Но если вы запустите first.py во второй раз, он продолжит добавление, поскольку a+ создает файл, если файл не существует, в противном случае он добавляется. Для лучшей работы этого кода используйте функцию os.path exists() модуля.

А если вы хотите вызвать код, доступный в first.py, оберните его внутри функции. Затем импортируйте эту функцию в second.py и вызовите.

Например

Сначала убедитесь, что first.py и second.py находятся в одном каталоге.

first.py

def create_file(file_name):
    list=["ab","cd","ef"]
    for i in list:
        with open(file_name, "a+") as input_file:
            print(" {}".format(i), file = input_file)

second.py

from first import create_file

def read_file(file_name):
    # Create file with content
    create_file(file_name)

    # Now read file content
    input_file = open(file_name, 'r')     
    for line in input_file:
        if "ef" in line:
           print(line)

read_file('input.txt')

Открыть терминал, перейти в этот каталог, запустить python second.py.

https://www.learnpython.org/en/Module... | https://www.digitalocean.com. .. | https://www.programiz.com/pytho... помогут вам, если вы захотите прочитать и попробовать как создать модуль / пакет на Python.

Обновление : Сказанное выше имеет проблему, как вы упоминали в комментарии, при каждом запуске он будет добавлять содержимое. Давайте исправим это с небольшим изменением first.py следующим образом.

import os

def create_file(file_name):
    l = ["ab", "cd", "ef"]

    if os.path.exists(file_name): # If file `input.txt` exists (for this example)
        os.remove(file_name)      # Delete the file

    for i in l:
        with open(file_name, "a+") as input_file:
            print(" {}".format(i), file = input_file)

Вот и все (обновите комментарий, если вы застряли).

...