鱼C论坛

 找回密码
 立即注册
查看: 2035|回复: 9

[已解决]遍历文件目录并查找相应的文件问题

[复制链接]
发表于 2021-8-16 23:05:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import os
def search(root, target): #传入两个变量
    items = os.listdir(root)#把root目录下的所有目录及文件存入一个列表
    for item in items:#遍历该目录下所有的文件及文件夹
        path = os.path.join(root, item)#把传入的路径及其下面的文件名合成一个路径
        if os.path.isdir(path):#判断合成的路径是否为一个目录如果是则打印[-]路径然后再次调用该函数
            print('[目录]', path)
            search(path, target)
        elif path.split('/')[-1] == target:#如果path不是一个目录,则判断该文件名是否等于传入的变量target,如果等于则打印[+]路径名称,否则打印[!]路径名称
            print('[++++++++++++++++++++++++++++++++++++++++++]', path)
        else:
            print('[文件]', path)

找不到需要target的文件。。。。不知道是哪里出现了问题。。。。求助大神。
最佳答案
2021-8-18 11:53:05
假面的假面 发表于 2021-8-18 11:27
无论是文件还是文件夹还是无法找到我需要找的内容,目前只是把所有的文件,文件夹罗列出来是不是函数迭代 ...

这样算是找到了吗?

                               
登录/注册后可看大图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-8-17 07:47:11 | 显示全部楼层
你没有切换当前工作区
def search(root, target): #传入两个变量
    os.chdir(root)
    items = os.listdir(root)#把root目录下的所有目录及文件存入一个列表
    for item in items:#遍历该目录下所有的文件及文件夹
        path = os.path.join(root, item)#把传入的路径及其下面的文件名合成一个路径
        if os.path.isdir(path):#判断合成的路径是否为一个目录如果是则打印[-]路径然后再次调用该函数
            print('[目录]', path)
            search(path, target)
            s.chdir(os.pardir)
        elif path.split('/')[-1] == target:#如果path不是一个目录,则判断该文件名是否等于传入的变量target,如果等于则打印[+]路径名称,否则打印[!]路径名称
            print('[++++++++++++++++++++++++++++++++++++++++++]', path)
        else:
            print('[文件]', path)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-18 00:15:41 | 显示全部楼层
大马强 发表于 2021-8-17 07:47
你没有切换当前工作区

您测试过么?首先您的s变量写错了。这个逻辑好像也不对,假如我找的是一个文件目录的话好像也是会有问题的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-18 00:32:52 | 显示全部楼层
os.path.join() 返回的结果路径是 D:\\ a\\b\\c 这种类型的反斜杠路径,你用split 拆分 / 斜杠,肯定找不到文件

你把第 9 行改成这样就找到了
elif path.split('\\')[-1] == target:#如果path不是一个目录,则判断该文件名是否等于传入的变量target,如果等于则打印[+]路径名称,否则打印[!]路径名称
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-18 07:57:56 | 显示全部楼层
假面的假面 发表于 2021-8-18 00:15
您测试过么?首先您的s变量写错了。这个逻辑好像也不对,假如我找的是一个文件目录的话好像也是会有问题的 ...

打扰了,粗心了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-18 08:08:27 | 显示全部楼层
本帖最后由 大马强 于 2021-8-18 08:20 编辑
假面的假面 发表于 2021-8-18 00:15
您测试过么?首先您的s变量写错了。这个逻辑好像也不对,假如我找的是一个文件目录的话好像也是会有问题的 ...


我觉得其实可以不用join的

                               
登录/注册后可看大图
def search(root, target):  # 传入两个变量
    os.chdir(root)  # 切换成当前工作区
    items = os.listdir(root)  # 把root目录下的所有目录及文件存入一个列表
    for item in items:  # 遍历该目录下所有的文件及文件夹
        path = os.path.join(root, item)  # 把传入的路径及其下面的文件名合成一个路径
        # print(path)
        if os.path.isdir(path):  # 判断合成的路径是否为一个目录如果是则打印[-]路径然后再次调用该函数
            print('[目录]', path)
            search(path, target)
            os.chdir(os.pardir)  # 切换回上层工作区
        # 如果path不是一个目录,则判断该文件名是否等于传入的变量target,如果等于则打印[+]路径名称,否则打印[!]路径名称
        elif path.split('/')[-1] == target:
            print('[++++++++++++++++++++++++++++++++++++++++++]', path)
        else:
            print('[文件]', path)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-18 08:19:05 | 显示全部楼层
