从其他/程序python调用函数

时间:2019-03-15 03:40:21

标签: python python-3.x function call func

`第一个程序: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

第二个程序:second.py

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

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

预期输出:

ef

拿铁咖啡:

ef

现在我想直接从first.py调用文本文件(input.txt)并在second.py中使用它?`如何从其他程序python调用函数?

编辑:应用的代码块

2 个答案:

答案 0 :(得分:2)

您正在for循环中打开文件,并以w作为open函数的模式参数,它将使open覆盖打开的文件,这就是为什么您仅从循环的最后一次迭代中获得输出的原因。

您应该改为在循环外部打开文件:

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

答案 1 :(得分:0)

first.py中,像这样更改代码。

  

w模式用于写操作。在for循环的每次迭代中,您将覆盖最后一个内容并编写新的内容。因此input.txt在其中(最终)拥有ef

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.pysecond.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... |如果您想阅读并尝试使用如何在Python中创建模块/软件包https://www.programiz.com/pytho...将为您提供帮助。

  

更新:正如您在注释中提到的那样,以上内容有一个问题,每次运行都会添加内容。让我们通过对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)

就是这样(如果您遇到问题,请在评论中更新)。