我尝试允许用户输入文件名,然后打印文件的内容,但我的代码没有打印任何内容?



标题大多不言自明。我试图创建一个程序,根据标题打开一个文本文件的用户输入在python。然而,程序不打印任何东西——它不花时间计算和打印文本,而是什么也不做。

我已经尝试重新编写程序,不包括第一个函数,只是要求用户输入,但随后我提示一个错误,关于文件不在正确的目录中。我所期望的只是打印用户指定的文件的内容。下面是我的代码:

filename = 0
def get_filename():
filename = str(input("Give a file name: "))
return filename

def process_file():
reading = open(filename, "r", encoding="utf-8")
lines = reading.readlines()
for line in lines:
print(line)

def main():
get_filename()
process_file()
main()
filename.close()

这是最短的方法:

with open(input("Filename: "), "r") as file:
print(file.read())

程序打开文件0,该文件可能是stdin,因此程序正在等待输入。我怀疑你不是那个意思。

你的代码应该传递参数:

def get_filename():
return input("Give a file name: ")

def process_file(filename):
with open(filename, "r", encoding="utf-8") as file:
for line in file:
print(line)

def main():
filename = get_filename()
process_file(filename)
main()

变量filename在某些函数中是全局的,而在get_filename()函数中是局部的。默认情况下,变量是局部的,只有当你试图在函数中定义它之前使用它们的值时,Python才会尝试回退到全局值。若要重写此设置,并将全局"文件名"变量应该在get_filename中使用,可以添加一个带有global关键字的指令作为函数的第一行:global filename.

也就是说,最佳实践是显式地将值作为参数传递给函数,而不是依赖于全局变量:

def get_filename():
filename = input("Give a file name: ")
return filename

def process_file(filename):
reading = open(filename, "r", encoding="utf-8")
lines = reading.readlines()
for line in lines:
print(line)
reading.close()

def main():
filename = get_filename()
process_file(filename)
main()

也没有必要用input的返回值来调用str:它已经是一个字符串了。

您不使用get_filename()返回的文件名。你必须获取它并将其传递给process_file()

def get_filename():
filename = str(input("Give a file name: "))
return filename
def process_file(filename):
reading = open(filename, "r", encoding="utf-8")
lines = reading.readlines()
for line in lines:
print(line)

def main():
filename = get_filename()
process_file(filename)
main()
filename.close()

另一种方法是-在函数内部-将filename的作用域从local(默认)更改为global

def get_filename():
global filename
filename = str(input("Give a file name: "))
def process_file():
global filename
reading = open(filename, "r", encoding="utf-8")
lines = reading.readlines()
for line in lines:
print(line)

def main():
get_filename()
process_file()
main()
filename.close()

最新更新