python查询windows文件

闲着没事,使用python写了一个查询windows中盘符文件的程序

代码:

import os
import winreg

class Find_assign_file:
    """
    drive 要查找的主路径,这是一个列表
    file_find 要查找的文件名
    file_mode 查找形式
    信息为:
        ‘i‘ 无误查找,根据用户输入的完整的文件名以及后缀信息进行查找
        ‘h‘ 半模糊查找,根据用户输入的不包括后缀信息的文件名进行查找
        ‘d‘ 模糊查找,根据用户输入的部分文件名信息进行查找
        以上三种模式全部是根据用户名进行查找,使用时应与下面的mode=‘f‘关联使用
    mode 查找模式
        ‘f‘ 文件名查找,根据用户输入的文件名信息对相应路径下寻找特定文件
        ‘c‘ 文件内容查找,根据用户输入的文件中的信息查找相应的可能文件
    """
    def __init__(self, drive, file_find, file_mode, mode=‘‘):
        self._subKey = ‘SYSTEM\MountedDevices‘
        self.drive = drive
        self.file_find = file_find
        self.file_mode = file_mode
        self.mode = mode

    def GetPartitionNames(self):
        ‘‘‘通过注册表获取系统盘符信息,并返回一个包含盘符信息的列表‘‘‘
        res = []
        key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, self._subKey)
        i = 0
        try:
            while True:
                name, value, type = winreg.EnumValue(key, i)
                if name.startswith(‘\\DosDevices\\‘):
                    res.append((name, repr(value)[1:17]))
                i += 1
        except WindowsError:
            pass
        res = [i[0][12:] + ‘/‘ for i in res]
        return res

    def find_begin(self, path):
        """
        递归遍历每一个文件夹
        :param path:
        :return:
        """
        for file_path in path:
            try:
                if os.path.isdir(file_path):  # 如果是目录
                    list = os.listdir(file_path)
                    if self.file_mode == ‘f‘:
                        # 用户查找特定目录
                        self.find_input(list, file_path)
                    if len(list) != 0:  # 如果目录不为空
                        list = [file_path + ‘/‘ + j for j in list]
                        # 递归
                        self.find_begin(list)
                    else:
                        # print(‘{}---目录为空‘.format(file_path))
                        pass
                else:
                    # 用户选择为根据文件内容进行查找特定文件
                    if self.file_mode == ‘c‘:
                        with open(file_path, ‘r‘, encoding=‘utf-8‘, errors=‘ignore‘) as f:
                            content = f.read()
                            if self.file_find in content:
                                print(file_path)
                    else:
                        pass
            except NotADirectoryError:
                # print(‘{}---无效‘.format(file_path))
                pass
            except PermissionError:
                # print(‘{}---拒绝访问‘.format(file_path))
                pass

    def find_input(self, list, old_file_path):
        """
        根据用户的选择的mode进行相应的操作
        :param list:
        :param old_file_path:
        :return:
        """
        for file_name in list:
            # 根据完整的文件名加后缀查找文件,输出文件绝对路径
            if self.mode == ‘i‘:
                if file_name == self.file_find:
                    print(‘---‘, old_file_path + ‘/‘ + file_name)
            # 根据完整的文件名进行查找,输出文件绝对路径
            elif self.mode == ‘h‘:
                if file_name.split(‘.‘)[0] == self.file_find:
                    print(‘---‘, old_file_path + ‘/‘ + file_name)
            # 根据不完整的文件名进行查找,输出文件绝对路径
            elif self.mode == ‘d‘:
                if self.file_find in file_name:
                    print(‘---‘, old_file_path + ‘/‘ + file_name)

    def get_every_file(self):
        """
        1.判断是否为用户输入路径
        2.如果使用用户输入的路径,则直接调用执行函数
        3.如果用户没有输入,则默认为系统全部盘符
        """
        if self.drive == ‘‘:
            self.drive = self.GetPartitionNames()
        else:
            self.drive = [self.drive]
        # 参数为一个包含路径信息的列表
        self.find_begin(self.drive)

def run():
    drive = input("要查找的文件主路径[‘path‘] 不输入则查询所有盘符:")
    file_find = input("请输入文件名字或者文件中的部分内容:")
    file_mode = input("查找文件请输入f-查找内容文件请输入c:")
    if file_mode == ‘f‘:
        mode = input("模式(i:完整文件名以及后缀)(h:完整文件名)(d:部分文件名):")
        path = Find_assign_file(drive, file_find, file_mode, mode)
    else:
        path = Find_assign_file(drive, file_find, file_mode)
    path.get_every_file()

