python-选择指定类型的文件
在我们进行日常小工具的开发中,经常会使用到选择指定类型文件的功能。
用python写起来其实也很简单,一起来看看吧。
1.用 tkinter 库实现
tkinter
是Python的内置库,用于创建图形用户界面。filedialog
模块提供了文件对话框的功能,用于选择文件。
import tkinter as tk
from tkinter import filedialog
root = tk.Tk()
root.withdraw()
# 这两行创建了一个Tk对象并隐藏了根窗口。Tk对象是Tkinter库的主窗口,
# 我们通过调用withdraw方法隐藏了它,因为我们只需要文件选择对话框而不需要显示主窗口。
file_types = [('Text Files', '*.srt'), ('Text Files', '*.txt')]
# 指定要筛选的文件格式,可以是多种格式,'*'代表任意格式
files = filedialog.askopenfilenames(filetypes=file_types)
# 弹出文件选择对话框,并选择文件,可以多选,返回文件名的列表
print("选择的文件:")
for file in files: # 依次遍历选择的文件列表,输出文件名
print(file)
filedialog.askopenfilenames
是 filedialog
模块提供的函数,它打开一个文件选择对话框,允许用户选择一个或多个文件,并以列表的形式返回所选文件的路径。filetypes
参数用于指定可选的文件类型,这里我们传递了上面定义的 file_types
列表。
由于filedialog.askopenfilenames
返回的是一个文件列表,所以我们要获取里面的每一个文件名,需要去遍历这个文件列表。
2.用 PyQt5 库实现
主要使用 QApplication
类和 QFileDialog
类实现。QApplication()
类用于创建应用程序对象,QFileDialog
类用于创建文件对话框对象。
import sys
from PyQt5.QtWidgets import QApplication, QFileDialog
app = QApplication(sys.argv) # 创建应用程序对象
file_dialog = QFileDialog() # 创建文件对话框对象
file_dialog.setFileMode(QFileDialog.ExistingFiles) # 设置文件对话框的模式为选择现有的多个文件
file_dialog.setNameFilters(["Text Files (*.txt)", "Python Files (*.py)"])
# 设置文件过滤器,限定只能选择文本文件和Python文件
if file_dialog.exec_(): # 执行文件对话框,等待用户选择文件
files = file_dialog.selectedFiles() # 获取用户选择的文件列表
print("选择的文件:") # 打印选择的文件列表
for file in files:
print(file)
sys.exit() # 退出应用程序
-
import sys
:导入 sys 模块,用于与 Python 解释器进行交互。 -
from PyQt5.QtWidgets import QApplication, QFileDialog
:从 PyQt5 模块中导入 QApplication 和 QFileDialog 类,用于创建应用程序对象和文件对话框对象。 -
app = QApplication(sys.argv)
:创建一个应用程序对象 app,它是 PyQt5 应用程序的基础。 -
file_dialog = QFileDialog()
:创建一个文件对话框对象 file_dialog,用于打开文件选择对话框。
在创建 QFileDialog 对象之前,必须先创建 QApplication 对象。 这是因为 QFileDialog 需要依赖 QApplication 对象来进行初始化和事件处理。
具体来说,QFileDialog 类在内部使用了 QApplication 的一些功能,比如创建窗口和处理用户交互事件。为了确保 QFileDialog 的正常运行,我们需要先创建 QApplication 对象,并在创建 QFileDialog 对象之前将其实例化。
-
file_dialog.setFileMode(QFileDialog.ExistingFiles)
:设置文件对话框的模式为选择现有文件,即用户只能选择已存在的文件。 -
file_dialog.setNameFilters(["Text Files (*.txt)", "Python Files (*.py)"])
:设置文件对话框的文件过滤器,限定用户只能选择文本文件和 Python 文件。 -
if file_dialog.exec_():
:执行文件对话框,等待用户选择文件。如果用户点击了对话框的确定按钮,则条件成立。 -
files = file_dialog.selectedFiles()
:获取用户选择的文件列表,并将其存储在 files 变量中。 -
print("选择的文件:")
:打印提示信息,表示下面将输出选择的文件列表。 -
for file in files:
:遍历选择的文件列表。 -
print(file)
:打印每个选择的文件的路径。 -
sys.exit()
:退出应用程序,结束程序的运行。这行代码的执行会导致程序终止,并返回到 Python 解释器。
3.文件单选或者多选的问题
上面的这两种都是支持多选的,如果要设置为只能单选文件。则需要做如下的修改:
tkinter 库:
将 filedialog.askopenfilenames()
修改为 filedialog.askopenfilename()
(少一个s
),这时,返回的是单一的文件名称而不是文件列表了,返回的类型为 str
PyQt5 库:
将对话框模式中的 file_dialog.setFileMode(QFileDialog.ExistingFiles)
修改为file_dialog.setFileMode(QFileDialog.ExistingFile)
(也是少一个s
),不同的是,file_dialog.selectedFiles()
函数返回的依然是一个列表,只是里面只有一个元素,返回的类型为 list
4.总结
tkinter
库的核心在于使用 filedialog
模块的 askopenfilenames()
函数,使用参数 filetypes
进行指定类型的文件选择。
PyQt5
库的核心在于使用 QApplication()
类来创建应用程序对象,同时使用 QFileDialog()
类来创建文件对话框对象,然后对实例化的对象使用 setNameFilters()
方法,来限定选择的文件类型。使用 selectedFiles()
方法来获取已经选择的文件列表。
它们都可以通过设置来完成对文件的单选或者多选的功能。