python如何快速查找到想要的文档

news2024/12/25 13:52:37

字多不看版,直接体验

待补充

演示代码

# -*- coding:UTF-8 -*-

# region 导入必要的依赖包
import os
import subprocess
from enum import Enum

模块名 = 'pyperclip'
try:
    import pyperclip  # 需要安装 pyperclip 模块,以支持粘贴板操作
except ImportError as impErr:
    print(f"尝试导入 {模块名} 依赖时检测到异常:{impErr}")
    print(f"尝试安装 {模块名} 模块:")
    try:
        os.system(f"pip install {模块名}")
    except OSError as osErr:
        print(f"尝试安装模块 {模块名} 时检测到异常:{osErr}")
        exit(0)
    else:
        try:
            import pyperclip
        except ImportError as impErr:
            print(f"再次尝试导入 {模块名} 依赖时检测到异常:{impErr}")
            exit(0)

模块名 = 'DebugInfo'
try:
    from DebugInfo.DebugInfo import *
except ImportError as impErr:
    print(f"尝试导入 {模块名} 依赖时检测到异常:{impErr}")
    print(f"尝试安装 {模块名} 模块:")
    try:
        os.system(f"pip install {模块名}")
    except OSError as osErr:
        print(f"尝试安装模块 {模块名} 时检测到异常:{osErr}")
        exit(0)
    else:
        try:
            from DebugInfo.DebugInfo import *
        except ImportError as impErr:
            print(f"再次尝试导入 {模块名} 依赖时检测到异常:{impErr}")
            exit(0)

模块名 = 'difflib'
try:
    import difflib  # 需要安装 difflib 模块,以支持字符差异对比操作
except ImportError as impErr:
    print(f"尝试导入 {模块名} 依赖时检测到异常:{impErr}")
    print(f"尝试安装 {模块名} 模块:")
    try:
        os.system(f"pip install {模块名}")
    except OSError as osErr:
        print(f"尝试安装模块 {模块名} 时检测到异常:{osErr}")
        exit(0)
    else:
        try:
            import difflib
        except ImportError as impErr:
            print(f"再次尝试导入 {模块名} 依赖时检测到异常:{impErr}")
            exit(0)


# endregion


# 定义一个 命令行参数类,用于解析和记录命令行参数

class 文档路径操作结果(Enum):
    参数异常: int = -1
    操作完成: int = 0
    返回上一级: int = 1
    退出程序: int = 2


def 编辑文档(文档路径: str, 搜索接口: 搜索接口基类 = None, 画板: 打印模板 = False):
    画板 = 画板 if isinstance(画板, 打印模板) else 打印模板()
    画板.执行位置(编辑文档)

    文档路径 = str(文档路径 if 文档路径 else '').strip()
    if not os.path.isfile(文档路径):
        return None

    notepad = os.getenv('notepad--')
    if not notepad:
        # 如果 notepad 变量不存在,则尝试搜索 notepad--.exe 程序
        if isinstance(搜索接口, 搜索接口基类) and 搜索接口.可用:
            搜索结果 = 搜索接口.搜索(搜索关键字='notepad--.exe',
                                     搜文档=True,
                                     搜路径=False,
                                     画板=画板.副本)
            if 搜索结果.总数 > 0:
                for 结果 in 搜索结果.结果列表:
                    if 结果.lower().endswith('notepad--.exe'):
                        notepad = 结果
                        break

    if notepad and notepad.lower().endswith('notepad--.exe') and os.path.isfile(notepad):
        # 尝试使用 notepad 来打开路径
        shell指令: str = f'"{notepad}" "{文档路径}"'
        subprocess.Popen(shell指令)
    else:
        # 使用系统默认程序打开路径
        if 在nt系统中():
            os.startfile(文档路径)
        else:
            画板.提示错误('不受支持的操作系统')


