本文说明如何利用 Python
和 正则表达式轮询指定文件夹获取文件路径。
更新:2023 / 07 / 09
python | 巧用正则表达式:实践 - 对文件路径的处理
- glob
- 概念
- 语法
- glob.glob
- glob.iglob
- 示例
- *
- **
- ?
- os.walk
- 概念
- 语法
- 示例
- 参考链接
通配符是一些特殊符号,主要有 *
星号 和 ?
问号,用来模糊搜索文件,*
可以匹配任意个数个符号,?
可以匹配单个字符。
当查找文件夹时,可以使用它来代替一个或多个真正字符。当不知道真正字符或者需要匹配符合一定条件的多个目标文件时,可以使用通配符代替一个或多个真正的字符。
glob
概念
英文 globbing
意为通配,glob
是 python
自带的一个文件操作相关模块,可以用于查找符合自己目的的文件,就类似于 windows
下的文件搜索,其接受通配模式作为输入,并返回所有匹配的文件名和路径名列表。
与 os.listdir
类似。
语法
glob.glob
glob.glob(pathname, *, root_dir=None, dir_fd=None, recursive=False, include_hidden=False)
参数 | 描述 |
| 其为需要匹配的字符串 1’ 2’ 3(该参数应尽量加上 |
| 代表递归调用,与特殊通配符 |
该函数返回一个符合条件的路径的字符串列表。如果使用的是 Windows
系统,路径上的 \
符号会自动加上转义符号变为 \\
4。
glob
模块支持的通配符 5:
通配符 | 功能 |
| 匹配 |
| 匹配所有文件、目录、子目录和子目录里的文件。 |
| 匹配 |
| 匹配指定范围内的字符,如 |
| 匹配不在指定范围内的字符。 |
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
方法是一个简单易用的文件、目录遍历器,可以帮助我们高效地处理文件、目录方面的事情。
在 Unix
、Windows
中有效。
语法
os.walk(top[, topdown=True[, oneerror=None[,followlinks=False]]])
参数 | 说明 |
| 后接所需遍历的目录的地址,返回的是一个三元组(
|
| 可选,为 |
| 可选,需要一个 |
| 可选,如果为 |
该方法没有返回值。
示例
如果要输出指定目录 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 的正则操作与获取指定目录下的文件 ↩︎ ↩︎
- glob — Unix style pathname pattern expansion ↩︎
- python glob model 获取文件路径操作, 可使用正则表达式 ↩︎