如何获得所需的两条路径



在这段代码中,我从父目录中打印一个选定的子目录。我做了一个函数。

  1. 这个函数listdirs()是根据给定的索引调用特定的子目录

但是当我调用这个函数两次时,它会给我两次相同的路径。

给定结果

Directory1: /home/bilal/Videos/folder1/fd
Directory2: /home/bilal/Videos/folder1/fd

预期结果

Directory1: /home/bilal/Videos/folder1/fd
Directory2: /home/bilal/Videos/folder2/fd

代码

import os    

subDir = []
def listdirs(path, which_dir):
for roots, dirs, files in os.walk(path):
for dir in dirs:
d = os.path.join(roots, dir)
subDir.append(d)
b = [s.split() for s in subDir]
letme = b[which_dir]
run = [str(i) for i in letme]  
result = "".join(run)           # Removing the []
return result
rootdir1 = '/home/bilal/Videos/folder1'
directory1 = listdirs(rootdir1, 2)
print(f"Directory1: {directory1}")
rootdir2 = '/home/bilal/Videos/folder2'
directory2 = listdirs(rootdir2, 2)
print(f"Directory2: {directory2}")

简短回答

您应该在函数listdirs中定义subDir = [],然后再进行for循环。

长答案

subDir是一个list,在Python中,它是一个可变对象。这意味着变量subDir所指向的对象可以更改。每次在listdirs中追加到subDir时,都是在追加到原始对象。因此,每次尝试从subDirs获取第二个目录时,都会获得第一次运行listdirs时添加到其中的第二个相同目录。

避免全局可变变量是个好主意,除非你确切地知道它们会发生什么。

此外,我认为你的功能可以简化一点:

def listdirs(path, which_dir):
subdirs = []
for roots, dirs, files in os.walk(path):
for dir in dirs:
d = os.path.join(roots, dir)
subdirs.append(d)
result = subdirs[which_dir]
return result

最新更新