Python 3中如何将函数转为字符串?askdirectory路径转换需求
解决tkinter.filedialog.askdirectory返回函数对象的问题
看起来你犯了一个很常见的小错误——没有调用askdirectory方法,而是直接把函数本身赋值给了变量,所以才得到了函数对象而不是路径字符串。
问题根源
当你写path = askdirectory的时候,你只是把这个函数的引用赋值给了path变量,而没有执行这个函数去弹出文件夹选择对话框。只有加上括号()调用它,才会让函数执行,返回用户选择的文件夹路径字符串(如果用户取消选择则返回空字符串)。
正确的代码示例
import tkinter as tk from tkinter import filedialog import glob # 先创建主窗口(可以隐藏,避免显示空白窗口) root = tk.Tk() root.withdraw() # 隐藏主窗口,只显示文件夹选择对话框 # 调用askdirectory方法,加上括号! folder_path = filedialog.askdirectory(title="请选择要遍历的文件夹") # 处理用户可能取消选择的情况 if folder_path: print(f"获取到的文件夹路径:{folder_path}") # 现在可以用glob遍历文件了,比如遍历所有文件(包括子文件夹) all_files = glob.glob(f"{folder_path}/**/*", recursive=True) print("遍历到的文件列表:") for file in all_files: print(file) else: print("用户取消了文件夹选择")
关键注意点
- 必须调用函数:一定要记得给
askdirectory加上(),否则得到的是函数对象,不是路径字符串。 - 处理取消选择的情况:如果用户点击了对话框的取消按钮,
askdirectory会返回空字符串,这时候直接用这个空字符串给glob会导致错误,所以要先判断路径是否非空。 - 隐藏主窗口:创建
Tk()实例后调用withdraw()可以避免弹出一个多余的空白主窗口,只显示文件夹选择对话框。
这样修改后,你就能得到正确的路径字符串,直接传给glob使用啦。
内容的提问来源于stack exchange,提问作者John




