`第一个程序: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调用函数?
编辑:应用的代码块
答案 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.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... |如果您想阅读并尝试使用如何在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)
就是这样(如果您遇到问题,请在评论中更新)。