ver varios una todos rutas ruta obtener los leer explorador escribir directorio con como carpeta archivos abrir python string path

varios - rutas de archivos en python



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

Pero incluso cuando importo OS, no puedo llamarlo path.basename. ¿Es posible llamarlo tan directamente como nombre base?

import os , y luego usar os.path.basename

import os no significa que pueda usar os.foo sin referirse a os .

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


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

Aquí está explicado:

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

mi reporte


En el sistema de Windows usé también el prefijo de nombre de usuario, como:

>>> path_base_name(''file'') ''file'' >>> path_base_name(u''file'') u''file'' >>> path_base_name(''file.txt'') ''file'' >>> path_base_name(u''file.txt'') u''file'' >>> path_base_name(''file.tar.gz'') ''file'' >>> path_base_name(''file.a.b.c.d.e.f.g'') ''file'' >>> path_base_name(''relative/path/file.ext'') ''file'' >>> path_base_name(''/absolute/path/file.ext'') ''file'' >>> path_base_name(''Relative//Windows//Path//file.txt'') ''file'' >>> path_base_name(''C://Absolute//Windows//Path//file.txt'') ''file'' >>> path_base_name(''/path with spaces/file.ext'') ''file'' >>> path_base_name(''C://Windows Path With Spaces//file.txt'') ''file'' >>> path_base_name(''some/path/file name with spaces.tar.gz.zip.rar.7z'') ''file name with spaces''

Entonces, como no necesito letra de unidad o nombre de directorio, uso:

>>> s = ''c://temp//akarmi.txt'' >>> print(os.path.splitext(s)[0]) c:/temp/akarmi


La forma más fácil de resolver esto es

import ntpath print(''Base name is '',ntpath.basename(''/path/to/the/file/''))

Esto le ahorra tiempo y costos de computación.


Obteniendo el nombre del archivo sin la extensión:

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


Para completar, aquí está la solución de pathlib para python 3.2+:

from pathlib import Path print(Path(your_path).resolve().stem)


Para mayor comodidad, una función simple que envuelve los dos métodos de https://docs.python.org/3/library/os.path.html :

def filename(path): """Return file name without extension from path. See https://docs.python.org/3/library/os.path.html """ import os.path b = os.path.split(path)[1] # path, *filename* f = os.path.splitext(b)[0] # *file*, ext #print(path, b, f) return f

Probado con Python 3.5.


Pensé que incluiría una variación en el uso de os.path.splitext sin la necesidad de usar la indexación de matriz.

La función siempre devuelve un par (root, ext) para que sea seguro utilizar:

root, ext = os.path.splitext(path)

Ejemplo:

>>> import os >>> path = ''my_text_file.txt'' >>> root, ext = os.path.splitext(path) >>> root ''my_text_file'' >>> ext ''.txt''


Podríamos hacer un simple split / pop magic como se ve aquí ( https://.com/a/424006/1250044 ), para extraer el nombre de archivo (respetando las diferencias de Windows y POSIX).

def getFileNameWithoutExtension(path): return path.split(''//').pop().split(''/'').pop().rsplit(''.'', 1)[0] getFileNameWithoutExtension(''/path/to/file-0.0.1.ext'') # => file-0.0.1 getFileNameWithoutExtension(''//path//to//file-0.0.1.ext'') # => file-0.0.1


Sólo tienes que rodar:

>>> 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''


Si desea mantener la ruta del 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


Un procedimiento de extensión múltiple. Trabajos para str y unicode caminos. Trabaja en Python 2 y 3.

import os path = "a/b/c/abc.txt" print os.path.splitext(os.path.basename(path))[0]

Comportamiento:

>>> from pathlib import Path >>> p = Path("/a/b/c.txt") >>> print(p.with_suffix('''')) /a/b/c >>> print(p.stem) c


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

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

Imprimirá

expediente

Si la ruta puede ser un enlace simbólico , entonces agregue resolve()

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


os.path.splitext () no funcionará si hay varios 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

Simplemente puede encontrar el índice del primer punto en el nombre base y luego cortar el nombre base para obtener solo el nombre de 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


https://docs.python.org/3/library/os.path.html

En python 3 pathlib "El módulo pathlib ofrece objetos de ruta de alto nivel". asi que,

import os def file_base_name(file_name): if ''.'' in file_name: separator_index = file_name.index(''.'') base_name = file_name[:separator_index] return base_name else: return file_name def path_base_name(path): file_name = os.path.basename(path) return file_base_name(file_name)


import os

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

Esto devuelve el filename sin la extension (C: / Users / Public / Videos / Sample Videos / wildlife)

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

Ahora puede obtener solo el filename de filename de la temp con

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


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


>>> print(os.path.splitext(os.path.basename(s))[0]) akarmi


import os list = [] def getFileName( path ): for file in os.listdir(path): #print file try: base=os.path.basename(file) splitbase=os.path.splitext(base) ext = os.path.splitext(base)[1] if(ext): list.append(base) else: newpath = path+"/"+file #print path getFileName(newpath) except: pass return list getFileName("/home/weexcel-java3/Desktop/backup") print list