Python:在if语句末尾更改路径

时间:2016-09-01 12:37:13

标签: python python-3.x tkinter sys

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

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])

但是我的路径不是最佳的,因为该函数没有返回到父目录而是卡在该文件夹中(例如,如果current == 1,则目录将位于... \ folder1中)。为了实现这一点,我需要在每个语句的末尾向下移动一个目录。我看了相关的问题并遇到了os.chdir('..')。出于某种原因,我无法实现这一点。关于如何在每个语句结束时向下移动一个目录的任何想法。

2 个答案:

答案 0 :(得分:1)

这个怎么样?

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)

答案 1 :(得分:0)

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

为了给你一个完整的答案,你需要看到你班上的其他人。更具体地说,必须知道self.lbself.files中的内容以及填充它的逻辑。