使用 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")