Respuestas:
Uso os.rename:
import os
os.rename('a.txt', 'b.kml')
C:/folder/file.txten Windows o /home/file.txten Linux / MacOS).
OSErroren los sistemas Windows. os.path.existsdebe 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.moveNo es una buena opción por no ser una operación atómica. Si el archivo está abierto, por ejemplo, shutil.movecreará un archivo con new_name, pero no lo eliminará y, old_namepor lo tanto, le dejará dos archivos. os.renamepor 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 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 cualquier razón queremos cambiar el nombre del archivo modificando el nombre de archivo de the_filea 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 renamemétodo en el objeto de ruta que creamos y agregando el extpara 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))
pathlibbiblioteca 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 formatmé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.txten 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')
mves 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.pathcon moderno pathlibes bastante dudoso. Ir todo el camino con en su pathliblugar.
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+