Dam*_*ian 159 python filenames join
我需要将文件路径名传递给模块,该模块创建报告文档为pdf,html等.如何从目录名,基本文件名和fileformat字符串构建文件路径名?
在通话时该目录可能存在也可能不存在
例如
dir_name='/home/me/dev/my_reports'
base_filename='daily_report'
format = 'pdf'
Run Code Online (Sandbox Code Playgroud)
我需要创建一个字符串 '/home/me/dev/my_reports/daily_report.pdf'
手动连接片段似乎不是一个好方法.我试过os.path.join
join(dir_name,base_filename,format)
Run Code Online (Sandbox Code Playgroud)
但它给了
/home/me/dev/my_reports/daily_report/pdf
Run Code Online (Sandbox Code Playgroud)
ʇsә*_*ɹoɈ 251
这很好用:
os.path.join(dir_name, base_filename + "." + filename_suffix)
Run Code Online (Sandbox Code Playgroud)
请记住,os.path.join()仅存在因为不同的操作系统使用不同的路径分隔符.它平滑了这种差异,因此跨平台代码不必为每个操作系统的特殊情况混乱.没有必要为文件名"extensions"(参见脚注)执行此操作,因为它们始终在每个操作系统上使用点字符连接到名称的其余部分.
如果使用函数无论如何都会让你感觉更好(并且你不必要地使代码复杂化),你可以这样做:
os.path.join(dir_name, '.'.join((base_filename, filename_suffix)))
Run Code Online (Sandbox Code Playgroud)
如果您希望保持代码清洁,只需在后缀中包含点:
suffix = '.pdf'
os.path.join(dir_name, base_filename + suffix)
Run Code Online (Sandbox Code Playgroud)
脚注:非Micorsoft操作系统上没有文件名"扩展名".它在Windows上的存在来自MS-DOS和FAT,它从CP/M中借用它,已经死了几十年.我们许多人习惯看到的那些点加三字母只是每个其他现代操作系统上文件名的一部分,它没有内置意义.
Eug*_*ash 31
如果您有幸运行Python 3.4+,您可以使用pathlib:
>>> from pathlib import Path
>>> dirname = '/home/reports'
>>> filename = 'daily'
>>> suffix = '.pdf'
>>> Path(dirname, filename).with_suffix(suffix)
PosixPath('/home/reports/daily.pdf')
Run Code Online (Sandbox Code Playgroud)
Mar*_*air 21
嗯,为什么不呢:
>>>> import os
>>>> os.path.join(dir_name, base_filename + "." + format)
'/home/me/dev/my_reports/daily_report.pdf'
Run Code Online (Sandbox Code Playgroud)