Python获取某个目录下所有文件名中含有某个字符的文件绝对路径

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目录进行组合

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值