programa - construir el nombre de archivo completo en python,
integrar python con html (4)
Necesito pasar un nombre de ruta de archivo a un módulo que crea un documento de informe como pdf, html, etc. ¿Cómo construyo el nombre de ruta del archivo a partir de un nombre de directorio, un nombre de archivo base y una cadena de formato de archivo?
El directorio puede o no existir en el momento de la llamada
por ejemplo
dir_name=''/home/me/dev/my_reports''
base_filename=''daily_report''
format = ''pdf''
Necesito crear una cadena ''/home/me/dev/my_reports/daily_report.pdf''
concatenar manualmente las piezas no parecía ser una buena forma. Intenté os.path.join
join(dir_name,base_filename,format)
pero da
''/home/me/dev/my_reports/daily_report/pdf''
Esto funciona bien:
os.path.join(dir_name, base_filename + "." + filename_suffix)
Tenga en cuenta que os.path.join()
existe para suavizar los diferentes caracteres separadores de ruta utilizados por los diferentes sistemas operativos, por lo que su código no tiene que tener un caso especial cada uno. Las "extensiones" de nombre de archivo solo tienen un significado significativo en un sistema operativo importante (simplemente son parte del nombre del archivo en sistemas que no son de Windows), y su separador siempre es un punto. No es necesario que una función se una a ellos, pero si usar uno te hace sentir mejor, puedes hacer esto:
os.path.join(dir_name, ''.''.join((base_filename, filename_suffix)))
O bien, si desea mantener su código realmente limpio, simplemente incluya el punto en el sufijo:
suffix = ''.pdf''
os.path.join(dir_name, base_filename + suffix)
Si tiene la suerte de estar ejecutando Python 3.4+, puede usar pathlib
:
>>> from pathlib import Path
>>> dirname = "/home/reports"
>>> filename = "daily"
>>> suffix = ".pdf"
>>> Path(dirname).joinpath(filename).with_suffix(suffix)
PosixPath(''/home/reports/daily.pdf'')
Simplemente use os.path.join
para unir su ruta con el nombre de archivo y la extensión. Use sys.argv
para acceder a los argumentos pasados al script al ejecutarlo:
#!/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'')
Simplemente ejecute el script como:
# on windows-based systems
python script.py year
# on unix-based systems
./script.py year
Um, ¿por qué no solo?
>>>> import os
>>>> os.path.join(dir_name, base_filename + "." + format)
''/home/me/dev/my_reports/daily_report.pdf''