def 文档操作(文档列表: str or list[str], 搜索接口: 搜索接口基类, 画板: 打印模板 = None) -> 文档路径操作结果:
    画板 = 画板 if isinstance(画板, 打印模板) else 打印模板()
    画板.执行位置(文档操作)

    if isinstance(文档列表, str):
        文档列表 = (文档列表 if 文档列表 else '').strip()
        if not (文档列表 and os.path.isfile(文档列表)):
            if not 文档列表:
                画板.提示错误(红字('不存在待操作文档'))
            else:
                画板.提示错误(f'待操作文档不存在: {红字(文档列表)}')
            return 文档路径操作结果.参数异常
    elif isinstance(文档列表, list):
        文档列表 = [文档.strip() for 文档 in 文档列表]
        文档列表 = [文档 for 文档 in 文档列表 if 文档]
        不存在文档列表 = [文档 for 文档 in 文档列表 if not os.path.isfile(文档)]
        if 不存在文档列表:
            if len(不存在文档列表) == 1:
                画板.消息(f'文档不存在: {红字(不存在文档列表[0])}')
            else:
                画板.消息('以下文档不存在:')
                画板.准备表格()
                画板.添加多行(不存在文档列表, 拆分列数=1, 修饰方法=红字).展示表格()
            return 文档路径操作结果.参数异常
    else:
        文档列表 = str(文档列表).strip()
        if not os.path.isfile(文档列表):
            画板.提示错误('待操作文档不存在' + '' if not 文档列表 else f': {红字(文档列表)}')
            return 文档路径操作结果.参数异常

    # 文档列表统一成列表形式
    文档列表 = 文档列表 if isinstance(文档列表, list) else [文档列表]
    if not 文档列表:
        画板.提示错误(红字('不存在待操作文档'))
        return 文档路径操作结果.参数异常

    画板.消息(f'待操作文档是: {绿字(文档列表[0])}')

    操作选项: 交互接口类 = 交互接口类()
    操作选项.添加选项(代号=1, 选项='打开', 备注='调用默认的系统程序打开该文档')
    操作选项.添加选项(代号=1.1, 选项='编辑', 备注='调用notepad来打开指定的文档')
    操作选项.添加选项(代号='del', 选项='删除文档', 备注='删除该文档')
    操作选项.添加选项(选项='-')
    操作选项.添加选项(代号='r', 选项='返回上级操作')

    操作选择 = 操作选项.发起选项交互(输入提示='请选择需要的操作(0: 退出程序):', 画板=画板.副本)
    原文档路径, 原文档名 = os.path.split(文档列表[0])
    if not 原文档路径 and 原文档名:
        原文档路径, 原文档名 = os.path.split(os.path.abspath(文档列表[0]))
    if '0' in 操作选择.代号:
        # 用户要求退出
        return 文档路径操作结果.退出程序
    elif 'r' in 操作选择.代号:
        # 用户要求返回上级操作
        return 文档路径操作结果.返回上一级
    elif '1' in 操作选择.代号:
        # 用户要求打开文档
        try:
            if 在nt系统中():
                os.startfile(文档列表[0])
            elif 在posix系统中():
                subprocess.call(['xdg-open', 文档列表[0]])
            else:
                画板.提示错误('不受支持的操作系统')
        except Exception as exp:
            画板.提示错误(f'打开文档失败: {exp}')
            交互接口类.发起文本交互(输入提示='输入任意字符以退出:', 允许空值=True, 画板=画板.副本)
        finally:
            return 文档路径操作结果.操作完成
    elif '1.1' in 操作选择.代号:
        # 用户要求编辑文档
        编辑文档(文档路径=文档列表[0], 搜索接口=搜索接口, 画板=画板.副本)
        return 文档路径操作结果.操作完成
    elif 'del' in 操作选择.代号:
        # 用户要求删除文档
        for 文档 in 文档列表:
            os.system(f'del /q "{文档}"')
        return 文档路径操作结果.操作完成
    else:
        # 不受支持的操作项
        画板.提示错误(f'不受支持的操作: {操作选择.代号}:{操作选择.选项}')
        return 文档路径操作结果.返回上一级


if __name__ == '__main__':
    画板 = 打印模板(False)
    画板.执行位置(__file__)

    everything搜索 = 本地搜索接口类(everything地址='127.0.0.1', everything端口=23)
    while True:
        while True:
            文档选择 = 交互接口类.指定选择文档(输入提示='请输入关键字以定位文档(0: 退出程序):',
                                               搜索接口=everything搜索,
                                               画板=画板.副本)
            if '0' in 文档选择:
                # 用户要求退出
                exit(0)
            操作结果 = 文档操作(文档列表=文档选择, 搜索接口=everything搜索, 画板=画板.副本)
            if 操作结果 in [文档路径操作结果.返回上一级, 文档路径操作结果.参数异常]:
                if 操作结果 is 文档路径操作结果.参数异常:
                    搜索关键字 = ''
                # 用户要求返回本级
                continue
            else:
                exit(0)

