【python实用小脚本-117】基于Python的高效文件搜索与打开工具

在当今数字化时代,文件管理成为日常工作和学习中不可或缺的一部分。随着文件数量的不断增加,如何快速、准确地找到并打开所需的文件成为了一个亟待解决的问题。AlFileUnlatcher.py 正是为了解决这一问题而诞生的。它是一款基于 Python 编写的高效文件搜索与打开工具,能够帮助用户在海量文件中迅速定位并打开目标文件,极大地提高了工作效率。

一、代码功能概述

AlFileUnlatcher.py 是一个集文件搜索与打开功能于一体的桌面应用程序。它通过图形用户界面(GUI)为用户提供了一个简洁直观的操作环境。用户只需输入想要搜索的文件名,程序便会自动在预设的文件数据库中进行搜索。如果找到了匹配的文件,程序将尝试打开该文件;如果没有找到,程序会调用一个名为 AlFileSearcher.py 的子程序,进一步在系统中搜索该文件,并将搜索结果添加到文件数据库中,以便下次快速查找。

二、代码功能详细分析

(一)图形用户界面设计

AlFileUnlatcher.py 采用了 Python 的 Tkinter 库来构建其图形用户界面。程序启动时,会创建一个名为 “ALFILEUNLATCHER” 的窗口,窗口大小固定为 400x175 像素,并且位于屏幕的右下角,方便用户随时访问。窗口的背景颜色设置为 #ffe69b,给人一种清新明亮的感觉。

root = Tk(className=" ALFILEUNLATCHER ")
root.geometry("400x175+1500+840")
root.resizable(0, 0)
root.iconbitmap(os.path.join(cwd + '\\UI\\icons', 'alfileunlatcher.ico'))
root.config(bg="#ffe69b")
root.overrideredirect(1)

窗口顶部是一个自定义的标题栏,包含程序图标、标题名称以及关闭和最小化按钮。标题栏的背景颜色为 #141414,与窗口主体形成对比,使界面层次分明。标题栏还支持拖动操作,用户可以通过拖动标题栏来移动窗口位置。

titleBar = Frame(root, bg='#141414', relief=SUNKEN, bd=0)
icon = Image.open(os.path.join(cwd + '\\UI\\icons', 'alfileunlatcher.ico'))
icon = icon.resize((30, 30), Image.ANTIALIAS)
icon = ImageTk.PhotoImage(icon)
iconLabel = Label(titleBar, image=icon)
iconLabel.photo = icon
iconLabel.config(bg='#141414')
iconLabel.grid(row=0, column=0, sticky="nsew")
titleLabel = Label(titleBar, text='ALFILEUNLATCHER', fg='#909090', bg='#141414', font=appHighlightFont)
titleLabel.grid(row=0, column=1, sticky="nsew")
closeButton = Button(titleBar, text="x", bg='#141414', fg="#909090", borderwidth=0, command=root.destroy, font=appHighlightFont)
closeButton.grid(row=0, column=3, sticky="nsew")
minimizeButton = Button(titleBar, text="-", bg='#141414', fg="#909090", borderwidth=0, command=hideScreen, font=appHighlightFont)
minimizeButton.grid(row=0, column=2, sticky="nsew")

在标题栏下方,是一个用于输入要搜索的文件名的文本框,以及一个 “OPEN FILE” 按钮。用户在文本框中输入文件名后,点击 “OPEN FILE” 按钮即可触发文件搜索和打开操作。程序还提供了一个文本区域,用于显示搜索结果或提示信息,如 “Opening [文件名]” 或 “Invalid input file” 等。

fileText = Label(root, text="FILE TO BE SEARCHED AND OPENED")
fileText.pack()
fileText.config(bg=color, fg="#0078d7", font=appHighlightFont)
fileText = Entry(root, bg="#0078d7", fg='white', highlightbackground=color, highlightcolor=color, highlightthickness=3, bd=0, font=textHighlightFont)
fileText.pack(fill=X)

find = Button(root, borderwidth=0, highlightthickness=3, text="OPEN FILE", command=find)
find.config(bg=color, fg="#0078d7", font=appHighlightFont)
find.pack(fill=X)

text = Text(root, font="sans-serif", relief=SUNKEN, highlightbackground=color, highlightcolor=color, highlightthickness=5, bd=0)
text.config(bg="#0078d7", fg='white', height=2, font=textHighlightFont)
text.pack(fill=BOTH, expand=True)

(二)文件搜索与打开逻辑

AlFileUnlatcher.py 的核心功能是文件搜索与打开。程序首先会检查是否存在一个名为 “files_database.lst” 的文件数据库。如果不存在,程序会自动创建一个空的文件数据库。然后,程序会读取文件数据库中的内容,将其中的文件路径与用户输入的文件名进行匹配。

