Tkinter是一个很棒的包,并且filedialog有一些非常有用的功能。 askopenfilename和asksaveasfilename都具有'filetypes'属性,但每个属性的工作方式不同。
使用askopenfilename,它在GUI中提供选项并返回文件类型,但是
使用asksaveasfilename它只提供GUI中的选项,并且不返回文件类型。示例代码如下所示:
import tkinter as tk
from tkinter import filedialog
old_file_name = filedialog.askopenfilename(title = "Choose file",filetypes=\
(('All files','*.*'),\
('tagData','*.tagData'),\
('FDAX files','*.fdax'),\
('CSV files','*.csv')))
new_file_name = filedialog.asksaveasfilename(initialdir = "/",filetypes=\
(('tagData','*.tagData'),\
('FDAX files','*.fdax'),\
('CSV files','*.csv'),\
('XLS files','*.xls')))
print(old_file_name)
print(new_file_name)
输出:
C:/Users/christian.abbott/Desktop/FDAX_Error/example.csv
C:/Users/christian.abbott/Desktop/example
我已经找了很好的文件归档文件,但一直找不到它。为什么包的行为如此?是否有更好的选项来提取用户提示的文件路径的完整路径?
这与tkinter无关。默认情况下,Windows文件资源管理器会隐藏文件扩展名。因此,当您在文件资源管理器中看到“示例”文件时,Windows会对您撒谎。实际的文件名是“example.csv”。大多数程序(包括python)都不会说谎,并向您显示实际的文件名。
为了输入文件名,tkinter使用操作系统文件选择小部件,只显示它返回的内容。我用Win7测试了它,它不包括扩展名;然而在Debian Jessie中确实如此。如果没有,您可以随时添加一些代码来为用户执行此操作:
if not new_file_name.endswith(('tagData','fdax','csv','xls')):
new_file_name += '.csv'
在开始菜单中搜索“show extensions”,您可以关闭此“功能”。
我在Windows 10上遇到了与Python 3相同的问题。我设法通过删除文件类型元组中的句点之前的*来解决它。希望以下更改可以满足您的需求:
new_file_name = filedialog.asksaveasfilename(initialdir = "/",filetypes=\
(('tagData','.tagData'),\
('FDAX files','.fdax'),\
('CSV files','.csv'),\
('XLS files','.xls')))
这对我有用,祝你好运!