Python,循环时附加到不同的列表

时间:2015-10-25 18:17:25

标签: python file os.walk

是否可以在同时循环浏览多个目录时附加到不同的列表?我的代码:

def trav(dir_1, dir_2):
    data_0= []
    data_1 = []
    for dir in [dir_1, dir_2]:
        for path, dirs, files in os.walk(dir):
             for file in files:
                 for line in file:
                      data_0.append(line)

如何从dir_1添加行 - > data_0和appand dir_2 - > data_1使用一个循环,我知道我可以编写两个单独的方法,但想知道是否有更高效,更简单的方法。我尝试使用来自itertools的链,但没有运气,任何暗示?

2 个答案:

答案 0 :(得分:2)

如果您不想要两个循环,那么您可以简单地执行if

def trav(dir_1, dir_2):
    data_0 = []
    data_1 = []
    for dir in [dir_1, dir_2]:
        current_dir = dir
        for path, dirs, files in os.walk(dir):
             for file in files:
                 for line in file:
                      if current_dir == dir_1:
                          data_0.append(line)
                      else:
                          data_1.append(line)

另一种方式可能是:

def trav(dir_1, dir_2):
    data_0 = []
    data_1 = []
    for dir in [dir_1, dir_2]:
        if dir == dir_1:
            data = data_0
        else:
            data = data_1
        for path, dirs, files in os.walk(dir):
             for file in files:
                 for line in file:
                     data.append(line)

第二个将比第一个运行得更快,因为所需的比较次数会更少。

答案 1 :(得分:2)

嗯,你可以把数据作为dict:

def trav(dir_1, dir_2):
    data = {}
    data[dir_1] = []
    data[dir_2] = []
    for dir in [dir_1, dir_2]:
        for path, dirs, files in os.walk(dir):
             for file in files:
                 for line in file:
                      data[dir].append(line)

或者您可以将数据设为collections.defaultdict(list)。那么你就不必将条目初始化为空列表。另外,我建议您不要使用名称dir,因为它与内置名称混淆。这里没有任何伤害,因为它是一个局部变量。