本帖最后由 txxcat 于 2020-4-14 17:52 编辑
先说几个明显得错误:import os
ext = ['.mp4','.rmvb','.avi']
def search_video(file_path):
allfiles = os.listdir(file_path)
for eachfile in allfiles:
if os.path.splitext(eachfile)[1] in ext:
f = open('videolist.txt','w') #用w打开文件都会覆盖掉老文件,而且,没有绝对路径名,在每个符合条件的目录下都生成一个文件,乱!
f.write(str(os.path.dirname(eachfile) + '\\' +str(os.path.basename(eachfile))))
f.close()
if os.path.isfile(eachfile): #不该是os.path.isdir ???
search_video(eachfile)
os.chdir(os.pardir) #之前又没有chdir,现在chdir,混乱了
filepath = input('路径:')
search_video(filepath)
再修正一下代码:import os
ext = ['.mp4','.rmvb','.avi']
def search_video(file_path):
allfiles = os.listdir('.') #已在目标目录,涉及到递归调用,不能使用目录名
for eachfile in allfiles:
if os.path.splitext(eachfile)[1] in ext:
f = open(cdir+'\\'+'videolist.txt','a') #要使用绝对路径名
f.write(os.getcwd() + '\\' +str(os.path.basename(eachfile))+'\n') #os.getcwd()才能获取完整的路径
f.close()
if os.path.isdir(eachfile):
os.chdir(eachfile) #转到新的目标目录
search_video(eachfile) #递归调用
os.chdir(os.pardir) #回到上一级目录
filepath = input('路径:')
cdir=os.getcwd() #记录工作目录
os.chdir(filepath) #去到目标目录
search_video(filepath)
os.chdir(cdir) #回到工作目录
代码是可以跑了,不过还有些不合理的地方,比如你每发现一个视频文件,就打开一次写入再关闭,动作频繁,应该程序开始就打开,然后发现写入,程序结束时关闭才合理:def search_video(file_path):
allfiles = os.listdir('.')
for eachfile in allfiles:
if os.path.splitext(eachfile)[1] in ext:
f.write(os.getcwd() + '\\' +str(os.path.basename(eachfile))+'\n')
if os.path.isdir(eachfile):
os.chdir(eachfile)
search_video(eachfile)
os.chdir(os.pardir)
import os
ext = ['.mp4','.rmvb','.avi']
f = open('videolist.txt','w') #这回可以用w,保证每次写入的是新数据
filepath = input('路径:')
cdir=os.getcwd()
os.chdir(filepath)
search_video(filepath)
os.chdir(cdir)
f.close()
|