👆以上代码中, 我们定义了一个本地搜索接口类对象,该类通过everything开放的http服务,使用了everything搜索引擎的能力,为文档选择提供了强效的支持,大大提高了用用户定位和选择文档的效率。

关于如何打开everything的http服务,您可以参考:everything开通http服务

👆以上代码中, 我们通过交互接口类发起了指定选择文档交互,用户可以通过输入关键字快速的定位交选择文档,如下👇
20231123150941

在上图👆中,用户输入了关键字debuginfo.py,程序通过everything快速的定位出了关键文档供用户选择,我们看到用户选择了6号文档,程序反馈了用户所选择的文档。

提高效率

在上图👆中,我们看到用户输入的关键字 debuginfo.py 定位到了13个文档,虽然缩小了范围,但还是不甚清晰,区分文档比较困难。

那么,程序支持用户通过符号 来使用多重关键字,如下👇
20231123151431

在上图👆中,我们看到用户输入了关键字 dyy|appdata|debuginfo.py,程序列出了最匹配的4个候选文档供用户选择,并且程序把用户的关键字都已经标注了颜色,大大提升了用户选择识别文档的效率,提高了交互体验。

小结

这就是今天带来的如何在python中快速定位/选择文档的分享,欢迎大家讨论。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1243088.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java零基础——SpringMVC篇

1.SpringMVC介绍 SpringMVC是Spring框架中的一个组件,是一个轻量级的web的MVC框架,充当controller,其本质就是一个Servlet。 1.1 传统Servlet的不足 每个请求,都需要定义一个Servlet。虽然可以在service方法中,根据业务标识进行…

「Verilog学习笔记」 输入序列不连续的序列检测

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网 题目要求检测a的序列,a为单bit输入,每个时刻可能具有不同的值,且并不是每一个数据都是有效的,需要根据data_valid信号进行判…

【knife4j-spring-boot】Springboot + knife4j-spring-boot 整合swagger脚手架

swagger-boostrap-ui从1.x版本到如今2.x,同时也更改名字Knife4j 在此记录下 knife4j-spring-boot-starter 的整合。 只需要引入knife4j-spring-boot-starter,无需引入其他的swagger包,knife4j-spring-boot-starter已经包含。 官方版本说明…

软件系统测试有哪些测试流程?系统测试报告编写注意事项

在软件开发的过程中,系统测试是至关重要的一环,它的目的是验证和评估软件产品是否符合预期的质量标准,以确保系统的稳定性、可靠性和安全性。 一、软件系统测试的测试流程 1、需求分析与测试计划制定:根据需求分析确定测试目标、…

C++ 问题 怎么在C++11标准语法中调用C++20的类

一. 问题 在工作中,因为一个算法功能需要跟别的部门对接,他们提供了该算法的头文件.h,静态库.lib,动态库.dll。但是头文件中使用了C++20才有的新特性,如#include等,而本地使用的vs2015开发环境,只支持C++11标准语法,这种情况下,该怎么把该算法集成到本地项目中呢? …

前端已死?看看我的秋招上岸历程

背景 求职方向:web前端 技术栈:vue2、springboot(学校开过课,简单的学习过) 实习经历:两段,但都是实训类的,说白了就是类似培训,每次面试官问起时我也会坦诚交代&…

激光切割设备中模组的作用有哪些?

激光切割设备是一种高精度的自动化加工设备,用于对金属、非金属等材料进行精确切割。直线模组作为激光切割设备的重要组成部分,在激光切割设备中起着重要的作用,为设备的运动系统提供了高精度、高稳定性和高效率的运动控制。 1、高精度的位置…

【C++初阶】第一站:C++入门基础(中)

前言: 这篇文章是c入门基础的第一站的中篇,涉及的知识点 函数重载:函数重载的原理--名字修饰 引用:概念、特性、使用场景、常引用、传值、传引用效率比较的知识点 目录 5. 函数重载 (续) C支持函数重载的原理--名字修饰(name Mangling) 为什么…

【C语言】qsort函数

目录 简介 头文件 ​编辑 函数原型: 参数函数如何写: 参数函数要求: qsort对整性数据的排序: qsort对字符型数据的排序: 对结构体类型的内部元素排序: 函数的底层是以快速排序实现的 但是本文不深入…

