Python:更改路径在国际单项体育联合会的最后

2024-04-25 17:37:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我的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('..')。出于某种原因,我很难实现这一点。关于如何在每条语句末尾下移一个目录的任何想法。你知道吗


Tags: 文件pathinself目录forsysrange
2条回答

实际上,您应该使用os.chdir,而不是sys.path.insert。你知道吗

要给你一个完整的答案,你需要看看你班上的其他同学。更具体地说,我们必须知道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)

相关问题 更多 >