python-选择指定类型的文件

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.askopenfilenamesfiledialog 模块提供的函数,它打开一个文件选择对话框,允许用户选择一个或多个文件,并以列表的形式返回所选文件的路径。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()  # 退出应用程序
  1. import sys:导入 sys 模块,用于与 Python 解释器进行交互。
  2. from PyQt5.QtWidgets import QApplication, QFileDialog:从 PyQt5 模块中导入 QApplication 和 QFileDialog 类,用于创建应用程序对象和文件对话框对象。
  3. app = QApplication(sys.argv):创建一个应用程序对象 app,它是 PyQt5 应用程序的基础。
  4. file_dialog = QFileDialog():创建一个文件对话框对象 file_dialog,用于打开文件选择对话框。
    在创建 QFileDialog 对象之前,必须先创建 QApplication 对象。 这是因为 QFileDialog 需要依赖 QApplication 对象来进行初始化和事件处理。

具体来说,QFileDialog 类在内部使用了 QApplication 的一些功能,比如创建窗口和处理用户交互事件。为了确保 QFileDialog 的正常运行,我们需要先创建 QApplication 对象,并在创建 QFileDialog 对象之前将其实例化。

  1. file_dialog.setFileMode(QFileDialog.ExistingFiles):设置文件对话框的模式为选择现有文件,即用户只能选择已存在的文件。
  2. file_dialog.setNameFilters(["Text Files (*.txt)", "Python Files (*.py)"]):设置文件对话框的文件过滤器,限定用户只能选择文本文件和 Python 文件。
  3. if file_dialog.exec_()::执行文件对话框,等待用户选择文件。如果用户点击了对话框的确定按钮,则条件成立。
  4. files = file_dialog.selectedFiles():获取用户选择的文件列表,并将其存储在 files 变量中。
  5. print("选择的文件:"):打印提示信息,表示下面将输出选择的文件列表。
  6. for file in files::遍历选择的文件列表。
  7. print(file):打印每个选择的文件的路径。
  8. 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() 方法来获取已经选择的文件列表。

它们都可以通过设置来完成对文件的单选或者多选的功能。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值