def search(root, target):  # 传入两个变量
    os.chdir(root)
    # 把root目录下的所有目录及文件存入一个列表
    for item in os.listdir(os.curdir):  # 遍历该目录下所有的文件及文件夹
        # path = os.path.join(root, item)  # 把传入的路径及其下面的文件名合成一个路径
        # print(path)
        if os.path.isdir(item):
          # 判断合成的路径是否为一个目录如果是则打印[-]路径然后再次调用该函数
            print('[目录]', item)
            search(item, target)
            os.chdir(os.pardir)

            # 如果path不是一个目录,则判断该文件名是否等于传入的变量target,如果等于则打印[+]路径名称,否则打印[!]路径名称
        elif item.split('/')[-1] == target:
            print('[++++++++++++++++++++++++++++++++++++++++++]', item)
        else:
            print('[文件]', item)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-18 11:27:54 | 显示全部楼层
大马强 发表于 2021-8-18 08:08
我觉得其实可以不用join的

无论是文件还是文件夹还是无法找到我需要找的内容,目前只是把所有的文件,文件夹罗列出来是不是函数迭代调用上有问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-18 11:53:05 | 显示全部楼层    本楼为最佳答案   
假面的假面 发表于 2021-8-18 11:27
无论是文件还是文件夹还是无法找到我需要找的内容,目前只是把所有的文件,文件夹罗列出来是不是函数迭代 ...

这样算是找到了吗?

                               
登录/注册后可看大图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-18 13:59:17 | 显示全部楼层
大马强 发表于 2021-8-18 11:53
这样算是找到了吗?

找是找到了。不过您把我的显示目录文件名给切掉了。我之所以那么变成是想要显示绝对路径。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-18 14:36:14 | 显示全部楼层
啊这
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-8-18 14:46:30 | 显示全部楼层
假面的假面 发表于 2021-8-18 13:59
找是找到了。不过您把我的显示目录文件名给切掉了。我之所以那么变成是想要显示绝对路径。

那就用这个
def search(root, target):  # 传入两个变量
    os.chdir(root)
    # 把root目录下的所有目录及文件存入一个列表
    for item in os.listdir(os.curdir):  # 遍历该目录下所有的文件及文件夹
        path = os.path.join(os.getcwd(), item)  # 把传入的路径及其下面的文件名合成一个路径
        # print(path)
        if os.path.isdir(item):
          # 判断合成的路径是否为一个目录如果是则打印[-]路径然后再次调用该函数
            print('[目录]', path)
            search(item, target)
            os.chdir(os.pardir)

            # 如果path不是一个目录,则判断该文件名是否等于传入的变量target,如果等于则打印[+]路径名称,否则打印[!]路径名称
        elif item.split('/')[-1] == target:
            print('[++++++++++++++++++++++++++++++++++++++++++]', path)
        else:
            print('[文件]', path)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-18 15:00:56 | 显示全部楼层

看你这一遍一遍的怪累的。。。。你这程序没跑一遍测试吧?因为有函数迭代的关系join永远连接的是当前目录和上一级目录,所以还是存在问题的。os.path.abspath()函数了解一下。非常感谢您的耐心解答。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-18 15:11:26 | 显示全部楼层
假面的假面 发表于 2021-8-18 15:00
看你这一遍一遍的怪累的。。。。你这程序没跑一遍测试吧?因为有函数迭代的关系join永远连接的是当前目录 ...

啊这

                               
登录/注册后可看大图

这还不满足你的要求?
原来还有这个函数 os.path.abspath()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-18 17:13:27 | 显示全部楼层
大马强 发表于 2021-8-18 15:11
啊这

这还不满足你的要求?

我错了。满足了满足了。是我没读懂path = os.path.join(os.getcwd(), item) 的意思。。。。抱歉抱歉
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-18 17:19:36 | 显示全部楼层
假面的假面 发表于 2021-8-18 17:13
我错了。满足了满足了。是我没读懂path = os.path.join(os.getcwd(), item) 的意思。。。。抱歉 ...

233,没事没事,刚好get一个新函数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-28 04:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表