关于「光学神经网络」的一切:理论、应用与发展

/目录/ 一、线性运算的光学实现 1.1. 光学矩阵乘法器 1.2. 光的衍射实现线性运行 1.3. 基于Rayleigh-Sommerfeld方程的实现方法 1.4. 基于傅立叶变换的实现 1.5. 通过光干涉实现线性操作 1.6. 光的散射实现线性运行 1.7. 波分复用(WDM)实现线性运…

phpstudy和IDEA 配置php debug

1.安装xdebug 扩展,phpinfo() 查看 2.配置php.ini zend_extensionD:/phpstudy_pro/Extensions/php/php7.4.3nts/ext/php_xdebug.dll xdebug.collect_params1 xdebug.collect_return1 xdebug.auto_traceOn xdebug.trace_output_dirD:/phpstudy_pro/Extensions/php_l…

vue + docxtemplater 导出 word 文档

一、痛点 word 导出 这种功能其实之前都是后端实现的,但最近有个项目没得后端。所以研究下前端导出。 ps: 前端还可以导出 pdf,但是其分页问题需要话精力去计算才可能实现,并且都不是很完善。可参考之前的文章:利用 h…

Flink 替换 Logstash 解决日志收集丢失问题

在某客户日志数据迁移到火山引擎使用 ELK 生态的案例中,由于客户反馈之前 Logstash 经常发生数据丢失和收集性能较差的使用痛点,我们尝试使用 Flink 替代了传统的 Logstash 来作为日志数据解析、转换以及写入 ElasticSearch 的组件,得到了该客…

PasteNow for mac剪贴板工具

PasteNow 是一款简单易用的剪贴板管理工具,可帮助用户快速存储和管理剪贴板上的文本和图片内容。用户可以使用 PasteNow 软件快速将文本内容保存到不同的笔记或页面中,也可以方便地将剪贴板上的图片保存到本地或分享给其他应用程序。 此外,P…

Java互联网+医院智能导诊系统源码 自动兼容H5小程序、Uniapp

随着信息和通信技术的进步,智能和移动技术越来越普遍,尤其在医疗保健领域,一些新型卫生信息系统被不断开发出来支持医院和其他卫生保健组织的管理和运作。 智能导诊系统是嵌入到医院和医疗保健卫生中心 HIS系统中的一种专门导诊系统,通过智能语音交互的方式帮助用户完成导诊、分…

XC2303 PFM 升压 DC-DC 变换器 SOT23-3封装 体积小 外围简单 适合小电流产品

XC2303系列产品是一种高效率、低纹波、工作频率高的 PFM 升压 DC-DC 变换器。XC2303系列产品仅需要四个元器,就可完成将低输入的电池电压变换升压到所需的工作电压,非常适合于便携式1~4 节普通电池应用的场合。 电路采用了高性能、低功耗的参考电压电路结构&#xf…

深度学习常见激活函数:ReLU,sigmoid,Tanh,softmax,Leaky ReLU,PReLU,ELU整理集合,应用场景选择

文章目录 1、ReLU 函数(隐藏层中是一个常用的默认选择)1.1 优点1.2 缺点 2、sigmoid 函数2.1 优点2.2 缺点 3、Tanh 函数3.1 优点3.2 缺点 4、softmax 函数(多分类任务最后一层都会使用)5、Leaky ReLU 函数5.1 优点5.2 缺点 6、PR…

【JavaEE初阶】 JavaScript相应的WebAPI

文章目录 🌲WebAPI 背景知识🚩什么是 WebAPI🚩什么是 API 🎍DOM 基本概念🚩什么是 DOM🚩DOM 树 🍀获取元素🚩querySelector🚩querySelectorAll 🎄事件初识&am…

WordPress用sql命令批量删除所有文章

有时我们需要将一个网站搬迁到另一个服务器。我们只想保留网站的模板样式,而不需要文章内容。一般情况下我们可以在后台删除已发表的文章,但如果有很多文章,我们则需要一次删除所有文章。 WordPress如何批量删除所有文章 进入网站空间后台&a…

chrome F12 performance 性能分析

本文主要是介绍chrome F12 performance 性能分析,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧! 页面加载速度慢,到底是多少秒,瓶颈在哪里? 前端性能工具Chrome performance…