排除Python3中的某些目录

时间:2016-11-21 17:25:27

标签: python python-3.x

我已经(非常简单地)将一个Python脚本从Windows移植到Linux(主要是目录更改),我想为它添加一些新功能。 该脚本用于更新游戏服务器上的mod。所有mod都位于ShooterGame / Content / Mods /中。默认包含一些mod(TheCenter和11111111) - 每个其他mod与默认文件位于同一文件夹中,但名称由随机数组成。

我一直试图排除2个默认目录,然后构建ShooterGame / Content / Mods /文件夹的内容列表,但我没有这样做。 这是我尝试用来排除TheCenter文件夹的代码:

def build_list_of_mods(self):
    """
    Build a list of all installed mods by grabbing all directory names from the mod folder
    :return:
    """
    exclude = ["TheCenter"]
    if not os.path.isdir(os.path.join(self.working_dir, "ShooterGame/Content/Mods/")):
        return
    for curdir, dirs, files in os.walk(os.path.join(self.working_dir, "ShooterGame/Content/Mods/")):
        for d in dirs:
            dirs[:] = [d for d in dirs if d not in exclude]
            self.installed_mods.append(d)
        break

遗憾的是,它没有用。我错过了什么或者做错了吗?

2 个答案:

答案 0 :(得分:0)

尝试将topdown=True添加到os.walk()函数中,如下所示:

for curdir, dirs, files in os.walk(os.path.join(self.working_dir, "ShooterGame/Content/Mods/"), topdown=True):

另外我无法尝试,但可能dirs[:]应该在 for-loop 之外,正如文档所说:

  

当topdown为true时,调用者可以就地修改dirnames列表(例如,通过del或slice赋值),walk只会递归到名称保留在dirnames中的子目录中;

答案 1 :(得分:0)

我假设您希望self.installed_mods包含dirs的值而不包含exclude的值。 您只需使用dirs.remove()的值调用exclude,然后将dirs的内容附加到self.installed_mods即可。 或者以较短的方式:self.installed_mods.extend([dir for dir in dirs if dir not in exclude])