python | 轮询获取文件路径

本文说明如何利用 Python 和 正则表达式轮询指定文件夹获取文件路径。

更新:2023 / 07 / 09


python | 巧用正则表达式:实践 - 对文件路径的处理


通配符是一些特殊符号,主要有 * 星号 和 ? 问号,用来模糊搜索文件,* 可以匹配任意个数个符号,? 可以匹配单个字符。

当查找文件夹时,可以使用它来代替一个或多个真正字符。当不知道真正字符或者需要匹配符合一定条件的多个目标文件时,可以使用通配符代替一个或多个真正的字符。

glob

概念

英文 globbing 意为通配,globpython 自带的一个文件操作相关模块,可以用于查找符合自己目的的文件,就类似于 windows 下的文件搜索,其接受通配模式作为输入,并返回所有匹配的文件名和路径名列表。
os.listdir 类似。


语法

glob.glob

glob.glob(pathname, *, root_dir=None, dir_fd=None, recursive=False, include_hidden=False)
参数描述
pathname其为需要匹配的字符串 123(该参数应尽量加上 r 后缀,以免发生不必要的错误)。
recursive代表递归调用,与特殊通配符 ** 一同使用,默认为 False

该函数返回一个符合条件的路径的字符串列表。如果使用的是 Windows 系统,路径上的 \ 符号会自动加上转义符号变为 \\ 4

glob 模块支持的通配符 5

通配符功能
*匹配 0 或多个字符。
**匹配所有文件、目录、子目录和子目录里的文件。
?匹配 1 个字符,与正则表达式里的 ? 不同
[exp]匹配指定范围内的字符,如 [1-9] 匹配 19 范围内的字符。
[!exp]匹配不在指定范围内的字符。

glob.iglob

iglob(pathname, recursive=False)

参数与 glob() 一致。
返回一个迭代器,该迭代器不会同时保存所有匹配到的路径,而是逐个获取匹配的文件路径。
遍历该迭代器的结果与使用相同参数调用 glob() 的返回结果一致。

以下是一个简要地例子用以说明其用法 6

f = glob.iglob(r'../*.py')

print(f)
# <generator object iglob at 0x00B9FF80>

for i in f:
	print(i)

示例

*

import glob

listglob = []

'''获取指定路径下的*.py'''
listglob = glob.glob(r"./PycharmProjects/DataAnalysis/DataAnalysis/*/*.py")
listglob.sort()
# ./PycharmProjects/DataAnalysis/DataAnalysis/Jira/DataAnalysisWithJira.py
# ./PycharmProjects/DataAnalysis/DataAnalysis/Jira/DataAnalysisWithJira_1.py
# ./PycharmProjects/DataAnalysis/DataAnalysis/Jira/JiraReport_Plot.py
# ./PycharmProjects/DataAnalysis/DataAnalysis/Jira/JiraReport_html.py



**

import glob

listglob = []

'''获取指定路径及其各级子路径下的*.py'''
listglob = glob.glob(r"./PycharmProjects/DataAnalysis/**/*.py", recursive=True)
listglob.sort()
# ./PycharmProjects/DataAnalysis/DataAnalysis/Jira/DataAnalysisWithJira.py
# ./PycharmProjects/DataAnalysis/DataAnalysis/Jira/DataAnalysisWithJira_1.py
# ./PycharmProjects/DataAnalysis/DataAnalysis/Jira/JiraReport_Plot.py
# ./PycharmProjects/DataAnalysis/DataAnalysis/Jira/JiraReport_html.py
# ./PycharmProjects/DataAnalysis/DataAnalysis/NumPy/NumPyEx/NumPy_Ex0_rm_rows_between_2_array.py
# ./PycharmProjects/DataAnalysis/DataAnalysis/NumPy/NumPyEx/NumPy_Ex1_3Dscatter/NumPy_Ex1_3Dscatter.py
# ./PycharmProjects/DataAnalysis/DataAnalysis/NumPy/NumPyEx/NumPy_Ex2_DataProcess/NumPy_Ex2_DataProcess.py
# ./PycharmProjects/DataAnalysis/DataAnalysis/NumPy/NumPyEx/NumPy_Ex3_GetKeyInfo/NumPy_Ex3_SearchKeyword.py
# ./PycharmProjects/DataAnalysis/DataAnalysis/NumPy/NumPyEx/NumPy_Ex3_GetKeyInfo/NumPy_Ex3_SearchKeyword_v2.py
# ./PycharmProjects/DataAnalysis/DataAnalysis/NumPy/NumPyEx/NumPy_Ex4_ExtractFilePathFromStr/NumPy_Ex4_ExtractFilePathFromStr.py
# ./PycharmProjects/DataAnalysis/DataAnalysis/Pandas/Filter/Filter_RowOrCol.py
# ./PycharmProjects/DataAnalysis/DataAnalysis/Pandas/IO/Excel/IO_Excel.py
# ./PycharmProjects/DataAnalysis/DataAnalysis/Pandas/Pivot_Table/Query/Pivot_Table_Query.py
# ./PycharmProjects/DataAnalysis/DataAnalysis/test.py

