[python] 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()운영 체제마다 경로 구분 문자를 다르게 사용하기 때문에 존재 한다는 점을 명심하십시오 . 이 차이를 극복하여 플랫폼 간 코드가 각 OS에 대해 특별한 경우로 어수선해질 필요가 없습니다. 파일 이름 “확장명”(각주 참조)에 대해서는 항상 모든 OS에서 점 문자로 나머지 이름에 연결되므로이 작업을 수행 할 필요가 없습니다.

어쨌든 함수를 사용하면 기분이 좋아지고 코드를 불필요하게 복잡하게 만드는 것을 좋아한다면 다음과 같이하십시오.

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

코드를 깨끗하게 유지하려면 접미사에 점을 넣으십시오.

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

(이 접근법은 또한 python 3.4에서 소개 된 pathlib 의 접미사 규칙과 호환됩니다 .)


각주 : Micorsoft 이외의 운영 체제에는 “확장자”와 같은 파일 이름이 없습니다. Windows에서의 존재는 MS-DOS와 FAT에서 나 왔으며, 수십 년 동안 죽은 CP / M에서 빌 렸습니다. 우리 중 많은 사람들이보기에 익숙한 도트 플러스 3 글자는 내장 된 의미가없는 다른 모든 최신 OS에서 파일 이름의 일부일뿐입니다.


답변

운 좋게도 파이썬 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')


답변

음, 왜 :

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


답변

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


답변