Python:Changing if 语句末尾的路径

Python:Changing path at the end of if statement

我的图形用户界面目前有一个组合框,可以选择四个不同的文件位置。选择该目录中的每个文件后,将显示在列表框中:

def ComboBox(self, event):
    current = self.buttonChoice.current()

    if (current == 0):
        self.lb.delete(0, END)
        for i in range(0, length1):
            self.lb.insert(END, self.files1[i])

    elif (current == 1):
        self.lb.delete(0, END)
        sys.path.insert(0, sys.path[0]+ "\folder1")
        for i in range(0, length2):
             self.lb.insert(END, self.files2[i])


    elif (current == 2):
        self.lb.delete(0, END)
        sys.path.insert(0, sys.path[0]+ "\folder2")
        for i in range(0, length3):
            self.lb.insert(END, self.files2[i])


    elif (current == 3):
        self.lb.delete(0, END)
        sys.path.insert(0, sys.path[0]+ "\folder3")
        for i in range(0, length4):
            self.lb.insert(END, self.files4[i])

但是我的路径不是最优的,因为该函数不会 return 到父目录,而是停留在该文件夹中(例如,如果 current==1,该目录将在 ...\folder1 中)。为了让它工作,我需要在每条语句的末尾向下移动一个目录。我查看了相关问题并遇到了 os.chdir('..')。出于某种原因,我在实施时遇到了麻烦。关于如何在每个语句末尾向下移动一个目录的任何想法。

确实你应该使用 os.chdir 而不是 sys.path.insert

为了给您一个完整的答案,需要查看您的 class 的其余部分。更具体地说,必须知道 self.lbself.files 中的内容以及填充它的逻辑。

这个怎么样?

example_dir = r'C:\Users\****\Desktop\PythonScripts\ResidualCreation'

def move_back_dir(a_dir, steps=1):
    return '\'.join(a_dir.split('\')[:-steps])

print(move_back_dir(example_dir))     # -> C:\Users\****\Desktop\PythonScripts
print(move_back_dir(example_dir, 2))  # -> C:\Users\****\Desktop

或者按照评论中的建议,以递归方式实现 os.path.dirname(),如下所示:

def move_back_dir(a_dir, steps=1):
    for i in range(steps):
        a_dir = os.path.dirname(a_dir)
    return a_dir

print(move_back_dir(example_dir))     # -> C:\Users\****\Desktop\PythonScripts
print(move_back_dir(example_dir, 2))  # -> C:\Users\****\Desktop

如果不需要设置要返回的文件夹数量(上例中的 step),只需执行 os.path.dirname(filename)