在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.join
join你的文件名和扩展名的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