使用Python搜索所有驱动器中的文件

7 python python-2.7

我使用python,我需要一个函数或库,在所有驱动器中搜索我的文件,我只给它文件的名称,如F3在Windows中搜索计算机中的所有文件夹.windows os,本地驱动器,我写了一个代码

import os
import win32api
paths = 'D:/'
def dir_list_folder(paths):
    for folderName in os.listdir(paths):
        if (folderName.find('.') == -1):
            folderPath = os.path.join(paths,folderName );
            dir_list_folder(folderPath);
        else:
            print ('Files is :'+ folderName );
Run Code Online (Sandbox Code Playgroud)

它给了我一个很好的结果,但有些类型给我一个错误,如果我不需要搜索.Zip或.RAR文件我怎么能这样做

Uri*_*Uri 9

在Windows上,您将更好地使用os.walk功能.os.walk返回一个递归遍历源树的生成器.下面的示例显示了正则表达式搜索.

import os
import re
import win32api

def find_file(root_folder, rex):
    for root,dirs,files in os.walk(root_folder):
        for f in files:
            result = rex.search(f)
            if result:
                print os.path.join(root, f)
                break # if you want to find only one

def find_file_in_all_drives(file_name):
    #create a regular expression for the file
    rex = re.compile(file_name)
    for drive in win32api.GetLogicalDriveStrings().split('\000')[:-1]:
        find_file( drive, rex )


find_file_in_all_drivers( 'myfile\.doc' )
Run Code Online (Sandbox Code Playgroud)

一些说明:

  1. 我正在使用正则表达式来搜索文件.为此,我提前编译RE,并将其作为参数传递.请记住规范化表达式 - 特别是如果文件名来自恶意用户.
  2. win32api.GetLogicalDriveStrings返回一个包含所有驱动程序的字符串,以0分隔.拆分它,然后切出最后一个元素
  3. 在散步期间,您可以从'dirs'中删除未打开的文件夹,例如'.git'或'.cvs'.见os.walk.以doc为例.
  4. 为了保持样本简短,我没有传播'找到'.如果要打印所有文件,请删除"中断".如果要在找到第一个文件后停止,请将"break"传播到find_file_in_all_drivers.