python - 遍历字典,做同样的事情,如何优化?
问题描述
我有一个文件字典,其结构如下所示
+-- folder1
| +-- folder2
| +--A.py
| +--A.txt
| +-- folder3
| +--folder4
| +--B.py
| +--B.txt
| +-- C.py
| +-- C.txt
我想知道的是找到其中的所有.py
文件folder1
并写入其连接的相对路径_
。例如,B.py
可以是folder1_folder3_folder4_B.py
。这就是我所做的。
import os
file_list = os.listdir(folder1)
for file in file_list:
if len(file.split('.')) ==1 and file.split('.')[-1]=='py': # C.py
print(folder1 + file)
elif len(file.split('.')) ==1 and file.split('.')[-1]!='py': # C.txt
pass
else:
file1_list = os.listdir(file):
for file1 in file1_list:
if len(file1.split('.')) ==1 and file1.split('.')[-1]=='py': # A.py
print(folder1 + file + file1)
elif len(file1.split('.')) ==1 and file1.split('.')[-1]!='py': # A.txt
pass
else:
file2_list = os.listdir(file1):
for file2 in file2_list:
if len(file2.split('.')) ==1 and file2.split('.')[-1]=='py': # B.py
print(folder1 + file + file1 + file2)
elif len(file2.split('.')) ==1 and file2.split('.')[-1]!='py': # B.txt
pass
else:
pass # Actually I dont know how to write
有两个缺点:
(1) 我不知道什么时候停止for
循环,虽然我可以得到最大深度folder1
(2)for
循环有这么多重复操作,显然是可以优化的。
有人有好的答案吗?
解决方案
您想使用递归,这是一个调用自身的函数的花哨名称。编写一个将文件夹名称作为参数的函数。它应该运行 os.listdir() 并循环遍历结果,就像你正在做的那样。当您到达子文件夹时,只需再次运行该功能!
另外,查看 .endswith() 函数,它比所有拆分都容易。你可以问问if file.endswith('.py')
。
推荐阅读
- android - 在android中更新或插入数据库
- amazon-web-services - AWS Cloudfront 失效与 OriginPath
- javafx - JavaFX 动态表单字段 UI
- python - 用于捕获当前帧并杀死过去帧的 Python 代码。
- javascript - 重新加载后使用 jQuery,我的整个网站向左移动,看起来很糟糕
- javascript - 如何在此电子邮件验证正则表达式中添加对 +(加号)的支持?
- scroll - 没有滚动条的 flex 滚动
- linux - 从文件中删除所有附加扩展名
- python - 如何安装python模块
- excel - 检查单元格是否包含除 az 以外的其他字符;0-9