Por que meu os.rename não está funcionando?
Pergunta
Estou tentando renomear alguns arquivos, mas recebendo um erro desconcertante*. Quando eu corro isto:
if os.path.isfile(fullPath):
print 'fmf exists'
print fullPath
print newFilePath
os.rename(fullPath,newFilePath)
Estou tendo o erro a seguir:
fmf exists
(correct fullPath)
(correct newFilePath, ie. destination)
Traceback (most recent call last):
File "whatever.py", line 374, in ?
os.rename(fullPath,newFilePath)
OSError: [Errno 2] No such file or directory
Desde que eu conhecer Que o arquivo no FullPath existe, estou confuso com o erro. Obviamente, o NewFilePath não existe, porque isso seria burro. Alguma dica?
Obrigado! Alex
*Eles não são todos?
Solução
Você ainda pode obter a exceção se tentar copiar para um diretório que não existe.
Outras dicas
Não consigo ver o funcionamento interno completo do seu código, então aqui estão meus dois centavos:
Seu newFilePath pode conter um diretório que não existe. Se for esse o caso, dependendo do seu sistema operacional, seu programa não pode criar um arquivo em um diretório que não exista. Esse pode ser o seu erro.
Espero que isto ajude
Parece que o pôster resolveu seu problema, mas eu tive o mesmo sintoma e a causa parecia ser diferente. O arquivo que eu estava tentando renomear acabara de ser criado em uma chamada de subprocesso na linha anterior. Se eu executasse meu script novamente, não tive o problema de renomeação, já que o arquivo havia sido criado na execução anterior, mas se eu excluísse o arquivo criado anteriormente, eu teria o mesmo problema com a renomeação. Parece que o OS.Rename estava sendo chamado antes que o subprocesso fosse concluído e o arquivo a ser renomeado, portanto, ainda não existia. Inseri um OS.Wait () após a chamada de subprocesso e acredito que isso resolveu meu problema.
Eu tive o mesmo erro quando meu novo nome de arquivo continha barras para a frente, que são confundidas com os separadores de diretórios no Unix e no Linux. Por exemplo, renomear um arquivo para "4/27/2015" leva a um diretório que não existe e resulta em "nenhum arquivo ou diretório". Você pode resolver isso substituindo as barras para a frente por qualquer outro caractere aceitável.