首页 > 解决方案 > 遍历字典,做同样的事情,如何优化?

问题描述

我有一个文件字典,其结构如下所示

+-- 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循环有这么多重复操作,显然是可以优化的。

有人有好的答案吗?

标签: pythonfor-looplistdir

解决方案


您想使用递归,这是一个调用自身的函数的花哨名称。编写一个将文件夹名称作为参数的函数。它应该运行 os.listdir() 并循环遍历结果,就像你正在做的那样。当您到达子文件夹时,只需再次运行该功能!

另外,查看 .endswith() 函数,它比所有拆分都容易。你可以问问if file.endswith('.py')


推荐阅读