txt importar como archivos python filenames file-extension

importar - archivos en python 3



Extrayendo la extensión del nombre de archivo en Python (20)

Aunque es un tema antiguo, me pregunto por qué no hay ninguna que mencione una api muy simple de python llamada rpartition en este caso:

para obtener la extensión de una ruta absoluta de archivo dada, simplemente puede escribir:

filepath.rpartition(''.'')[-1]

ejemplo:

path = ''/home/jersey/remote/data/test.csv'' print path.rpartition(''.'')[-1]

te dará: ''csv''

¿Existe una función para extraer la extensión de un nombre de archivo?


Con splitext hay problemas con los archivos con extensión doble (por ejemplo, file.tar.bz2 , file.tar.bz2 , etc.)

>>> fileName, fileExtension = os.path.splitext(''/path/to/somefile.tar.gz'') >>> fileExtension ''.gz''

pero debería ser: .tar.gz

Las posibles soluciones están here


Cualquiera de las soluciones anteriores funciona, pero en linux encontré que hay una nueva línea al final de la cadena de extensión que evitará que las coincidencias tengan éxito. Agrega el método strip() al final. Por ejemplo:

import os.path extension = os.path.splitext(filename)[1][1:].strip()


Esta es una técnica de representación directa de cadenas: veo que se mencionan muchas soluciones, pero creo que la mayoría busca dividir. Split, sin embargo, lo hace en cada aparición de "." . Lo que preferirías estar buscando es la partición.

string = "folder/to_path/filename.ext" extension = string.rpartition(".")[-1]


Incluso esta pregunta ya está respondida, agregaría la solución en Regex.

>>> import re >>> file_suffix = ".*(/..*)" >>> result = re.search(file_suffix, "somefile.ext") >>> result.group(1) ''.ext''


Otra solución con split correcto:

# to get extension only s = ''test.ext'' if ''.'' in s: ext = s.rsplit(''.'', 1)[1] # or, to get file name and extension def split_filepath(s): """ get filename and extension from filepath filepath -> (filename, extension) """ if not ''.'' in s: return (s, '''') r = s.rsplit(''.'', 1) return (r[0], r[1])


Puede utilizar una split en un filename :

f_extns = filename.split(".") print ("The extension of the file is : " + repr(f_extns[-1]))

Esto no requiere biblioteca adicional.


Puedes encontrar algunas cosas geniales en el módulo pathlib.

import pathlib x = pathlib.PurePosixPath("C://Path//To//File//myfile.txt").suffix print(x) # Output ''.txt''


Solo join todos los pathlib suffixes .

>>> x = ''file/path/archive.tar.gz'' >>> y = ''file/path/text.txt'' >>> ''''.join(pathlib.Path(x).suffixes) ''.tar.gz'' >>> ''''.join(pathlib.Path(y).suffixes) ''.txt''


Sorprendido esto aún no se mencionó:

import os fn = ''/some/path/a.tar.gz'' basename = os.path.basename(fn) # os independent Out[] a.tar.gz base = basename.split(''.'')[0] Out[] a ext = ''.''.join(basename.split(''.'')[1:]) # <-- main part # if you want a leading ''.'', and if no result `None`: ext = ''.'' + ext if ext else None Out[] .tar.gz

Beneficios:

  • Funciona como se espera para cualquier cosa que se me ocurra.
  • Sin modulos
  • No regex
  • Multiplataforma
  • Fácilmente extensible (por ejemplo, sin puntos iniciales para la extensión, solo la última parte de la extensión)

Como función:

def get_extension(filename): basename = os.path.basename(filename) # os independent ext = ''.''.join(basename.split(''.'')[1:]) return ''.'' + ext if ext else None


Una opción puede ser dividir desde un punto:

>>> filename = "example.jpeg" >>> filename.split(".")[-1] ''jpeg''

No hay error cuando el archivo no tiene una extensión:

>>> "filename".split(".")[-1] ''filename''

Pero debes tener cuidado:

>>> "png".split(".")[-1] ''png'' # But file doesn''t have an extension


vale la pena agregar un valor más bajo para que no se pregunte por qué los JPG no aparecen en su lista.

os.path.splitext(filename)[1][1:].strip().lower()


Nuevo en la versión 3.4.

import pathlib print(pathlib.Path(''yourPathGoesHere'').suffix)

Me sorprende que nadie haya mencionado pathlib todavía, ¡ pathlib ES increíble!

Si necesita todos los sufijos (por ejemplo, si tiene un .tar.gz ), .suffixes le devolverá una lista de ellos.


Sí. Utilice os.path.splitext (consulte la documentación de Python 2.X o la documentación de Python 3.X ):

>>> import os >>> filename, file_extension = os.path.splitext(''/path/to/somefile.ext'') >>> filename ''/path/to/somefile'' >>> file_extension ''.ext''

A diferencia de la mayoría de los intentos manuales de división de cadenas, os.path.splitext tratará correctamente a /a/bc/d como si no tuviera extensión en lugar de tener la extensión .c/d , y tratará a .bashrc como si no tuviera extensión en lugar de tener extensión .bashrc :

>>> os.path.splitext(''/a/b.c/d'') (''/a/b.c/d'', '''') >>> os.path.splitext(''.bashrc'') (''.bashrc'', '''')


# try this, it works for anything, any length of extension # e.g www.google.com/downloads/file1.gz.rs -> .gz.rs import os.path class LinkChecker: @staticmethod def get_link_extension(link: str)->str: if link is None or link == "": return "" else: paths = os.path.splitext(link) ext = paths[1] new_link = paths[0] if ext != "": return LinkChecker.get_link_extension(new_link) + ext else: return ""


def NewFileName(fichier): cpt = 0 fic , *ext = fichier.split(''.'') ext = ''.''.join(ext) while os.path.isfile(fichier): cpt += 1 fichier = ''{0}-({1}).{2}''.format(fic, cpt, ext) return fichier


filename=''ext.tar.gz'' extension = filename[filename.rfind(''.''):]


import os.path extension = os.path.splitext(filename)[1]


import os.path extension = os.path.splitext(filename)[1][1:]

Para obtener solo el texto de la extensión, sin el punto.


name_only=file_name[:filename.index(".")

Eso le dará el nombre del archivo hasta el primer ".", Que sería el más común.