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()
는, operating system 마다 다른 패스 구분 문자를 사용하고 있기 때문에만 존재합니다.그 차이를 해소할 수 있기 때문에 OS마다 특별한 케이스가 있는 크로스 플랫폼 코드를 복잡하게 할 필요가 없습니다.모든 OS에서 파일 이름 "확장자"(각주 참조)의 경우 항상 점 문자가 앞에 있으므로 이 작업을 수행할 필요가 없습니다.
어떤 함수를 사용해도 기분이 좋아진다면(그리고 코드를 불필요하게 복잡하게 만들고 싶은 경우) 다음과 같이 할 수 있습니다.
os.path.join(dir_name, '.'.join((base_filename, filename_suffix)))
코드를 깨끗하게 유지하려면 접미사에 점을 찍기만 하면 됩니다.
suffix = '.pdf'
os.path.join(dir_name, base_filename + suffix)
이 접근법은 pathlib의 접미사 규칙과도 호환됩니다.이 규칙은 이 질문이 제기된 지 몇 년 후 python 3.4에서 도입되었습니다.하위 호환성이 필요하지 않은 새 코드를 사용하면 다음과 같은 작업을 수행할 수 있습니다.
suffix = '.pdf'
pathlib.PurePath(dir_name, base_filename + suffix)
쇼트 컷을 사용하고 싶을지도 모릅니다.Path()
대신PurePath()
로컬 OS의 경로만 처리하는 경우.원래 질문의 배후에 있는 크로스 플랫폼 문제를 고려할 때 이 선택에 의문을 제기합니다.
경고: pathlib를 사용하지 마십시오.with_suffix()
이 목적을 위해.그 방법은 썩을 것이다.base_filename
점이라도 있으면 말이야
각주:Micorsoft operating system 이외에서는, 파일명 「확장자」는 없습니다.Windows에서의 존재는 MS-DOS와 FAT에서 유래하고 있습니다.이것은 수십 년 동안 사용되지 않았던 CP/M에서 빌린 것입니다.많은 사람들이 익숙한 닷 플러스 세 글자는 다른 모든 최신 OS에서 파일 이름의 일부일 뿐이며, 그 의미는 없습니다.
Python 3.4+를 실행할 수 있다면 다음을 사용할 수 있습니다.
>>> 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'
기본 파일 이름에 형식을 추가하는 것이 더 낫지 않나요?
dir_name='/home/me/dev/my_reports/'
base_filename='daily_report.pdf'
os.path.join(dir_name, base_filename)
파일 이름 및 확장자를 사용하여 경로를 결합할 때 사용합니다.스크립트를 실행할 때 스크립트에 전달된 인수에 액세스하기 위해 사용합니다.
#!/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
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)
언급URL : https://stackoverflow.com/questions/7132861/build-the-full-path-filename-in-python
'programing' 카테고리의 다른 글
MariaDB - 두 엔티티 간에 다수의 관계 테이블을 만듭니다. (0) | 2022.12.20 |
---|---|
Nuxt.js에서 rootGetters를 사용하는 데 문제가 있습니다. (0) | 2022.12.20 |
같은 테이블의 다른 행의 데이터로 행 업데이트 (0) | 2022.12.20 |
리소스 텍스트 파일을 문자열(Java)로 읽기 위한 유틸리티 (0) | 2022.12.20 |
자기 주장이 있는 클래스 메서드 데코레이터? (0) | 2022.12.20 |