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目录进行组合
————————————————
版权声明:本文为CSDN博主「咖喱盖盖」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/glumduke/article/details/105511473

posted @   vetra  阅读(1165)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)

阅读目录(Content)

此页目录为空

点击右上角即可分享
微信分享提示