Python中迭代所有目录的有效方法

问题描述 投票:0回答:1

假设我们想要以下内容:

目录A包含目录B,目录B包含三个目录:C_one,C_two 我们想要组合 C_one、C_Two、C_ Three 中的列表(全部命名为“特征”)

我们想要

from A.B import C_one, C_two, C_three 
my_list = C_one.features + C_two.features + C_three.features

但是,这似乎有点低效,因为您必须手动指定要导入的内容

from A.B import C_one, C_two, C_three

来自 A.B 并且必须手动指定

C_one.features + C_two.features + C_three.features

有没有办法将这一点结合起来?喜欢

my_list = []
for directory in A.B:
    my_list.extend(A.B.directory.features)

任何帮助将不胜感激。谢谢。

python list directory
1个回答
0
投票

您可以使用 os 模块动态获取目录 B 中的子目录列表,然后导入并组合每个子目录中的功能。这是一个例子:

import os

# Assuming A.B is the path to directory B
directory_b_path = "A/B"

# Get a list of subdirectories in directory B
subdirectories = [d for d in os.listdir(directory_b_path) if os.path.isdir(os.path.join(directory_b_path, d))]

# Initialize an empty list to store the combined features
my_list = []

# Iterate through each subdirectory and combine features
for subdirectory in subdirectories:
    # Construct the import statement dynamically
    import_statement = f"from A.B.{subdirectory} import features"
    exec(import_statement)
    
    # Extend the my_list with the features from the current subdirectory
    my_list.extend(features)

# Now my_list contains the combined features from all subdirectories
print(my_list)

注意:使用exec动态执行import语句需谨慎,处理不当可能会带来安全风险。确保目录名称安全且不包含任何恶意代码。如果目录名称是用户输入的或来自不受信任的来源,建议进行额外的验证。

此外,此解决方案假设每个子目录中都存在 features 属性。根据您实际代码的结构相应调整代码。

© www.soinside.com 2019 - 2024. All rights reserved.