当前位置: 首页 > 面试题库 >

在Python中构建完整路径文件名

陶英纵
2023-03-14
问题内容

我需要将文件路径名传递给模块。如何从目录名称,基本文件名和文件格式字符串构建文件路径?

呼叫时目录可能存在也可能不存在。

例如:

dir_name='/home/me/dev/my_reports'
base_filename='daily_report'
format = 'pdf'

我需要创建一个字符串 '/home/me/dev/my_reports/daily_report.pdf'

手动连接片段似乎不是一个好方法。我想os.path.join

join(dir_name,base_filename,format)

但它给

/home/me/dev/my_reports/daily_report/pdf

问题答案:

这很好用:

os.path.join(dir_name, base_filename + "." + filename_suffix)

请记住,这种os.path.join()存在仅是因为不同的操作系统使用不同的路径分隔符。它可以消除这种差异,因此跨平台代码不必因每种操作系统的特殊情况而混乱。无需对文件名“扩展名”执行此操作(请参见脚注),因为在每个OS上,它们始终以点字符连接到名称的其余部分。

如果仍然使用函数会让您感觉更好(并且您喜欢使代码不必要地复杂化),则可以执行以下操作:

os.path.join(dir_name, '.'.join((base_filename, filename_suffix)))

如果您希望保持代码干净,只需在后缀中包含点:

suffix = '.pdf'
os.path.join(dir_name, base_filename + suffix)

该方法也恰好与pathlib中的后缀约定兼容,在询问了此问题后,它在python
3.4中引入。不需要向后兼容的新代码可以做到这一点:

suffix = '.pdf'
pathlib.PurePath(dir_name, base_filename + suffix)

如果只处理本地操作系统的路径PathPurePath则可能更喜欢使用较短的名称。

警告:请勿with_suffix()为此使用pathlib 。base_filename如果该方法包含点,它将损坏。

脚注:在Micorsoft操作系统之外,没有文件名“ extension”之类的东西。它在Windows上的存在来自MS-DOS和FAT,它们是从CP /
M借来的,而CP / M已经死了数十年。我们中许多人习惯看到的点加三字母只是其他所有现代OS上文件名的一部分,它没有内置的含义。



 类似资料:
  • 问题内容: 有没有一种方法可以在目录上使用glob来获取具有特定扩展名的文件,而只能获取文件名本身,而不是整个路径? 问题答案: 使用来获取文件名。

  • 我试图使用完整文件路径列表(大多数是唯一的)(例如“C:\Folder1\file\u 1.xls”)复制到完整文件夹路径(例如“C:\DifferentFolder”)。 完整文件路径和完整文件夹路径都因行而异。我已经成功地使用COPY完成了这一点,将所有路径都放在引号中。 继续使用此功能的问题是,我发现,在查看之前和之后的#个文件时,我只有大约95%的成功率。bat文件已完成。我不确定问题是什

  • 问题内容: 有没有一种简单的方法可以打印的完整路径? 的 应该打印 问题答案: 使用 readlink :

  • 问题内容: 我的adt很好地工作了一次,我能够运行所有项目,然后在第二天打开,它需要对sdk进行一些更新,否则显示DDMS丢失的错误,我更新了sdk,现在出现错误: 资源路径位置类型该项目不是由于其构建路径不完整而已构建。 找不到java.lang.Object的类文件。修复构建路径,然后尝试构建该项目 。有谁告诉我如何解决所有这些错误并顺利进行ADT或进行其他任何选择。 问题答案: 这里的问题是

  • 问题内容: 我想获取当前文件的目录路径。我试过了: 但是,如何检索目录的路径? 例如: 问题答案: Python 3 对于正在运行的脚本的目录: 对于当前工作目录: 对于正在运行的脚本的目录: 如果你的意思是当前工作目录: 请注意,前后分别是两个下划线,而不仅仅是一个。 另请注意,如果你正在交互运行或已从文件以外的内容(例如数据库或在线资源)中加载了代码,则可能不会设置,因为没有“当前文件”的概念

  • 问题内容: 这个问题已经在这里有了答案 : 7年前关闭。 可能重复: 使用jQuery输入文件的完整路径 我有以下html元素 如果我用 我只是文件名,而不是文件的完整绝对路径。有人可以告诉我如何获得完整路径吗? 问题答案: 您不能这样做-由于安全问题,浏览器将不允许这样做。尽管有解决方法,但事实是您不应该依靠这种方法。以下堆栈溢出问题与此处相关: 使用jquery输入文件的完整路径 如何从Fir