在这段代码中,我从父目录中打印一个选定的子目录。我做了一个函数。
- 这个函数
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