2013-05-24 4 views
14

Ich möchte die Erweiterung der Dateien in bestimmten Ordner ändern. Ich habe über dieses Thema im Forum gelesen. Ich benutze Ideen, ich habe folgenden Code geschrieben und ich erwarte, dass es funktionieren würde, aber es nicht funktioniert. Ich wäre dankbar für jede Anleitung, um meinen Fehler zu finden.Ändern Sie die Dateierweiterung für Dateien in einem Ordner in Python

import os,sys 
    folder = 'E:/.../1936342-G/test' 
    for filename in os.listdir(folder): 
      infilename = os.path.join(folder,filename) 
      if not os.path.isfile(infilename): continue 
      oldbase = os.path.splitext(filename) 
      infile= open(infilename, 'r') 
      newname = infilename.replace('.grf', '.las') 
      output = os.rename(infilename, newname) 
      outfile = open(output,'w') 
+3

In welcher Art und Weise funktioniert es nicht? Werden die Dateien nicht umbenannt? Gibt es irgendwelche Fehlermeldungen? – dbr

+0

Vielen Dank für Ihre Antwort. Nun, es stoppt in der Zeile 'output = os.rename (infilename, newname)' – user2355306

+0

Es hört einfach auf? Ohne irgendeine Ausgabe? – glglgl

Antwort

17

Die open auf der Quelldatei .text unnötig ist, da os.rename nur die Quelle und das Ziel muss Wege, um die Arbeit zu erledigen. Außerdem gibt os.rename immer None zurück, so dass es keinen Sinn macht, open auf seinem Rückgabewert aufzurufen.

import os,sys 
folder = 'E:/.../1936342-G/test' 
for filename in os.listdir(folder): 
     infilename = os.path.join(folder,filename) 
     if not os.path.isfile(infilename): continue 
     oldbase = os.path.splitext(filename) 
     newname = infilename.replace('.grf', '.las') 
     output = os.rename(infilename, newname) 

Ich habe einfach die beiden open entfernt. Überprüfen Sie, ob dies für Sie funktioniert.

+0

Vielen Dank, wie Sie empfohlen haben, änderte ich die Position der Linie, es geht weiter aber würde wieder auf die Linie 'outfile = open (Ausgang,' w ')' – user2355306

+0

@ user2355306 'os.rename' scheint nicht zurückzukehren der Dateipfad – chenaren

+0

ersetzen ist nicht korrekt, zum Beispiel Datei kann den Namen haben Smth.grform.grf, @elyase Antwort ist besser –

10

Etwas Ähnliches werden alle Dateien im Vollstreckungs Verzeichnis umbenennen, die in .txt enden

import os, sys 

for filename in os.listdir(os.path.dirname(os.path.abspath(__file__))): 
    base_file, ext = os.path.splitext(filename) 
    if ext == ".txt": 
    os.rename(filename, base_file + ".text") 
+0

Vielen Dank für Ihre Hilfe. Unter Verwendung dieses Codes wurde der laufende Prozess in der letzten Zeile mit dem Fehler 'System kann die Daten nicht finden' angelegt, was wäre der Grund? – user2355306

+0

Vielen Dank für Ihre Anleitung es funktioniert gut schreiben Sie jetzt. Ihr Code hilft wie alle anderen empfohlenen Codes auf dieser Seite. Ich habe eine neue Art des Skripts gelernt. – user2355306

10

Sie müssen die Dateien nicht öffnen, um sie umzubenennen, os.rename benötigt nur ihre Pfade. Sehen Sie sich auch die glob Modul:

import glob, os 

for filename in glob.iglob(os.path.join(folder, '*.grf')): 
    os.rename(filename, filename[:-4] + '.las') 
+0

Vielen Dank für Ihre Anleitung, es funktioniert gut schreiben jetzt. – user2355306

+0

@ user2355306, froh zu helfen. – elyase

+0

Danke, dass Sie mir zu diesem Zweck eine neue Art des Skripts gezeigt haben. – user2355306

0
#!/usr/bin/env python 

''' 
Batch renames file's extension in a given directory 
''' 

import os 
import sys 
from os.path import join 
from os.path import splitext 

def main(): 
    try: 
     work_dir, old_ext, new_ext = sys.argv[1:] 
    except ValueError: 
     sys.exit("Usage: {} directory old-ext new-ext".format(__file__)) 

    for filename in os.listdir(work_dir): 
     if old_ext == splitext(filename)[1]: 
      newfile = filename.replace(old_ext, new_ext) 
      os.rename(join(work_dir, filename), join(work_dir, newfile)) 


if __name__ == '__main__': 
    main() 
Verwandte Themen