解析askopenfilenames()的结果?

10 投票
5 回答
14057 浏览
提问于 2025-04-16 06:41

我正在尝试从Python 3.2中的tkinter.filedialog.askopenfilenames()获取文件名列表。

    files = askopenfilenames(initialdir="C:\\Users\\BVCAP\\Videos", title="Select files")
    self.num_files.set(len(files))  

我原本期待输出是一个元组(或者可能是一个列表),每个元素包含一个文件名。但根据我的观察,它返回的是一个字符串,里面的每个元素都被花括号{}包围,像这样:

{C:\Users\BVCAP\File1.txt} {C:\Users\BVCAP\File2.txt}

当我尝试打印(files)时,得到的就是这个结果。看起来它的格式像是某种列表,但实际上似乎只是一个字符串。我是不是做错了什么,还是这个函数的输出本身就是一个格式像文件列表的字符串,我需要自己把它分开呢?

5 个回答

0

我没有确切的答案给你,因为我还在用Python 2.x,但在我这边,askopenfilenames返回的是一个元组,所以我怀疑在3.x版本中变化不会太大。你可以试着把它转换成列表:

filelist = list(files)

或者可以用列表推导式来遍历它:

filelist = [file for file in files]
1

今天在实现这个方法时,askopenfilenames 返回的是一个包含所有选择文件的元组,而不再是之前那种奇怪的带大括号的字符串(这应该是修复过了)。

奇怪的是,如果用户按下取消按钮或者关闭浏览窗口,返回的会是一个空字符串,而不是一个空列表或元组。幸运的是,Python把字符串当作可迭代对象,这意味着你仍然可以检查 len(filedialog.askopenfilenames()) == 0 来判断是否没有选择文件。

撰写回答