파일 경로 이름을 모듈에 전달해야합니다. 디렉토리 이름, 기본 파일 이름 및 파일 형식 문자열에서 파일 경로를 어떻게 작성합니까?
호출시 디렉토리가 존재하거나 존재하지 않을 수 있습니다.
예를 들면 다음과 같습니다.
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