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

时间:2011-08-20 15:53:08

标签: python join filenames

我需要将文件路径名传递给创建报告文档的模块,如pdf,html等。如何从目录名,基本文件名和fileformat字符串构建文件路径名?

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

例如

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'

5 个答案:

答案 0 :(得分:219)

这很好用:

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

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

如果使用某个功能无论如何都会让你感觉更好(并且你不必要地使你的代码复杂化),你可以这样做:

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

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

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

脚注:非Micorsoft操作系统上没有文件名“扩展名”。它在Windows上的存在来自MS-DOS和FAT,它从CP / M中借用它,已经死了几十年。我们很多人习以为常看到的那些点加三字母只是每个其他现代操作系统上文件名的一部分,它没有内置含义。

答案 1 :(得分:25)

如果您有幸运行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')

答案 2 :(得分:21)

嗯,为什么不呢:

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

答案 3 :(得分:0)

只需使用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

答案 4 :(得分:0)

from pathlib import Path

# Build paths inside the project like this: BASE_DIR / 'subdir'.

BASE_DIR = Path(__file__).resolve().parent.parent
TEMPLATE_PATH = Path.joinpath(BASE_DIR,"templates")
print(TEMPLATE_PATH)