是否可以在同时循环浏览多个目录时附加到不同的列表?我的代码:
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的链,但没有运气,任何暗示?
答案 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
,因为它与内置名称混淆。这里没有任何伤害,因为它是一个局部变量。