【问题标题】:moving between directories in python在python中的目录之间移动
【发布时间】:2021-08-23 12:27:14
【问题描述】:

我有一个简单的文件浏览器类,顶部有按钮,上面有路径目录名称。目前它在文件目录中启动。我想要做的是,当一个按钮被点击时,它应该切换到那个目录。其他一切正常,列出了当前目录的文件并显示按钮,我可以单击它们。浏览器中的代码是这样的:

    self.base_dir = os.path.dirname(os.path.abspath(__file__))
    self.dir = directory
    self.load_images()
    
    self.path = os.path.abspath(self.base_dir)
    self.path_list = self.path.split(os.path.sep)
    self.path_button_panel = Buttonbar(self.rect.width, 25, HORIZONTAL)
    
    for dir_path in self.path_list:
        b = Button(dir_path, action = self.set_directory)
        self.path_button_panel.add(b)

按钮是这样的:

home marienbad python3 pygame 文件测试

所以当我单击 python3 时,它应该更改为那个。这些按钮可以工作,它们只是将目录名称作为文本并将其返回给 set_directory 方法。

所以在 set_directory 我试过了:

new_path = os.path.abspath(directory)

但这只是将它附加到当前目录路径的路径。

我尝试拆分路径并重新加入:

    new_path = os.path.split(directory)
    new_path = os.path.join(new_path, directory)
    

但它说它想要一个类似对象的路径。

我已经尝试了几件事,但现在让我很沮丧!我很困惑,我认为有一些方法可以将路径拆分为目录名称,但无法解决。我做错了什么?

【问题讨论】:

    标签: python directory path operating-system


    【解决方案1】:

    os.path.split 返回一个元组(head, tail),所以在你的情况下new_path 是一个元组。请改用os.path.dirname:这会从提供的路径返回下一个目录“向上”,例如os.path.dirname('/path/to/my/thing') 返回 '/path/to/my',我认为这就是你想要的。

    os.path.abspath 将相对路径解析为绝对路径,例如如果您当前位于文件夹 'C:/User/MyAccount/Documents/work/myPackage' 中,则将 './data' 更改为 'C:/User/MyAccount/Documents/work/myPackage/data'

    【讨论】:

    • 谢谢。当它是之前的目录时,它可以工作,但在我的例子中,如果我想去 python3 目录它不起作用。
    • 那么你只需要去掉os.path.split 行吗?我假设directory 持有当前目录。因此,您只想将文件夹名称附加到它,即os.path.join(directory, folder_name)?
    • 我通过向每个按钮发送完整路径但仅将名称设置为路径中的最后一项来修复它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-19
    • 2018-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-21
    • 1970-01-01
    相关资源
    最近更新 更多