2010-03-30 7 views
1

J'essaie de renommer certains fichiers, mais en obtenant une erreur déconcertante *. Quand je lance ceci:Pourquoi mon os.rename ne fonctionne-t-il pas?

if os.path.isfile(fullPath): 
    print 'fmf exists' 
    print fullPath 
    print newFilePath 
    os.rename(fullPath,newFilePath) 

Je reçois l'erreur suivante:

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 

Depuis que je sais que le fichier existe à fullPath, je suis déconcerté par l'erreur. Bien sûr, newFilePath n'existe pas, car ce serait idiot. Des indices?

Merci! Alex

* Ne sont-ils pas tous?

+0

Avez-vous essayé de coder en dur l'os.rename() avec le chemin complet et newFilePath que vous avez? – ccheneson

+5

Je suis constamment étonné par les gens qui sortent ce qu'ils considèrent comme des informations sans importance, mais ne l'est probablement pas. Ne bloquez pas ceux qui essaient de vous aider. Cacher l'information _sensitive_, mais pas le nom de fichier dans une situation où le système d'exploitation dit qu'il ne peut pas trouver ce fichier :-) Au strict minimum, il suffit de remplacer les bits sensitve: /gov/nsa/keys.txt =>/sans importance /company/file.txt – paxdiablo

+0

Um, ok, si cela aide vraiment - remplacer les lignes expurgés ce qui suit: /groups/baker/vaughana/Data/10.03.25_Set4_25C/20100325T131243_260hz_gaussian_35msIPI_300s.wav_-10_Cam1/20100325T131243_260hz_gaussian_35msIPI_300s.wav_-10_Cam1 Cela dit, en le repassant, je l'ai regardé de nouveau et j'ai remarqué que le chemin de dest était mauvais, alors c'est une victoire. –

Répondre

1

Vous pouvez toujours obtenir l'exception si vous essayez de copier dans un répertoire qui n'existe pas.

+0

Parfait, merci! J'avais confirmé que le newFilePath n'existait pas (comme ce devrait être le cas), mais le répertoire dest était également erroné. –

1

Je ne peux pas voir les pleins fonctionnement interne de votre code, donc voici mon grain de sel:

Votre newFilePath peut contenir un répertoire qui n'existe pas. Si tel est le cas, en fonction de votre système d'exploitation, votre programme est incapable de créer un fichier dans un répertoire qui n'existe pas. Cela pourrait être votre erreur.

Hope this helps

0

Il semble que l'affiche a résolu son problème, mais j'ai eu le même symptôme et la cause semblait être différent. Le fichier que j'essayais de renommer venait d'être créé dans un appel de sous-processus sur la ligne précédente. Si j'ai réexécuté mon script, je n'ai pas eu le problème de renommer, puisque le fichier a été créé lors de la précédente exécution, mais si j'ai supprimé le fichier précédemment créé, j'obtiendrais le même problème avec renommer. Il semble que os.rename ait été appelé avant la fin du sous-processus et que le fichier à renommer n'existe donc pas encore. J'ai inséré un os.wait() après l'appel de sous-processus, et je crois que cela a résolu mon problème.

0

J'ai eu la même erreur lorsque mon nouveau nom de fichier contenait des barres obliques, qui sont confondues avec les séparateurs de répertoire sous Unix et Linux. Par exemple, renommer un fichier en "4/27/2015.txt" conduit à un répertoire qui n'existe pas et aboutit à "Aucun fichier ou répertoire". Vous pouvez résoudre ce problème en remplaçant les barres obliques avec tout autre caractère acceptable.

+0

Cela semble être une réponse valide, bien que basée sur une prémisse possiblement erronée que les noms de fichiers d'entrée contiennent des caractères '/'. –

Questions connexes