本文说明如何利用 Python
和 正则表达式轮询指定文件夹获取文件路径。
更新:2023 / 07 / 09
通配符是一些特殊符号,主要有 *
星号 和 ?
问号,用来模糊搜索文件,*
可以匹配任意个数个符号,?
可以匹配单个字符。
当查找文件夹时,可以使用它来代替一个或多个真正字符。当不知道真正字符或者需要匹配符合一定条件的多个目标文件时,可以使用通配符代替一个或多个真正的字符。
glob
概念
英文 globbing
意为通配,glob
是 python
自带的一个文件操作相关模块,可以用于查找符合自己目的的文件,就类似于 windows
下的文件搜索,其接受通配模式作为输入,并返回所有匹配的文件名和路径名列表。
与 os.listdir
类似。
语法
glob.glob
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] | 匹配不在指定范围内的字符。 |
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]]])
参数 | 说明 |
---|---|
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')