作者:陈曦来源:早起Python大家好,又是python办公自动化系列。在日常办公中,我们经常会从一堆不同格式的文件(文件夹)中寻找特定的文件。也许你是靠记忆或者借助软件找到的,但是你有没有想过怎么用python来实现呢?扫描路径中的内容有时我们想在当前文件夹的成百上千个文件中快速找到需要的文件。如果这个文件夹包含很多子文件夹,就没有必要让程序无缘无故地搜索和浪费资源。这是一个典型的“扫描一级搜索”1.根据os.scandir()需求描述?输出C:\ProgramFiles(x86)路径下包含“Windows”的文件夹名称,统计number?分析步骤这是非遍历需求,只需要在目标文件夹中扫描一圈即可判断。使用的方法是os.scandir(),使用方法如下:importospath=...forfileinos.scandir(path):print(file.name,file.path,file.is_dir())以上最后输出的code是给定路径下各个内容的名称和绝对路径,判断是否为文件夹。需要注意的是,os.scandir()只在路径的下一级进行扫描。实现需求的代码如下(代码逻辑很简单,可以相应调整):importosnum=0forfileinos.scandir(r'C:\\ProgramFiles(x86)'):iffile.is_dir():if'Windows'infile.name:print(file.name)num+=1print('包含Windows的文件夹个数为:',num)2.输出路径C:\下的所有可执行文件ProgramFiles(x86)基于os.listdir()的要求(即后缀为.exe)步骤分析仍然是非遍历要求,这里使用os.listdir(),比os.scandir简单(),并且可以直接调用输出名称而不是路径。后缀名可以通过字符串切片来判断,但难免会失去灵活性。这时候推荐使用字符串方法string.endswith()判断名称结尾是否为.exe,代码如下:importosforfileinos.listdir(r'C:\\ProgramFiles(x86)'):iffile.endswith('.exe'):print(file)3.遍历文件夹搜索文件很多时候,我们想给出一个大概的路径,在里面逐层搜索该路径下的所有文件夹中查找特定文件或符合要求的文件。这里需要遍历文件。主要有两种方法:1.基于os.walk()os.walk遍历后生成三个参数:当前文件夹路径,包含文件夹名[列表形式],包含文件名[列表形式],简单遍历即可使用以下代码完成:importosfordirpath,dirnames,filenamesinos.walk(r'C:\\ProgramFiles(x86)'):print(f'openfolder{dirpath}')ifdirnames:print(dirnames)iffilenames:print(filenames)print('-'*10)要求遍历C:\ProgramFiles(x86)找到所有新版本的Excel文件(即后缀为.xlsx)进行步骤分析,如只要了解os.walk()的工作模式,就可以使用endswith()来判断后缀。最后,如果需要获取绝对路径,可以将当前文件夹路径与文件名拼接起来,用+或者字符串格式化即可,或者使用os模块中的方法importosfordirpath,dirnames,filenamesinos.walk(r'C:\\ProgramFiles(x86)'):iffilenames:foriinfilenames:ifi.endswith('.xlsx'):print(os.path.join(dirpath,i))2.基于non-os方法:globglob在之前的推文中也多次提到遍历框架:importglobforfileinglob.glob('**/*',recursive=True):使用print(file)**/*表示使用通配符来引用给定路径下的任意层,递归参数允许遍历搜索。因为glob可以使用“通配符”,所以灵活性大大拓宽了。这里也使用glob来完成上述需求。需求描述遍历C:\ProgramFiles(x86)找到所有新版本的Excel文件(即后缀为.xlsx)importglobforfileinglob.glob('**/*.xlsx',recursive=True):print(file),可以看到很简单,在原代码的基础上加上后缀名就可以搜索具体类型的文件了。如果需要搜索“特定文件”,比如遍历C:\ProgramFiles(x86)找到文件practice.txt,“只需要将最后一个*改成特定名称即可”。importglobforfileinglob.glob('**/practice.txt',recursive=True):print(file)4.写在最后通过本文的Python自动化脚本制作过程,我们可以再一次感受强大Python办公自动化!如果对自动化代码和数据感兴趣,可以在后台回复自动化获取。当然,本文只是根据几个简单的需求来讲解使用Python制作搜索文件脚本的主要方法。接下来,大家可以根据自己的需要,结合之前的自动化案例,或者添加一些其他的规则,或者添加新的功能。一款属于你的软件!最后希望大家能够明白,Python办公自动化的核心之一就是“批量操作解放双手”,将复杂的工作自动化!
