Pregunta ¿Cómo obtener el nombre de archivo sin la extensión de una ruta en Python?


¿Cómo obtener el nombre de archivo sin la extensión de una ruta en Python?

Descubrí un método llamado os.path.basename para obtener el nombre de archivo con extensión Pero incluso cuando importo el sistema operativo, no puedo llamarlo path.basename. ¿Es posible llamarlo directamente como basename?


564
2018-03-24 16:41


origen


Respuestas:


Obtener el nombre del archivo sin la extensión:

import os
print(os.path.splitext("path_to_file")[0])

En cuanto a su problema de importación, lo resuelve de esta manera:

from os.path import basename

# now you can call it directly with basename
print(basename("/a/b/c.txt"))

801
2018-03-24 16:43



Solo arrásgalo:

>>> import os
>>> base=os.path.basename('/root/dir/sub/file.ext')
>>> base
'file.ext'
>>> os.path.splitext(base)
('file', '.ext')
>>> os.path.splitext(base)[0]
'file'

275
2018-03-24 16:49



>>> print os.path.splitext(os.path.basename("hemanth.txt"))[0]
hemanth

137
2017-08-04 16:44



Para completar, aquí está el pathlib solución para Python 3.2+:

from pathlib import Path

print(Path(your_path).resolve().stem)

23
2017-08-24 16:08



Una versión legible, usando Pathlib en Python 3.4+

from pathlib import Path

Path('/root/dir/sub/file.ext').stem

Se imprimirá:

archivo

Si la ruta puede ser una enlace simbólico, Luego añade resolve()

Path('/root/dir/sub/file.ext').resolve().stem

21
2017-11-26 13:32



Si desea mantener la ruta al archivo y simplemente eliminar la extensión

>>> file = '/root/dir/sub.exten/file.data.1.2.dat'
>>> print ('.').join(file.split('.')[:-1])
/root/dir/sub.exten/file.data.1.2

18
2017-10-21 07:46



os.path.splitext () no lo hará funciona si hay múltiples puntos en la extensión.

Por ejemplo, images.tar.gz

>>> import os
>>> file_path = '/home/dc/images.tar.gz'
>>> file_name = os.path.basename(file_path)
>>> print os.path.splitext(file_name)[0]
images.tar

Puede encontrar el índice del primer punto en el nombre base y luego cortar el nombre del archivo para obtener solo el nombre del archivo sin extensión.

>>> import os
>>> file_path = '/home/dc/images.tar.gz'
>>> file_name = os.path.basename(file_path)
>>> index_of_dot = file_name.index('.')
>>> file_name_without_extension = file_name[:index_of_dot]
>>> print file_name_without_extension
images

12
2018-06-11 05:17



Pero incluso cuando importo el sistema operativo, no puedo llamarlo path.basename. ¿Es posible llamarlo directamente como basename?

import osy luego usa os.path.basename

importEn g os no significa que puede usar os.foo sin referirse a os.


9
2018-03-24 16:45



@ IceAdor se refiere a rsplit en un comentario a la solución de @ user2902201. rsplit es la solución más simple que admite períodos múltiples.

Aquí está escrito:

file = 'my.report.txt'
print file.rsplit('.', 1)[0]

mi reporte


8
2018-05-23 20:09



import os

filename = C:\\Users\\Public\\Videos\\Sample Videos\\wildlife.wmv

Esto devuelve el filename sin el extension(C: \ Users \ Public \ Videos \ Videos de muestra \ fauna)

temp = os.path.splitext(filename)[0]  

Ahora puedes obtener solo el filename desde la temperatura con

os.path.basename(temp)   #this returns just the filename (wildlife)

4
2018-01-10 23:29