在Python中构build完整path文件名,

我需要传递一个文件path名称到一个模块,创build一个报告文档为PDF格式,HTML等。我如何从目录名称,基本文件名和fileformatstringbuild立文件path名?

通话时目录可能存在,也可能不存在

例如

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

我需要创build一个string'/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()存在,以平滑不同的操作系统使用的不同的path分隔符字符,所以你的代码不必每个特殊情况。 文件名“扩展名”在一个主要的操作系统上只有很重要的意义(它们只是非Windows系统文件名的一部分),它们的分隔符总是一个点。 没有必要join一个函数,但是如果使用一个让你感觉更好,你可以这样做:

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

或者,如果你想保持你的代码真的干净,只需在后缀中包含点:

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

嗯,为什么不只是:

 >>>> import os >>>> os.path.join(dir_name, base_filename + "." + format) '/home/me/dev/my_reports/daily_report.pdf' 

如果你有幸运行Python 3.4+,你可以使用pathlib

 >>> from pathlib import Path >>> dirname = "/home/reports" >>> filename = "daily" >>> suffix = ".pdf" >>> Path(dirname).joinpath(filename).with_suffix(suffix) PosixPath('/home/reports/daily.pdf') 

只要使用os.path.joinjoin你的文件名和扩展名的path。 执行时使用sys.argv来访问传递给脚本的参数:

 #!/usr/bin/env python3 # coding: utf-8 # import netCDF4 as nc import numpy as np import numpy.ma as ma import csv as csv import os.path import sys basedir = '/data/reu_data/soil_moisture/' suffix = 'nc' def read_fid(filename): fid = nc.MFDataset(filename,'r') fid.close() return fid def read_var(file, varname): fid = nc.Dataset(file, 'r') out = fid.variables[varname][:] fid.close() return out if __name__ == '__main__': if len(sys.argv) < 2: print('Please specify a year') else: filename = os.path.join(basedir, '.'.join((sys.argv[1], suffix))) time = read_var(ncf, 'time') lat = read_var(ncf, 'lat') lon = read_var(ncf, 'lon') soil = read_var(ncf, 'soilw') 

只需运行如下脚本:

  # on windows-based systems python script.py year # on unix-based systems ./script.py year