Python获取某个目录下所有文件名中含有某个字符的文件绝对路径,有点像Linux下面的find命令
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os
path = 'E:\\PythonScripts'
s = 'a'
for filewalks in os.walk(path):
for files in filewalks[2]:
#print('true files',files)
if s in files:
print(s,' is in',os.path.join(filewalks[0],files))
输出结果为
a is in E:\PythonScripts\edditableparam.py
a is in E:\PythonScripts\minandmax.py
a is in E:\PythonScripts\raise.py
a is in E:\PythonScripts\xfangcheeng.py
a is in E:\PythonScripts\.idea\rGraphicsSettings.xml
a is in E:\PythonScripts\.idea\workspace.xml
a is in E:\PythonScripts\.vscode\launch.json
a is in E:\PythonScripts\12\a.dat
a is in E:\PythonScripts\12\a.txt.txt
关于这个脚本,两个问题需要搞清楚:
os.walk(path)
os.walk() 方法可以创建一个生成器,用以生成所要查找的目录及其子目录下的所有文件。
我们将os.walk方法的输出拿出来看,如下:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os
path = 'E:\\PythonScripts'
s = 'a'
for filewalks in os.walk(path):
print(filewalks)
生成器的输出为返回的是一个三元组(root,dirs,files),root表示当前目录,dir为当前root目录下的文件夹,files为当前root目录下的文件
上述输出为
('E:\\PythonScripts', ['.idea', '.vscode', '12'], ['edditableparam.py', 'fileopen.py', 'list-l.py', 'lowerstr.py', 'minandmax.py', 'raise.py', 'recursion.py', 'test.py', 'Untitled-1.c', 'use.py', 'xfangcheeng.py'])
('E:\\PythonScripts\\.idea', ['inspectionProfiles'], ['misc.xml', 'modules.xml', 'other.xml', 'PythonScripts.iml', 'rGraphicsSettings.xml', 'rSettings.xml', 'workspace.xml'])
('E:\\PythonScripts\\.idea\\inspectionProfiles', [], ['profiles_settings.xml'])
('E:\\PythonScripts\\.vscode', [], ['launch.json'])
('E:\\PythonScripts\\12', [], ['a.dat', 'a.txt.txt'])
每调用一次,目录就会深一次,直到目录 到底。更详细的使用说明见os.walk使用说明
os.path.join(path,files)
os.path.join(path,files)将path和files结合,输出文件files的绝对路径。
这个地方如果直接调用os.path.abspath(files)输出的结果为
a is in d:\Python-Scripts\edditableparam.py
a is in d:\Python-Scripts\minandmax.py
a is in d:\Python-Scripts\raise.py
a is in d:\Python-Scripts\xfangcheeng.py
a is in d:\Python-Scripts\rGraphicsSettings.xml
a is in d:\Python-Scripts\workspace.xml
a is in d:\Python-Scripts\launch.json
a is in d:\Python-Scripts\a.dat
a is in d:\Python-Scripts\a.txt.txt
这个输出是错误的,个人理解为os.path.abspath(files)其实相当于os.path.join(‘当前工作目录’,files),此时脚本运行与 d:\Python-Scripts\,所以当前目录为 d:\Python-Scripts\,与文件名结合之后就变成了上述的错误输出,所以这里利用了os.walk(path)返回数组的第一项的root目录进行组合