Respostas:
Use os.rename
:
import os
os.rename('a.txt', 'b.kml')
C:/folder/file.txt
no Windows ou /home/file.txt
no Linux / MacOS).
OSError
nos sistemas Windows. os.path.exists
deve ser usado para verificar se o destino existe antes de renomear. Isso cria um erro "Hora da verificação até a hora do uso", mas é improvável que cause problemas. (Eu não conheço nenhuma maneira fácil de contornar isso - veja aqui .
os.replace
O arquivo pode estar dentro de um diretório; nesse caso, especifique o caminho:
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')
Isso funcionará para renomear ou mover um arquivo.
shutil.move
não é uma boa opção devido a não ser uma operação atômica. Se o arquivo estiver aberto, por exemplo, shutil.move
criará um arquivo com new_name
, mas não excluirá o arquivo old_name
, deixando-o com dois arquivos. os.rename
por outro lado, não fará nada, o que é uma opção melhor . Com shutil.move
, mesmo que você tenha detectado o erro, ainda precisará se preocupar em verificar e excluir o arquivo não autorizado. Só não vale a pena quando existe uma ferramenta melhor:os.rename
.
A partir do Python 3.4, pode-se usar o módulo pathlib para resolver isso.
Se você estiver em uma versão mais antiga, poderá usar a versão suportada encontrada aqui
Vamos supor que você não esteja no caminho raiz (apenas para adicionar um pouco de dificuldade) que deseja renomear e tenha que fornecer um caminho completo, podemos observar isso:
some_path = 'a/b/c/the_file.extension'
Portanto, você pode seguir seu caminho e criar um Path
objeto a partir dele:
from pathlib import Path
p = Path(some_path)
Apenas para fornecer algumas informações sobre esse objeto que temos agora, podemos extrair coisas dele. Por exemplo, se por qualquer motivo desejamos renomear o arquivo modificando o nome do arquivo de the_file
para the_file_1
, podemos obter a parte do nome do arquivo:
name_without_extension = p.stem
E ainda segure a extensão na mão também:
ext = p.suffix
Podemos realizar nossa modificação com uma simples manipulação de string:
Python 3.6 e superior fazem uso de strings f!
new_file_name = f"{name_without_extension}_1"
De outra forma:
new_file_name = "{}_{}".format(name_without_extension, 1)
E agora podemos executar nossa renomeação chamando o rename
método no objeto de caminho que criamos e anexando o ext
para completar a estrutura de renomeação adequada que queremos:
p.rename(Path(p.parent, new_file_name + ext))
Mais em breve para mostrar sua simplicidade:
Python 3.6+:
from pathlib import Path
p = Path(some_path)
p.rename(Path(p.parent, f"{p.stem}_1_{p.suffix}"))
Versões menores que Python 3.6 usam o método de formato de string:
from pathlib import Path
p = Path(some_path)
p.rename(Path(p.parent, "{}_{}_{}".format(p.stem, 1, p.suffix))
pathlib
biblioteca é introduzida no python 3.4, portanto, compartilhar a resposta aqui também oferece exposição a um módulo sólido para mostrar sua versatilidade e uso para requisitos mais complicados.
{}
São para formatação de strings, sobre as quais você pode ler aqui . Por fim, o que está acontecendo é que eles {}
são substituídos pelas variáveis que são passadas para o format
método. Assim, o primeiro {}
retém o que está dentro name_without_extension
e o segundo retém o segundo argumento que é simplesmente 1
.
os.rename(old, new)
Isso pode ser encontrado nos documentos do Python: http://docs.python.org/library/os.html
Use os.rename
. Mas você precisa passar o caminho completo dos dois arquivos para a função. Se eu tiver um arquivo a.txt
na minha área de trabalho, então o farei e também tenho que fornecer também um arquivo renomeado.
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()
um diretório, por exemplo, o que acontece no Windows quando é um UNC? E fazer um chdir()
tem efeitos colaterais. Prefiro apenas especificar os caminhos necessários para os.rename()
diretamente, nada chdir()
.
Você pode usar o os.system para chamar o terminal para realizar a tarefa:
os.system('mv oldfile newfile')
mv
é um programa de linha de comando embutido no unix, para mover / renomear um arquivo.
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
com o moderno pathlib
são bastante duvidosas. Vá até o fim com o 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")
Isso deve servir. python 3+