本文说明如何利用 Python
和 正则表达式对文件路径进行处理。
更新:2023 / 06 / 11
通配符是一些特殊符号,主要有 *
星号 和 ?
问号,用来模糊搜索文件,*
可以匹配任意个数个符号,?
可以匹配单个字符。
当查找文件夹时,可以使用它来代替一个或多个真正字符。当不知道真正字符或者需要匹配符合一定条件的多个目标文件时,可以使用通配符代替一个或多个真正的字符。
英文 globbing
意为通配,glob
是 python
自带的一个文件操作相关模块,可以用于查找符合自己目的的文件,就类似于 windows
下的文件搜索,其接受通配模式作为输入,并返回所有匹配的文件名和路径名列表。
与 os.listdir
类似。
glob.glob(pathname, *, root_dir=None, dir_fd=None, recursive=False, include_hidden=False)
参数 | 描述 |
---|---|
pathname |
其为需要匹配的字符串 1’ 2’ 3(该参数应尽量加上 r 后缀,以免发生不必要的错误)。 |
recursive |
代表递归调用,与特殊通配符 ** 一同使用,默认为 False 。 |
该函数返回一个符合条件的路径的字符串列表。如果使用的是 Windows
系统,路径上的 \
符号会自动加上转义符号变为 \\
4。
glob
模块支持的通配符 5:
通配符 | 功能 |
---|---|
* |
匹配 0 或多个字符。 |
** |
匹配所有文件、目录、子目录和子目录里的文件。 |
? |
匹配 1 个字符,与正则表达式里的 ? 不同 |
[exp] |
匹配指定范围内的字符,如 [1-9] 匹配 1 至 9 范围内的字符。 |
[!exp] |
匹配不在指定范围内的字符。 |
iglob(pathname, recursive=False)
参数与 glob()
一致。
返回一个迭代器,该迭代器不会同时保存所有匹配到的路径,而是逐个获取匹配的文件路径。
遍历该迭代器的结果与使用相同参数调用 glob()
的返回结果一致。
以下是一个简要地例子用以说明其用法 6,
f = glob.iglob(r'../*.py')
print(f)
#
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
方法是一个简单易用的文件、目录遍历器,可以帮助我们高效地处理文件、目录方面的事情。
在 Unix
、Windows
中有效。
os.walk(top[, topdown=True[, oneerror=None[,followlinks=False]]])
参数 | 说明 |
---|---|
top |
后接所需遍历的目录的地址,返回的是一个三元组(root ,dirs ,files )。root 所指的是当前正在遍历的这个文件夹的本身的地址。dirs 是一个 list ,内容是该文件夹中所有的目录的名字(不包括子目录)。files 同样是 list ,内容是该文件夹中所有的文件(不包括子目录)。 |
topdown |
可选,为 True ,则优先遍历 top 目录,否则优先遍历 top 的子目录(默认为开启)。如果 topdown 参数为 True ,walk 会遍历 top 文件夹,与 top 文件夹中每一个子目录。 |
oneerror |
可选,需要一个 callable 对象,当 walk 需要异常时,会调用。 |
followlinks |
可选,如果为 True ,则会遍历目录下的快捷方式( linux 下是软链接 symbolic )实际所指的目录(默认关闭),如果为 False ,则优先遍历 top 的子目录。 |
该方法没有返回值。
如果要输出指定目录 dir
下的所有信息,并将 .py
结尾的文件输出到指定的文件 output
中 3,
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')
【python】使用正则匹配判断字符串中含有某些特定子串 及 正则表达式详解 ↩︎
文件路径 正则表达式 ↩︎
Python 的正则操作与获取指定目录下的文件 ↩︎ ↩︎
glob — Unix style pathname pattern expansion ↩︎
python通配符之glob模块的使用详解 ↩︎
python glob model 获取文件路径操作, 可使用正则表达式 ↩︎