使用 Python 自动选择文件
Automate selection of files with Python
我正在使用 Tkinter 编写一个界面,我想自动执行一项任务。实际功能打开一个window,允许用户select文件(我指定文件类型。然后从其他功能中检索这些文件的路径来修改文件。这里是我的实际功能:
def get_path(): #return the path of the selected file(s)
root = Tk()
i= datetime.datetime.now()
day = i.day
month=i.month
root.filename = filedialog.askopenfilenames(initialdir = "Z:\SGI\SYNCBBG",title = "Select your files",filetypes = (("Fichier 1","f6365full_account_refresh*"+str(month)+str(day)+".1"),("Fichier 1","f6365icsh*"+str(month)+str(day)+".1"),("all files",".*")))
root.withdraw()
return (root.filename)
我想要的只是有一个功能,可以自动检索两个不同目录中(我指定的)一种类型的所有文件。我这样做了,代码运行并打印了结果,但是在那之后 Python 停止响应并且出现错误,所以我必须关闭 Python。另一件事是我得到的是文件名,而不是绝对路径,但这不是主要问题:
def path_L2():
os.chdir("Z:/SGI/SYNCBBG/L2/results/results")
for file in glob.glob("f6365full_account_refresh*"+str(month)+str(day)+".1"):
return file
for file in glob.glob("f6365icsh*"+str(month)+str(day)+".1"):
return file
def path_L3():
os.chdir("Z:/SGI/SYNCBBG/L3/results/results")
for file in glob.glob("f6365full_account_refresh*"+str(month)+str(day)+".1"):
return file
for file in glob.glob("f6365icsh*"+str(month)+str(day)+".1"):
return file
paths=path_L2()
print(paths)
return
将从函数中立即 return return。在您的情况下,您正在 return 处理每个函数中第一个 glob
语句的第一个结果,然后退出该函数。
您要做的就是从 glob
中提取 return 列表并将它们相加。你想要这样的东西:
def path_L2():
os.chdir("Z:/SGI/SYNCBBG/L2/results/results")
return glob.glob("f6365full_account_refresh*"+str(month)+str(day)+".1") + glob.glob("f6365icsh*"+str(month)+str(day)+".1")
def path_L3():
os.chdir("Z:/SGI/SYNCBBG/L3/results/results")
return glob.glob("f6365full_account_refresh*"+str(month)+str(day)+".1") + glob("f6365icsh*"+str(month)+str(day)+".1")
不过,我不会使用 os.chdir,因为它会主动更改您的工作目录。此外,由于除了一个字符串外,您的两个函数是等效的,因此您应该创建一个函数来完成所有工作。 (使用函数的目的是不必一遍又一遍地重复相同的代码。)我会执行以下操作。 (为了整洁起见,我添加了一些额外的变量。)
def path_L(l_dir):
path1 = "f6365full_account_refresh*"+str(month)+str(day)+".1"
path2 = "f6365icsh*"+str(month)+str(day)+".1"
glob_expr1 = os.path.join(l_dir, path1)
glob_expr2 = os.path.join(l_dir, path2)
return glob.glob(glob_expr1) + glob.glob(glob_expr2)
然后您可以调用 path_L
以获取 L2:
l2_paths = path_L("Z:/SGI/SYNCBBG/L2/results/results")
l3_paths = path_L("Z:/SGI/SYNCBBG/L3/results/results")
我正在使用 Tkinter 编写一个界面,我想自动执行一项任务。实际功能打开一个window,允许用户select文件(我指定文件类型。然后从其他功能中检索这些文件的路径来修改文件。这里是我的实际功能:
def get_path(): #return the path of the selected file(s)
root = Tk()
i= datetime.datetime.now()
day = i.day
month=i.month
root.filename = filedialog.askopenfilenames(initialdir = "Z:\SGI\SYNCBBG",title = "Select your files",filetypes = (("Fichier 1","f6365full_account_refresh*"+str(month)+str(day)+".1"),("Fichier 1","f6365icsh*"+str(month)+str(day)+".1"),("all files",".*")))
root.withdraw()
return (root.filename)
我想要的只是有一个功能,可以自动检索两个不同目录中(我指定的)一种类型的所有文件。我这样做了,代码运行并打印了结果,但是在那之后 Python 停止响应并且出现错误,所以我必须关闭 Python。另一件事是我得到的是文件名,而不是绝对路径,但这不是主要问题:
def path_L2():
os.chdir("Z:/SGI/SYNCBBG/L2/results/results")
for file in glob.glob("f6365full_account_refresh*"+str(month)+str(day)+".1"):
return file
for file in glob.glob("f6365icsh*"+str(month)+str(day)+".1"):
return file
def path_L3():
os.chdir("Z:/SGI/SYNCBBG/L3/results/results")
for file in glob.glob("f6365full_account_refresh*"+str(month)+str(day)+".1"):
return file
for file in glob.glob("f6365icsh*"+str(month)+str(day)+".1"):
return file
paths=path_L2()
print(paths)
return
将从函数中立即 return return。在您的情况下,您正在 return 处理每个函数中第一个 glob
语句的第一个结果,然后退出该函数。
您要做的就是从 glob
中提取 return 列表并将它们相加。你想要这样的东西:
def path_L2():
os.chdir("Z:/SGI/SYNCBBG/L2/results/results")
return glob.glob("f6365full_account_refresh*"+str(month)+str(day)+".1") + glob.glob("f6365icsh*"+str(month)+str(day)+".1")
def path_L3():
os.chdir("Z:/SGI/SYNCBBG/L3/results/results")
return glob.glob("f6365full_account_refresh*"+str(month)+str(day)+".1") + glob("f6365icsh*"+str(month)+str(day)+".1")
不过,我不会使用 os.chdir,因为它会主动更改您的工作目录。此外,由于除了一个字符串外,您的两个函数是等效的,因此您应该创建一个函数来完成所有工作。 (使用函数的目的是不必一遍又一遍地重复相同的代码。)我会执行以下操作。 (为了整洁起见,我添加了一些额外的变量。)
def path_L(l_dir):
path1 = "f6365full_account_refresh*"+str(month)+str(day)+".1"
path2 = "f6365icsh*"+str(month)+str(day)+".1"
glob_expr1 = os.path.join(l_dir, path1)
glob_expr2 = os.path.join(l_dir, path2)
return glob.glob(glob_expr1) + glob.glob(glob_expr2)
然后您可以调用 path_L
以获取 L2:
l2_paths = path_L("Z:/SGI/SYNCBBG/L2/results/results")
l3_paths = path_L("Z:/SGI/SYNCBBG/L3/results/results")