Quiero cambiar a.txt
a b.kml
.
python
file-rename
zjm1126
fuente
fuente
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:
fuente
Esto funcionará para cambiar el nombre o mover un archivo.
fuente
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 connew_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 . Conshutil.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:
Entonces, puedes tomar tu camino y crear un
Path
objeto a partir de él: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
athe_file_1
, entonces podemos obtener la parte del nombre de archivo:Y todavía sostenga la extensión en la mano también:
Podemos realizar nuestra modificación con una simple manipulación de cadenas:
¡Python 3.6 y superior hacen uso de cadenas f!
De otra manera:
Y ahora podemos realizar nuestro cambio de nombre llamando al
rename
método en el objeto de ruta que creamos y agregando elext
para completar la estructura de cambio de nombre que queremos:Más brevemente para mostrar su simplicidad:
Python 3.6+:
Las versiones inferiores a Python 3.6 utilizan el método de formato de cadena en su lugar:
fuente
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 alformat
método. Entonces, el primero{}
contendrá lo que está adentroname_without_extension
, y el segundo contendrá el segundo argumento, que es simplemente1
.os.rename(old, new)
Esto se encuentra en los documentos de Python: http://docs.python.org/library/os.html
fuente
Uso
os.rename
. Pero debe pasar la ruta completa de ambos archivos a la función. Si tengo un archivoa.txt
en mi escritorio, lo haré y también tengo que dar el archivo lleno de nombre.fuente
fuente
chdir()
a un directorio, por ejemplo, ¿qué sucede en Windows cuando se trata de un UNC? Y hacer unchdir()
tiene efectos secundarios. Prefiero simplemente especificar las rutas necesarias paraos.rename()
directamente, nochdir()
ing.Puede usar os.system para invocar el terminal para realizar la tarea:
fuente
mv
es un programa de línea de comandos incorporado de Unix para mover / renombrar un archivo.fuente
os.path
con modernopathlib
es bastante dudoso. Ir todo el camino con en supathlib
lugar.Esto debería hacerlo. python 3+
fuente