if __name__ == "__main__":
    run()

部分使用说明:

1.使用完整文件名以及后缀查找文件名

2.使用完整文件名

3.使用部分文件名信息

4.通过文件内容查找文件名信息

共有以上几种方法

原文地址:https://www.cnblogs.com/hong976737/p/9356714.html

时间: 2024-10-17 14:32:24

python查询windows文件的相关文章

python学习-windows下使用python27将合并多个xlsx文件

有时候需要处理很多报表,将一个目录下的所有excel格式报表合并,手工操作费事费力如果能使用python,将多个.xlsx同时能够合并多个excel表的话,多么方便. 1.windows上python配置 windows上安装的是python2.7,需要使用pip安装一些第三方包,所以需要配置一下.在linux上修改Pip源很简单,但是在windows上很麻烦,所以我就直接单次指定pip源下载包 #windows上pip执行路径为C:\Python27\Scripts pip install -

Python实现Windows和Linux之间互相传输文件(文件夹)的方法

项目中需要从Windows系统传输ISO文件到Linux测试系统,然后再Linux测试系统里安装这个ISO文件.所以就需要实现如何把文件从Windows系统传输到Linux系统中. 在项目中使用了pscp.exe这个工具,只要按照pscp.exe的使用说明操作即可.只要进入pscp.exe的安装位置,然后输入pscp即可查看pscp的使用说明. 下面是我机器上的: 使用Python实现也挺简单的,下面的code主要介绍4中情况: 1. windows传输文件到Linux 2. windows传输

Python读取SQLite文件数据

近日在做项目时,意外听说有一种SQLite的数据库,相比自己之前使用的SQL Service甚是轻便,在对数据完整性.并发性要求不高的场景下可以尝试! 1.SQLite简介: SQLite是一个进程内的库,实现了自给自足的.无服务器的.零配置的.事务性的 SQL 数据库引擎.它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它(如安卓系统),它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了.它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多

python处理word文件:win32com用法详解

目标:用python处理doc文件 方法:引入win32com模块 ************************************************************************** 一.安装 ************************************************************************** 首先要先下载安装win32com模块(起先在linux下装不成功,后在windows下面成功了...) 下载地址:http

Python之路-文件操作(py)

文件操作的基本步骤: 1.打开文件:f=open('filename'),with open('filename') as f 2.操作文件:增,删,改,查 3.关闭文件:f.close 打开文件 python中打开文件的函数为open('filename',mode='r',encode='utf-8'),open函数默认返回文件的句柄,我们可以根据句柄来对文件进行增,删,改,查的操作.将句柄赋给我们定义的变量,假设我们定义变量为f,则f=open('filename',mode='r',en

python基础之文件读写

python基础之文件读写 本节内容 os模块中文件以及目录的一些方法 文件的操作 目录的操作 1.os模块中文件以及目录的一些方法 python操作文件以及目录可以使用os模块的一些方法如下: 得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd() 返回指定目录下的所有文件和目录名,返回的是一个列表:os.listdir("指定路径") 函数用来删除一个文件:os.remove("文件路径") 删除多个目录:os.removedirs(&

用python写windows服务

用python写windows服务(1) 以python2.5 为例需要软件 * python 2.5        * pywin32(与2.5 版本相匹配的) Service Control Manager (SCM) 服务管理器(SCM) 是windows NT的 一部分,所有服务必须通过SCM 注册,SCM负责启动,停止服务等. 当一个进程通过SCM注册后, 有如下特质: * 运行该进程的用户,未必是当前登录的用户.        * 该进程如果依赖其他服务,哪么该服务启动前,依赖服务回

linux之系统编码,python编码,文件编码

1     前言 如果你对python2和python3的中编解码很清楚,这里我认为你很清楚. 具体参考文档: "python2 encode和decode函数说明.docx" "字符编码--从ASCII开始.docx" 以上所有文档均为本地文档. 2     Python编码 sys.getdefaultencoding(): 获取系统当前编码,这里的系统指的是python自己的内置系统,并非操作系统,即3中的python编码. sys.setdefaultenc

python在windows下UnicodeDecodeError的解决方法

之前在windows下使用python调用某些模块时都会报错,像这样: C:\Documents and Settings\Administrator>python -m CGIHTTPServer Traceback (most recent call last): File "C:\Python27\lib\runpy.py", line 162, in _run_module_as_main "__main__", fname, loader, pkg_