2015-09-29 23 views
6

Ich habe gerade versucht, ein Skript zu erstellen, das Elemente mit der Erweiterung ".zip" löscht.Wie lösche ich eine Datei per Erweiterung in Python?

import sys 
import os 
from os import listdir 

test=os.listdir("/Users/ben/downloads/") 

for item in test: 
    if item.endswith(".zip"): 
     os.remove(item) 

Immer, wenn ich das Skript ausführen, erhalte ich:

OSError: [Errno 2] No such file or directory: 'cities1000.zip' 

cities1000.zip ist offensichtlich eine Datei in meinem Download-Ordner.

Was habe ich hier falsch gemacht? Ist das Problem, dass os.remove den vollständigen Pfad zu der Datei erfordert? Wenn dies das Problem ist, dann wie kann ich das in diesem aktuellen Skript tun, ohne es komplett neu zu schreiben.

+0

os.listdir („/ Users/ben/downloads /“, ist dies nicht der vollständige Pfad ist, oder? –

+0

dies der vollständige Pfad ist – stephan

+0

Ich denke, müssen Sie den Pfad setzen und den Dateinamen zusammen Löschen –

Antwort

4

Sie den Pfad in eine dir_name Variable gesetzt, dann os.path.join für Ihre os.remove verwenden.

import os 

dir_name = "/Users/ben/downloads/" 
test = os.listdir(dir_name) 

for item in test: 
    if item.endswith(".zip"): 
     os.remove(os.path.join(dir_name, item)) 
+0

Beachten Sie, dass es eine schlechte Übung ist, dir als Variablennamen zu verwenden, also auch die Datei, da sie auch in Funktionen eingebaut sind. https://docs.python.org/3/library/functions.html#dir – borgr

+0

@ borg Ich habe alle Änderungen rückgängig gemacht, ein paar Änderungen vorgenommen und 's/dir/dir_name/g'. Sieht so aus, als hätte ich von Anfang an" dir ". Das hätte nicht dort sein sollen, guter Haken. – idjaw

+1

Sieht aus wie' sys' ist nicht notwendig –

0

Prepend das Verzeichnis, in dem Dateinamen

os.remove("/Users/ben/downloads/" + item) 

EDIT: oder das aktuelle Arbeitsverzeichnis os.chdir mit ändern.

3

Für diese Operation müssen Sie den Dateinamen an den Dateipfad anhängen, damit der Befehl weiß, in welchem ​​Ordner Sie suchen.

Sie können dies in Python mit dem Befehl os.path.join richtig und portabel machen.
Zum Beispiel:

import sys 
import os 
from os import listdir 

directory = "/Users/ben/downloads/" 
test = os.listdir(directory) 

for item in test: 
    if item.endswith(".zip"): 
     os.remove(os.path.join(directory, item)) 
0
origfolder = "/Users/ben/downloads/" 
test = os.listdir(origfolder) 

for item in test: 
    if item.endswith(".zip"): 
     os.remove(os.path.join(origfolder, item)) 

Die dirname ist in der os.listdir Ausgang nicht enthalten. Sie müssen es anhängen, um auf die Datei aus der von der Funktion zurückgegebenen Liste zu verweisen.

1

Alternativer Ansatz, der vermeidet, sich immer und immer wieder anzuschließen: Verwenden Sie glob Modul, um einmal beizutreten, dann lassen Sie es die Pfade direkt zurück.

import glob 
import os 

dir = "/Users/ben/downloads/" 

for zippath in glob.iglob(os.path.join(dir, '*.zip')): 
    os.remove(zippath) 
Verwandte Themen