2010-03-22 35 views

Respuesta

192

Uso os.rename:

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

No se olvide de "import os" – Vladtn

+4

Debe tenerse en cuenta que si los archivos no están en el directorio de trabajo necesitará la ruta completa. – EndermanAPM

33
import shutil 

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

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

+5

'shutil.move' no es un buen opción debido a no ser una operación atómica. Si el archivo está abierto, por ejemplo, 'shutil.move' creará un archivo con' new_name', pero no eliminará el archivo con 'old_name', dejándolo con dos archivos. 'os.rename' por el contrario no hará nada, que es una * mejor opción *. Con 'shutil.move', incluso si descubriera el error, aún tendría que preocuparse por comprobar y eliminar el archivo fraudulento. Simplemente no vale la pena cuando ** existe una herramienta mejor: 'os.rename' **. – mvbentes

20

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) 
3

Puede usar os.system para invocar terminal para realizar la tarea:

os.system('mv oldfile newfile') 
+0

Solo en una máquina basada en Unix, ¿verdad? – LarsH

+0

sí, esto funcionará solo en una máquina basada en Unix ya que 'mv' es un programa de línea de comandos incorporado de Unix para mover/cambiar el nombre de un archivo. –

+3

¿Por qué invocaría un terminal y definiría un comando UNIX solamente cuando puede hacerlo desde python de una manera multiplataforma? – EndermanAPM

4

A partir de Python 3.4 se puede utilizar el módulo de pathlib para resolver esto.

Si quieres pasar a ser en una versión anterior, puede utilizar la versión portado encontró here

Vamos a suponer que usted no está en la ruta de raíz (sólo para añadir un poco de dificultad a ella) desea cambiar el nombre y tenemos que proporcionar una ruta completa, podemos ver esto:

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

por lo tanto, puede tomar su camino y crear un objeto Path fuera de él:

from pathlib import Path 
p = Path(some_path) 

Solo para proporcionar algo de 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 del archivo de the_file a the_file_1, entonces podemos llegar a la parte de nombre de archivo:

name_without_extension = p.stem 

Y todavía tienen la extensión en la mano, así:

ext = p.suffix 

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

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

Y ahora podemos realizar nuestro cambio de nombre llamando el método rename en el objeto de trazado que hemos creado y añadiendo el ext para completar la estructura de cambio de nombre adecuado que queremos:

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

En pocas palabras para mostrar su simplicidad:

from pathlib import Path 
p = Path(some_path) 
p.rename(Path(p.parent, "{}_{}".format(p.stem, 1) + p.ext)) 
+0

¿Por qué harías esto en lugar de la respuesta aceptada? Parece mucho más complicado – rbennell

+1

Bueno, @rbennell, la mayor parte de esta respuesta es una explicación. La respuesta es realmente solo las tres líneas al final. Además, la respuesta aceptada se hace explícitamente para ese mismo cambio de nombre. Esta respuesta proporciona una manera de mostrar cómo puede manipular el nombre de archivo para conservar las partes que desea en la ruta o el nombre del archivo. Además, la biblioteca 'pathlib' se introdujo en Python 3.4, por lo que compartir la respuesta aquí también proporciona exposición para un módulo sólido para mostrar su versatilidad y uso para requisitos más complicados. – idjaw

0
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+

0

Use os.rename. Pero debe pasar la ruta completa de ambos archivos a la función. Si tengo un archivo a.txt en mi escritorio, entonces lo haré y también tengo que dar el nombre completo del archivo renombrado.

os.rename ('C: \ Users \ Desktop \ a.txt', 'C: \ Users \ Desktop \ b.kml')

Cuestiones relacionadas