2017-08-25 4 views
0

Ich schreibe den folgenden Code, um die Ziffern und Sonderzeichen zu entfernen, wenn sie am Anfang eines Dateinamens erscheinen. Ich habe eine funktionierende Version des Codes, aber ich versuchte einige Dinge und ich bemerkte etwas, das mich verwirrte.FileNotFoundError - wenn ich nicht os.chdir zu VERZEICHNIS

Unten ist der Code, der gut funktioniert.

import re 
import os 

DIR = 'C:\Rohit\Study\Python\Python_Programs\Basics\OOP' 
os.chdir(DIR) 

for file in os.listdir(DIR): 
    if os.path.isfile(os.path.join(DIR, file)): 
     fname, ext = os.path.splitext(file) 
     fname = re.sub(r'(^[0-9. _-]*)(?=[A-Za-z])', "", fname) 
     new_name = fname + ext 
     os.rename(file, new_name) 

aber wenn ich entfernen Sie einfach die Zeile os.chdir(DIR) von oben Code, starte ich den unten Fehler.

FileNotFoundError: [WinError 2] The system cannot find the file specified: '6738903-. --__..76 test.py' 

Unten ist der Code, der den Fehler auslöst.

DIR_PATH = r'C:\Rohit\Study\Python\Python_Programs\Basics\OOP' 

for file in os.listdir(DIR): 
    if os.path.isfile(os.path.join(DIR, file)): 
     fname, ext = os.path.splitext(file) 
     fname = re.sub(r'(^[0-9. _-]*)(?=[A-Za-z])', "", fname) 
     new_name = fname + ext 
     os.rename(file, new_name) 

Der Fehler wird in der Zeile os.rename() generiert. Also kann mir bitte jemand vorschlagen, was mache ich hier falsch?

Antwort

2

Wenn file ist kein gültiger Pfad relativ zum aktuellen Verzeichnis (was nicht der Fall ist, wenn Sie keine chdir tun) sollten Sie rename mit den vollständigen Pfade bieten. Wie erwartet man sonst, dass die Funktion die umzubenennende Datei findet? Sie haben gut mit os.path.join in isfile warum nicht tun, dass mit umbenennen?

+0

Vielen Dank, meine schlechte ich habe es einfach nicht angesehen, offensichtlich os.rename (Datei, neuer_Name) würde die Datei im aktuellen Pfad finden. Entschuldigung, mein fehler. – Rohit

+0

@Rohit auch nicht, dass Anis verwendet rohe Präfixe für Pfade, so dass er nicht alle Großbuchstaben nach dem Backslash um die Problemumgehung der "seltsame Problem" :) –

+2

beachten Sie bitte, dass chdir ist schlechte Praxis: Was ist, wenn ein anderes Modul eine andere aktuelle erwartet Verzeichnis? Das wird ein Chdir-Kampf sein. Um jeden Preis vermeiden. –

Verwandte Themen