假面的假面 发表于 2021-8-16 23:05:20

遍历文件目录并查找相应的文件问题

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-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)

假面的假面 发表于 2021-8-18 00:15:41

大马强 发表于 2021-8-17 07:47
你没有切换当前工作区

您测试过么?首先您的s变量写错了。这个逻辑好像也不对,假如我找的是一个文件目录的话好像也是会有问题的。

louxinghao 发表于 2021-8-18 00:32:52

os.path.join() 返回的结果路径是 D:\\ a\\b\\c 这种类型的反斜杠路径,你用split 拆分 / 斜杠,肯定找不到文件

你把第 9 行改成这样就找到了
elif path.split('\\')[-1] == target:#如果path不是一个目录,则判断该文件名是否等于传入的变量target,如果等于则打印[+]路径名称,否则打印[!]路径名称

大马强 发表于 2021-8-18 07:57:56

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

打扰了,粗心了

大马强 发表于 2021-8-18 08:08:27

本帖最后由 大马强 于 2021-8-18 08:20 编辑

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

我觉得其实可以不用join的
https://static01.imgkr.com/temp/5e7e6246320246c4b6a0f61069dc410d.jpg
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)

大马强 发表于 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)

假面的假面 发表于 2021-8-18 11:27:54

大马强 发表于 2021-8-18 08:08
我觉得其实可以不用join的

无论是文件还是文件夹还是无法找到我需要找的内容,目前只是把所有的文件,文件夹罗列出来是不是函数迭代调用上有问题。

大马强 发表于 2021-8-18 11:53:05

假面的假面 发表于 2021-8-18 11:27
无论是文件还是文件夹还是无法找到我需要找的内容,目前只是把所有的文件,文件夹罗列出来是不是函数迭代 ...

这样算是找到了吗?
https://static01.imgkr.com/temp/79cbe9e568184b05aa9504154f75c5a4.jpg

假面的假面 发表于 2021-8-18 13:59:17

大马强 发表于 2021-8-18 11:53
这样算是找到了吗?

找是找到了。不过您把我的显示目录文件名给切掉了。我之所以那么变成是想要显示绝对路径。{:5_106:}

大马强 发表于 2021-8-18 14:36:14

啊这{:10_266:}

大马强 发表于 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)

假面的假面 发表于 2021-8-18 15:00:56

大马强 发表于 2021-8-18 14:46
那就用这个

看你这一遍一遍的怪累的。。。。你这程序没跑一遍测试吧?因为有函数迭代的关系join永远连接的是当前目录和上一级目录,所以还是存在问题的。os.path.abspath()函数了解一下。非常感谢您的耐心解答。

大马强 发表于 2021-8-18 15:11:26

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

啊这
https://static01.imgkr.com/temp/6e27183626ca4c6abb8ecbd59d6384ff.jpg
这还不满足你的要求?{:10_266:}
原来还有这个函数 os.path.abspath(){:10_297:}

假面的假面 发表于 2021-8-18 17:13:27

大马强 发表于 2021-8-18 15:11
啊这

这还不满足你的要求?


{:5_96:}我错了。满足了满足了。是我没读懂path = os.path.join(os.getcwd(), item) 的意思。。。。抱歉抱歉

大马强 发表于 2021-8-18 17:19:36

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

233,没事没事,刚好get一个新函数
页: [1]
查看完整版本: 遍历文件目录并查找相应的文件问题