Cómo cambiar el nombre de un archivo usando Python

Resuelto zjm1126 asked hace 14 años • 17 respuestas

Quiero cambiar a.txta b.kml.

zjm1126 avatar Mar 22 '10 16:03 zjm1126
Aceptado

Usar os.rename:

import os

os.rename('a.txt', 'b.kml')

Uso:

os.rename('from.extension.whatever','to.another.extension')
YOU avatar Mar 22 '2010 10:03 YOU

El archivo puede estar dentro de un directorio, en ese caso especifique la ruta:

import os
old_file = os.path.join("directory", "a.txt")
new_file = os.path.join("directory", "b.kml")
os.rename(old_file, new_file)
Abdul Razak avatar Oct 15 '2015 09:10 Abdul Razak

A partir de Python 3.4 se puede utilizar el módulo pathlib para solucionar este problema.

Si tiene una versión anterior, puede usar la versión respaldada que se encuentra aquí

Supongamos que no está en la ruta raíz (solo para agregarle un poco de dificultad) y desea cambiarle el nombre, y debe proporcionar una ruta completa. Podemos ver esto:

some_path = 'a/b/c/the_file.extension'

Entonces, puedes tomar tu camino y crear un Pathobjeto a partir de él:

from pathlib import Path
p = Path(some_path)

Solo para proporcionar información sobre este objeto que tenemos ahora, podemos extraer cosas de él. Por ejemplo, si por alguna razón queremos cambiar el nombre del archivo modificando el nombre del archivo de the_filea the_file_1, entonces podemos obtener la parte del nombre del archivo:

name_without_extension = p.stem

Y todavía sostenga la extensión en la mano también:

ext = p.suffix

Podemos realizar nuestra modificación con una simple manipulación de cadenas:

¡Python 3.6 y versiones posteriores utilizan cadenas f!

new_file_name = f"{name_without_extension}_1"

De lo contrario:

new_file_name = "{}_{}".format(name_without_extension, 1)

Y ahora podemos realizar nuestro cambio de nombre llamando al renamemétodo en el objeto de ruta que creamos y agregando extpara completar la estructura de cambio de nombre adecuada que queremos:

p.rename(Path(p.parent, new_file_name + ext))

Más brevemente para mostrar su simplicidad:

Pitón 3.6+:

from pathlib import Path
p = Path(some_path)
p.rename(Path(p.parent, f"{p.stem}_1_{p.suffix}"))

Las versiones anteriores a Python 3.6 utilizan en su lugar el método de formato de cadena:

from pathlib import Path
p = Path(some_path)
p.rename(Path(p.parent, "{}_{}_{}".format(p.stem, 1, p.suffix))
idjaw avatar Jul 27 '2017 14:07 idjaw
import shutil

shutil.move('a.txt', 'b.kml')

Esto funcionará para cambiar el nombre o mover un archivo.

Andy Balaam avatar Mar 22 '2010 10:03 Andy Balaam

os.rename(old, new)

Esto se encuentra en los documentos de Python: http://docs.python.org/library/os.html

Joe avatar Mar 22 '2010 10:03 Joe