【问题标题】:Elegant way to take basename of directory in Python?在 Python 中获取目录的基本名称的优雅方法?
【发布时间】:2010-04-18 18:56:48
【问题描述】:

我有几个将目录名称作为输入的脚本,我的程序在这些目录中创建文件。有时我想取给程序的目录的基本名称,并用它来制作目录中的各种文件。例如,

# directory name given by user via command-line
output_dir = "..." # obtained by OptParser, for example
my_filename = output_dir + '/' + os.path.basename(output_dir) + '.my_program_output'
# write stuff to my_filename

问题是,如果用户给出的目录名带有斜杠,那么 os.path.basename 将返回空字符串,这不是我想要的。在python中处理这些斜杠/尾随斜杠问题的最优雅的方法是什么?我知道我可以手动检查 output_dir 末尾的斜杠,如果它存在则将其删除,但似乎应该有更好的方法。有吗?

另外,手动添加“/”字符可以吗?例如。 output_dir + '/' os.path.basename() 还是有更通用的方式来构建路径?

谢谢。

【问题讨论】:

    标签: python file-io filesystems directory-structure


    【解决方案1】:

    要处理您的“斜杠”问题(和其他问题!),请使用 os.path.normpath() 清理用户输入。

    要构建路径,请使用os.path.join()

    【讨论】:

      【解决方案2】:

      使用os.path.join() 构建路径。例如:

      >>> import os.path
      >>> path = 'foo/bar'
      >>> os.path.join(path, 'filename')
      'foo/bar/filename'
      >>> path = 'foo/bar/'
      >>> os.path.join(path, 'filename')
      'foo/bar/filename'
      

      【讨论】:

        【解决方案3】:

        您应该使用os.path.join() 一起添加路径。

        使用

        os.path.dirname(os.path.join(output_dir,''))
        

        提取目录名,如果省略,则添加尾部斜杠。

        【讨论】:

          【解决方案4】:

          手动建立路径不利于可移植性;它会在 Windows 上中断。您应该使用 os.path.sep。

          至于你的第一个问题,使用 os.path.join 是正确的想法。

          【讨论】:

          • """它将在 Windows 上中断""":仅当您将斜杠作为命令的一部分提供给例如os.system(); DOS 命令解析器只理解反斜杠。将其喂给例如open() 很好。但是,如果要向 Windows 用户或管理员显示构建的路径,请准备好接受大量攻击 :-)
          【解决方案5】:

          要在不写斜杠的情况下构建路径,最好使用:

          os.path.join(dir, subdir, file)
          

          如果要添加分隔符或独立于操作系统获取分隔符,请使用

           os.sep
          

          【讨论】:

          • 如 OP 所述,问题是如果 d 是“mydir”,那么这将返回一个空字符串。
          • @Ofri:相应部分已被删除。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-10-21
          • 2015-09-24
          • 2020-02-07
          • 2019-03-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多