zhujuf 发表于 2020-4-26 14:15:13

求帮忙

编写一个程序,用户输入开始搜索的路径,查找该路径下(包含子文件夹内)所有的视频格式文件(要求查找mp4 rmvb, avi的格式即可),并把创建一个文件(vedioList.txt)存放所有找到的文件的路径,程序实现如图:

import os

m=input("输入目录:")

def find(x):
   
    os.chdir(x)
    y=os.getcwd()
    n=os.listdir(x)
    for each in n:
      if os.path.isfile(each)==True:
            kuozhan=each.split(".")
            if kuozhan in ["avi","mp4"]:
                list.append(os.getcwd()+os.sep+each)
      if os.path.isdir(each)==True:
            return find(os.path.join(y,each))
            os.chdir(os.pardir("."))
    print(list)
list=[]
find(m)

总是只找到最里面一层文件

hrp 发表于 2020-4-26 14:15:14

zhujuf 发表于 2020-4-26 15:07
试了下 把红色那个return去掉就成了,。。。但是想不通为什么
import os



主要错在 os.chdir(os.pardir) 缩进错误,还有里面的 os.pardir 你写成了函数调用,实际上它不是函数。
还有 你用 list 做变量名跟内置 list 类重名了,会出问题。
其他都是小问题

hrp 发表于 2020-4-26 14:40:38

本帖最后由 hrp 于 2020-4-26 14:42 编辑

import os

m = input("输入目录:")

def find(x):
    try:
      os.chdir(x)
      n = os.listdir(x)
      for each in n:
            if os.path.isfile(each):
                kuozhan = os.path.splitext(each)
                if kuozhan in [".avi", ".mp4"]:
                  listf.append(x + os.sep + each)
            elif os.path.isdir(each):
                find(os.path.join(x, each))
      os.chdir(os.pardir)
    except:
      pass

listf = []
find(m)
print(listf)

zhujuf 发表于 2020-4-26 14:57:59

hrp 发表于 2020-4-26 14:40


我这个哪里有逻辑错误啊。总是输出最后一层

zhujuf 发表于 2020-4-26 15:07:33

hrp 发表于 2020-4-26 14:40


试了下 把红色那个return去掉就成了,。。。但是想不通为什么
import os

m=input("输入目录:")

def find(x):   
    os.chdir(x)
    n=os.listdir(x)
    for each in n:
      if os.path.isfile(each)==True:
            kuozhan=each.split(".")
            if kuozhan in ["avi","mp4"]:
                listf.append(x+os.sep+each)
      elif os.path.isdir(each)==True:
          return find(os.path.join(x,each))
    os.chdir(os.pardir)

listf=[]
find(m)
print(listf)
页: [1]
查看完整版本: 求帮忙