fileName = os.path.join(cwd + '/AlFileUnlatcher', 'files_database.lst')
if os.path.exists(fileName):
    pass
else:
    dFile = open(fileName, "x")
    dFile.close()

如果在文件数据库中找到了匹配的文件路径,程序会检查该文件是否存在。如果文件存在,程序会尝试使用系统默认的应用程序打开该文件;如果文件不存在,程序会将该文件路径添加到一个名为 “notFoundList” 的列表中,并继续搜索其他匹配的文件路径。

filesList = []
notFoundList = []
otherList = []
dFile = open(fileName, "r")
files = dFile.readlines()
for file in files:
    file = file.replace('\n', '')
    if os.path.basename(file) == inputFile:
        if os.path.isfile(file):
            filesList.append(file)
        else:
            notFoundList.append(file)
    else:
        otherList.append(file)

如果在文件数据库中没有找到匹配的文件路径,或者所有找到的文件路径都不存在,程序会调用 AlFileSearcher.py 子程序,在系统中进一步搜索用户输入的文件名。AlFileSearcher.py 会返回一个包含所有匹配文件路径的列表,程序会将这些路径添加到文件数据库中,并尝试打开第一个匹配的文件。

if (lfl == 0) or (lnfl != 0 and lfl == 0) or (lnfl != 0):
    check = subprocess.check_output(f'python {cwd}/AlFileUnlatcher/AlFileSearcher.py "' + '' + inputFile + '"')
    check = check.decode("utf-8").replace('\r\n', ',:;')
    output = check.split(',:;')[:-1]
    allFiles = [i + '\n' for i in output]
    dFile = open(fileName, 'a')
    dFile.writelines(allFiles)
    dFile.close()
    uniqlines = set(open(fileName).readlines())
    bar = open(fileName, 'w+').writelines(set(uniqlines))
    if bar:
        bar.close()
    for file in output:
        filename = os.path.basename(file)
        if filename == inputFile and file not in filesList:
            filesList.append(file)

(三)文件数据库管理

为了提高文件搜索的效率,AlFileUnlatcher.py 使用了一个文件数据库来存储曾经搜索过的文件路径。文件数据库以文本文件的形式存储,每行一个文件路径。程序会定期对文件数据库进行去重操作,确保数据库中不会出现重复的文件路径。

uniqlines = set(open(fileName).readlines())
bar = open(fileName, 'w+').writelines(set(uniqlines))
if bar:
    bar.close()

当程序找到新的匹配文件路径时,会将其添加到文件数据库的末尾。同时,程序会将文件数据库中的文件路径按照是否与用户输入的文件名匹配进行重新排序,将匹配的文件路径放在前面,以便下次搜索时能够更快地找到目标文件。

lines = filesList + otherList
nFile = open(fileName, "w+")
for line in lines:
    line += '\n'
    nFile.write(line)
nFile.close()

(四)异常处理与用户提示

在文件搜索与打开的过程中,可能会出现各种异常情况,如文件不存在、没有默认的打开程序等。AlFileUnlatcher.py 对这些异常情况进行了详细的处理,并通过文本区域向用户显示相应的提示信息。

try:
    text.delete(1.0, END)
    text.insert(1.0, 'Opening ' + inputFile)
    os.startfile(os.path.join(directory, filename))
except Exception as e:
    print(str(e))
    text.insert(1.0, 'Set a default application to open the input file')

例如,如果用户输入的文件名无效,程序会在文本区域显示 “Invalid input file” 的提示信息;如果找到了匹配的文件路径,但无法打开文件,程序会在文本区域显示 “Set a default application to open the input file” 的提示信息。这些提示信息能够帮助用户及时了解程序的运行状态,并采取相应的措施。

三、总结

AlFileUnlatcher.py 作为一个基于 Python 的高效文件搜索与打开工具,凭借其简洁直观的图形用户界面、高效的文件搜索与打开逻辑、智能的文件数据库管理以及完善的异常处理与用户提示机制,为用户提供了便捷的文件管理体验。无论是日常办公、学习还是软件开发等场景,AlFileUnlatcher.py 都能够帮助用户快速找到并打开所需的文件,节省宝贵的时间,提高工作效率。在未来,随着技术的不断发展和用户需求的不断变化,AlFileUnlatcher.py 有望进一步优化和拓展其功能,为用户提供更加优质的服务。

源码获取

完整代码已开源,包含详细的注释文档:
🔗 [GitCode仓库] https://gitcode.com/laonong-1024/python-automation-scripts
📥 [备用下载] https://pan.quark.cn/s/654cf649e5a6 提取码:f5VG

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值