2017-08-11 3 views
0
import os 
path="/home/jayabalan/Desktop/testdocker" 
for i in os.listdir(path): 
     os.rename(i,i.upper()) 

Exécution du code ci-dessus sur CentOS 7 renvoie une erreur comme ci-dessous:changement de cas Nom du fichier lance os.error [ErrorNo 2] python sur CentOS 7

Traceback (most recent call last): 
    File "casechange.py", line 4, in <module> 
    os.rename(i,i.upper()) 
OSError: [Errno 2] No such file or directory 

Mais quand j'ai essayé d'imprimer les fichiers par ajouter "print (i)" liste le fichier correctement dans le dossier "testdocker"

Le même problème se produit lors de l'exécution de ce programme casechange dans Windows.

"C:\Program Files\Python\python.exe" "G:/pycharm projects/jaitestpractice/practicefile.py" 
Traceback (most recent call last): 
    File "G:/pycharm projects/jaitestpractice/practicefile.py", line 3, in <module> 
    os.rename(i, i.replace(" ", "_").upper()) 
FileNotFoundError: [WinError 2] The system cannot find the file specified: 'jfas.txt' -> 'JFAS.TXT' 

Répondre

1

Vous avez juste besoin de préfixer le chemin d'accès au fichier.

os.path.join(path, i) 

Le problème est listdir renvoie uniquement les noms de fichiers et regardera dans le répertoire courant pour le fichier.

Alors:

import os 
path="/home/jayabalan/Desktop/testdocker" 
for i in os.listdir(path): 
     os.rename(os.path.join(path, i), i.upper()) 
+0

Mais comment imprime listdir les fichiers correctement dans ledit répertoire quand je donne l'impression (i) énoncé ci-dessous la boucle? –

+0

Il imprime le nom du fichier, mais pas le nom du fichier avec le chemin. 'os.rename' ne sait pas où le fichier est, il a juste une chaîne. –

+0

Cela a du sens! Merci beaucoup!! –