Respuestas:
Uso os.rename
:
import os
os.rename('a.txt', 'b.kml')
C:/folder/file.txt
en Windows o /home/file.txt
en Linux / MacOS).
OSError
en los sistemas Windows. os.path.exists
debe usarse para verificar si el objetivo existe antes de renombrarlo. Esto crea un error de "Tiempo de verificación a tiempo de uso", pero es poco probable que cause problemas. (No conozco una manera fácil de evitar esto - ver aquí .
os.replace
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)
import shutil
shutil.move('a.txt', 'b.kml')
Esto funcionará para cambiar el nombre o mover un archivo.
shutil.move
No es una buena opción por no ser una operación atómica. Si el archivo está abierto, por ejemplo, shutil.move
creará un archivo con new_name
, pero no lo eliminará y, old_name
por lo tanto, le dejará dos archivos. os.rename
por otro lado no hará nada, lo cual es una mejor opción . Con shutil.move
, incluso si detecta el error, aún tendrá que preocuparse por verificar y eliminar el archivo falso. Simplemente no vale la pena cuando existe una mejor herramienta:os.rename
.
A partir de Python 3.4 se puede usar el módulo pathlib para resolver esto.
Si tiene una versión anterior, puede usar la versión con respaldo que se encuentra aquí
Supongamos que no está en la ruta raíz (solo para agregarle un poco de dificultad) a la que desea cambiar el nombre, y tiene que proporcionar una ruta completa, podemos ver esto:
some_path = 'a/b/c/the_file.extension'
Entonces, puedes tomar tu camino y crear un Path
objeto 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 cualquier razón queremos cambiar el nombre del archivo modificando el nombre de archivo de the_file
a the_file_1
, entonces podemos obtener la parte del nombre de 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 superior hacen uso de cadenas f!
new_file_name = f"{name_without_extension}_1"
De otra manera:
new_file_name = "{}_{}".format(name_without_extension, 1)
Y ahora podemos realizar nuestro cambio de nombre llamando al rename
método en el objeto de ruta que creamos y agregando el ext
para completar la estructura de cambio de nombre que queremos:
p.rename(Path(p.parent, new_file_name + ext))
Más brevemente para mostrar su simplicidad:
Python 3.6+:
from pathlib import Path
p = Path(some_path)
p.rename(Path(p.parent, f"{p.stem}_1_{p.suffix}"))
Las versiones inferiores a Python 3.6 utilizan el método de formato de cadena en su lugar:
from pathlib import Path
p = Path(some_path)
p.rename(Path(p.parent, "{}_{}_{}".format(p.stem, 1, p.suffix))
pathlib
biblioteca se presenta en python 3.4, por lo que compartir la respuesta aquí también proporciona exposición para un módulo sólido que muestre su versatilidad y uso para requisitos más complicados.
{}
son para el formato de cadenas, que puedes leer aquí . En última instancia, lo que está sucediendo es que {}
se reemplazan con las variables que se pasan al format
método. Entonces, el primero {}
contendrá lo que está adentro name_without_extension
, y el segundo contendrá el segundo argumento, que es simplemente 1
.
os.rename(old, new)
Esto se encuentra en los documentos de Python: http://docs.python.org/library/os.html
Uso os.rename
. Pero debe pasar la ruta completa de ambos archivos a la función. Si tengo un archivo a.txt
en mi escritorio, lo haré y también tengo que dar el archivo lleno de nombre.
os.rename('C:\\Users\\Desktop\\a.txt', 'C:\\Users\\Desktop\\b.kml')
import os
# Set the path
path = 'a\\b\\c'
# save current working directory
saved_cwd = os.getcwd()
# change your cwd to the directory which contains files
os.chdir(path)
os.rename('a.txt', 'b.klm')
# moving back to the directory you were in
os.chdir(saved_cwd)
chdir()
a un directorio, por ejemplo, ¿qué sucede en Windows cuando se trata de un UNC? Y hacer un chdir()
tiene efectos secundarios. Prefiero simplemente especificar las rutas necesarias para os.rename()
directamente, no chdir()
ing.
Puede usar os.system para invocar el terminal para realizar la tarea:
os.system('mv oldfile newfile')
mv
es un programa de línea de comandos incorporado de Unix para mover / renombrar un archivo.
import os
import re
from pathlib import Path
for f in os.listdir(training_data_dir2):
for file in os.listdir( training_data_dir2 + '/' + f):
oldfile= Path(training_data_dir2 + '/' + f + '/' + file)
newfile = Path(training_data_dir2 + '/' + f + '/' + file[49:])
p=oldfile
p.rename(newfile)
os.path
con moderno pathlib
es bastante dudoso. Ir todo el camino con en su pathlib
lugar.
import shutil
import os
files = os.listdir("./pics/")
for key in range(0, len(files)):
print files[key]
shutil.move("./pics/" + files[key],"./pics/img" + str(key) + ".jpeg")
Esto debería hacerlo. python 3+