在Python中构建完整路径文件名,
我需要将文件路径名传递给模块,该模块创建报告文档为pdf,html等。如何从目录名,基本文件名和fileformat字符串?在Python中构建完整路径文件名,
目录可能会或可能不会在呼叫
的时间存在例如
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()
存在可平滑不同操作系统使用的不同路径分隔符字符,因此您的代码不必每个都有特殊情况。文件名称“扩展名”在一个主要操作系统上仅具有重要意义(它们只是非Windows系统上文件名的一部分),其分隔符总是一个点。有没有必要的功能加入他们,但如果使用一个让你感觉更好,你可以这样做:
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'
感谢,但我希望有附加的是extension..python的更清洁的方式甚至有一个splitext功能,切断必须有一些东西到extension..so做相反 –
splitext函数保留'。'在扩展的前面。这可能是最干净的方式。如果你希望它在你的代码中“看起来”更干净,我建议使用函数或lambda函数。 – Vorticity
只需使用os.path.join
即可将文件名和扩展名加入到路径中。在执行时,它使用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
如果你足够幸运,执行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分隔符可能不是'.'。对于这个可以使用'os.extsep'。 – sjbx
我没有提到这样的事情。 –
你花了一些时间来解释'文件名'扩展名'在一个主要的操作系统上只有重要的含义(它们只是非Windows系统文件名的一部分),它们的分隔符总是一个点' 。 OP还表示他们最终看到/ pdf。所以你可以做'os.path.join(dir_name,base_filename,os.extsep,extension)'。你的回答是完全正确的。 – sjbx