import glob

listglob = []
listglob = glob.glob(r"./PycharmProjects/DataAnalysis/**/N?m?y*py", recursive=True)
listglob.sort())

# ./PycharmProjects/DataAnalysis/DataAnalysis/NumPy/NumPyEx/NumPy_Ex0_rm_rows_between_2_array.py
# ./PycharmProjects/DataAnalysis/DataAnalysis/NumPy/NumPyEx/NumPy_Ex1_3Dscatter/NumPy_Ex1_3Dscatter.py
# ./PycharmProjects/DataAnalysis/DataAnalysis/NumPy/NumPyEx/NumPy_Ex1_3Dscatter/NumPy_Ex1_3Dscatter_ExampleData.npy
# ./PycharmProjects/DataAnalysis/DataAnalysis/NumPy/NumPyEx/NumPy_Ex2_DataProcess/NumPy_Ex2_DataProcess.py
# ./PycharmProjects/DataAnalysis/DataAnalysis/NumPy/NumPyEx/NumPy_Ex3_GetKeyInfo/NumPy_Ex3_SearchKeyword.py
# ./PycharmProjects/DataAnalysis/DataAnalysis/NumPy/NumPyEx/NumPy_Ex3_GetKeyInfo/NumPy_Ex3_SearchKeyword_v2.py
# ./PycharmProjects/DataAnalysis/DataAnalysis/NumPy/NumPyEx/NumPy_Ex4_ExtractFilePathFromStr/NumPy_Ex4_ExtractFilePathFromStr.py

os.walk

概念

os.walk() 方法用于通过在目录树中游走输出在目录中的文件名,向下或向上。
os.walk 方法是一个简单易用的文件、目录遍历器,可以帮助我们高效地处理文件、目录方面的事情。

UnixWindows 中有效。


语法

os.walk(top[, topdown=True[, oneerror=None[,followlinks=False]]])
参数说明
top后接所需遍历的目录的地址,返回的是一个三元组(rootdirsfiles)。

root 所指的是当前正在遍历的这个文件夹的本身的地址。
dirs 是一个 list,内容是该文件夹中所有的目录的名字(不包括子目录)。
files 同样是 list,内容是该文件夹中所有的文件(不包括子目录)。
topdown可选,为 True,则优先遍历 top 目录,否则优先遍历 top 的子目录(默认为开启)。如果 topdown 参数为 Truewalk 会遍历 top文件夹,与 top 文件夹中每一个子目录。
oneerror可选,需要一个 callable 对象,当 walk 需要异常时,会调用。
followlinks可选,如果为 True,则会遍历目录下的快捷方式( linux 下是软链接 symbolic )实际所指的目录(默认关闭),如果为 False,则优先遍历 top 的子目录。

该方法没有返回值。


示例

如果要输出指定目录 dir 下的所有信息,并将 .py 结尾的文件输出到指定的文件 output3

import os
import re

dir = ['./DataAnalysis']
output = './DataAnalysis/file.list'

for i in dir:
    with open(output, 'a') as f:
        for root, dirs, paths in os.walk(i):
            for pathfile in paths:
                print(os.path.join(root, pathfile))
                if re.match(r'.*\.py', pathfile) != None:
                    f.write(os.path.join(root, pathfile)+'\n')

参考链接


  1. 【python】使用正则匹配判断字符串中含有某些特定子串 及 正则表达式详解 ↩︎

  2. 文件路径 正则表达式 ↩︎

  3. Python 的正则操作与获取指定目录下的文件 ↩︎ ↩︎

  4. glob — Unix style pathname pattern expansion ↩︎

  5. python通配符之glob模块的使用详解 ↩︎

  6. python glob model 获取文件路径操作, 可使用正则表达式 ↩︎

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值