|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 宫保鸡丁丁 于 2017-10-3 19:18 编辑
目的:将文件夹和子文件夹的所有txt文件用字典收集起来.相对路径(也就是文件的位置)作为键,txt文件作为值.键可以对应多个值,实现在当前文件夹搜索多个txt文件
源代码:
- def f(path,txt):
- for each in os.listdir(os.curdir):
- (name,extension) = os.path.splitext(each)
- if extension == '.txt':
- if path not in txt:txt[path] = []
- txt[path].append(each) #将相对路径作为键,txt文件名作为值
- if os.path.isdir(each):
- f(os.path.join(path,each),txt)
- os.chdir(os.pardir) #返回上目录
- path = os.getcwd()
- txt = dict()
- f(path,txt)
复制代码
错误提示:RecursionError: maximum recursion depth exceeded in comparison
程序如上所示,接下来我的问题是:
if os.path.isdir(each):
f(os.path.join(path,each),txt)
os.chdir(os.pardir) #返回上目录
我将上面这段删除时,当前文件夹中的txt文件可以收集到.但是进行递归要搜索子文件夹,添加了上面那段程序后却发现有了错误.错误原因是最大递归深度超过了比较,我不明白.
请求各位大神解解惑
- import os
- def f(path, txt):
- for each in os.listdir(path):
- each = os.path.join(path,each)
- (name,extension) = os.path.splitext(each)
- if extension == '.txt':
- print(each)
- if os.path.isdir(each):
- f(os.path.join(path,each), txt)
- def ff(path, txt):
- for each in os.listdir(os.curdir):
- (name,extension) = os.path.splitext(each)
- if extension == '.txt':
- print(each)
- if os.path.isdir(each):
- os.chdir(os.path.join(os.curdir,each))
- ff(os.path.join(os.curdir,each), txt)
- os.chdir(os.pardir)
-
- path = os.getcwd()
- txt = dict()
- f(path, txt)
- print('============')
- ff(path, txt)
复制代码
我想你应该是path 和os.curdir 混合着用了。你用for each in os.listdir(os.curdir)遍历当前目录下的所有文件,但是你调用函数的时候并没有改变当前的目录。这是我修改后的,你可以看看哈~
|
|