本帖最后由 status 于 2017-8-1 23:34 编辑
楼主在吗?你这个问题解决了没?没解决的话看下我的,我今天无聊翻帖子看到你的问题,然后把你的问题找到了
首先我稍微的调整了下你的代码位置,然后代码:
- import os
- f=open(vedioList.txt','w')
- list_move = ['.mp4', '.rmvb', '.avi']
- def find_move(direcorty):
- '''
- 输入文件夹,找到文件夹内所有后缀为list_move中的文件。
- 如果文件夹内包含文件夹,则层级递归遍历所有.
- '''
- os.chdir(directory) #这个参数和上面函数的参数拼写不一样
- print(os.getcwd())
- for each in os.listdir(os.curdir):
- if os.path.isdir(each):
- #each_1 = directory + '\\' + each 这两部多余
- #os.chdir(each_1)
- find_move(each)#遇到文件夹递归遍历所有文件夹内文件
- os.chdir(os.pardir)
- if os.path.splitext(each)[1] in list_move:
- f.write(os.getcwd()+os.sep+each+os.linesep)
- directory = input('请输入查找范围(路径):')
- find_move(directory)
- f.close()
- print('suessed')#这里只是做程序运行完成后的提示
复制代码
然后测试输出依然报错:
- Traceback (most recent call last):
- File "C:/Users/Administrator/Desktop/1.py", line 15, in <module>
- find_move(directory)
- File "C:/Users/Administrator/Desktop/1.py", line 9, in find_move
- find_move(each)#遇到文件夹递归遍历所有文件夹内文件
- File "C:/Users/Administrator/Desktop/1.py", line 9, in find_move
- find_move(each)#遇到文件夹递归遍历所有文件夹内文件
- File "C:/Users/Administrator/Desktop/1.py", line 9, in find_move
- find_move(each)#遇到文件夹递归遍历所有文件夹内文件
- [Previous line repeated 987 more times]
- File "C:/Users/Administrator/Desktop/1.py", line 11, in find_move
- if os.path.splitext(each)[1] in ['.mp4','.rmvb','.avi']:
- File "C:\Program Files\Python36\lib\ntpath.py", line 227, in splitext
- return genericpath._splitext(p, '\\', '/', '.')
- File "C:\Program Files\Python36\lib\genericpath.py", line 127, in _splitext
- sepIndex = max(sepIndex, altsepIndex)
- RecursionError: maximum recursion depth exceeded in comparison
复制代码
楼上那朋友给你的代码也只是把递归的默认深度改了,但因为是一直循环下去的,所以没有根本解决
但是看了很多遍语法逻辑都没问题,还是报错,不过我还是终于找到了关键问题:
- def find_move(direcorty):#这里
- os.chdir(directory) #这个参数和上面函数的参数拼写不一样
复制代码
其实传进的参数不一样,一般来说是没问题的,但是交互输入时给directory赋值了,也就是输入路径时赋值了,好,print一下看到底是多少,我先给directory赋值为:F:\movies,然后在os.chdir(directory)下一行加入print(os.getcwd()),结果:请输入查找范围(路径):F:\movies
F:\movies
F:\movies
F:\movies
F:\movies
F:\movies
F:\movies
F:\movies
F:\movies
F:\movies
F:\movies
F:\movies
F:\movies
F:\movies
F:\movies
F:\movies
F:\movies
F:\movies
F:\movies
有很长……
我就把它终止了,也就是说,定义函数时参数名和传进参数名不一样是可以的,然后关键就是我们这个程序需要交互赋值并传入参数,而上面结果看出,我们的当前目录永远是我们交互赋值进去的路径,也就是说函数递归永远在一个目录下,遍历进去子目录,os.pardir又回到上一目录也就是【F:\movies】了,然后就这样永远无限循环,进而整个程序无限循环到默认深度停止。
好,我把两个参数名改为相同的,同时print下每次递归的当前目录:
- def find_move(directory):#这里
- os.chdir(directory) #现在这两个参数一样了
- print(os.getcwd())
- (其他没变)
复制代码
结果:请输入查找范围(路径):F:\movies
F:\movies
F:\movies\电影
suessed
没有任何报错,完美结束,好打开文件并对照路径看看:
F:\movies\谍影重重4.720p.BD中英双字幕.rmvb
F:\movies\谍影重重-cd1.rmvb
F:\movies\谍影重重-cd2.rmvb
F:\movies\谍影重重2-cd1.rmvb
F:\movies\谍影重重2-cd2.rmvb
F:\movies\谍影重重3-cd1.rmvb
F:\movies\谍影重重3-cd2.rmvb
F:\movies\攻壳机动队:崛起2_bd.mp4
F:\movies\攻壳机动队:崛起3_bd.mp4
F:\movies\攻壳机动队:崛起4_bd.mp4
F:\movies\电影\生h危机:f仇_bd.mp4
F:\movies\谍影重重5.mp4
F:\movies\追逐繁星的孩子_bd.mp4
没有问题,也没有重复,由于不能上传图片,就没法给大家对照了,我自己看了是没有遗漏的
答案有点冗长,我只是想把我推理排出错的整个过程展现出来,我不知道我说清楚没有,希望你能理解