我想逐个打开并读取同一目录中的文件数。并对它们执行两个功能。我面临两个问题:
1 我不知道如何为另一个函数中使用的threshold_file定义一个全局变量。
2 此代码正确返回文件名但发生错误
for file in os.listdir("C:/Users/Mariam/PycharmProjects/Group/Copy"):
if file.endswith('b.txt'):
threshold_file = open(file,'r')
readThreshold_file()
position_comparisonFn()
threshold_file = open(file,'r')
FileNotFoundError: [Errno 2] No such file or directory: '1000b.txt'
答案 0 :(得分:2)
代码中的文件变量仅存储文件名。 但是在打开文件时,您也应该提供相对路径。
在您的情况下,只需将 C:/ Users / Mariam / PycharmProjects / Group / Copy 附加到文件变量,您的代码就能正常运行。
答案 1 :(得分:0)
首先 - 将文件变量声明为函数外的全局,如下所示(不带引号) “global threshold_file”。然后指定您正在使用全局变量的函数。
第二 - 应该与'Shrey的评论'相同。详情如下
def func1():
global threshold_file
for file in os.listdir("C:/Users/Mariam/PycharmProjects/Group/Copy"):
if file.endswith('b.txt'):
threshold_file = open("C:/Users/Mariam/PycharmProjects/Group/Copy/"+file,'r')
readThreshold_file()
position_comparisonFn()
def func2():
global threshold_file
...
...
答案 2 :(得分:0)
对于你的两个问题:
在函数之外,通常在“导入”部分之后的代码顶部,设置您想要共享的“全局”变量,如下所示:
# Globals
threshold_file = ""
然后,在您要使用该变量的每个函数中,您必须告诉Python您要使用带有global
前缀的'global'变量,如下所示:
def foo():
global threshold_file # Here
for file in os.listdir("C:/Users/Mariam/PycharmProjects/Group/Copy"):
if file.endswith('b.txt'):
threshold_file = open(file,'r')
readThreshold_file()
position_comparisonFn()
注意:您可以使用不带global
前缀的变量,但您只能拥有只读访问权限。在上面的foo
函数中,您需要它,因为您打算更新/写入值
将“C:/ Users / Mariam / PycharmProjects / Group / Copy”存储为var,或许作为全局,现在您知道如何
p = r"C:/Users/Mariam/PycharmProjects/Group/Copy" # prefix with 'r' for literal string
并在open()
函数
...
threshold_file = open(p + r'/' + file,'r') # 'file' is just the filename... need the full path
...