2015-09-29 9 views
6

Po prostu próbowałem zrobić skrypt, który usuwa elementy przez rozszerzenie ".zip".Jak usunąć plik według rozszerzenia w języku 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) 

Ilekroć uruchomić skrypt uzyskać:

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

cities1000.zip jest oczywiście w moim folderze plik do pobrania.

Co zrobiłem źle tutaj? Czy problem z os.remove wymaga pełnej ścieżki do pliku? Jeśli to jest problem, to jak mogę to zrobić w tym bieżącym skrypcie, nie przepisując go całkowicie.

+0

os.listdir („/ Users/Ben/pliki do pobrania /”, to nie jest pełną ścieżką, prawda? –

+0

to pełna ścieżka – stephan

+0

Chyba trzeba umieścić ścieżkę i nazwę pliku razem Usunięcie –

Odpowiedz

4

Można ustawić ścieżkę do zmiennej dir_name, a następnie użyć os.path.join dla os.remove.

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

Zauważ, że niewłaściwym zwyczajem jest używanie dir jako nazwy zmiennej, więc jest to plik, ponieważ są one również wbudowane w funkcje: https://docs.python.org/3/library/functions.html#dir – borgr

+0

@ borgr Wycofałem wszystkie edycje, wprowadziłem kilka zmian i 's/dir/dir_name/g' Wygląda na to, że miałem' dir' od początku.To nie powinno było tam być, dobry haczyk – idjaw

+1

Wygląda jak 'sys' nie jest konieczne –

0

Prepend katalog do pliku

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

EDIT: albo zmienić bieżący katalog roboczy za pomocą os.chdir.

3

Do tej operacji należy dodać nazwę pliku do ścieżki pliku, aby polecenie wiedziało, jakiego katalogu szuka.

Możesz to zrobić poprawnie i przenośnie w Pythonie za pomocą polecenia os.path.join.
Na przykład:

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)) 

dirname nie jest wliczone w wyjściu os.listdir. Musisz dołączyć go, aby odwołać się do pliku z listy zwróconej przez wspomnianą funkcję.

1

Alternatywne podejście, które pozwala uniknąć wielokrotnego łączenia się: Użyj modułu glob, aby połączyć się raz, a następnie pozwól mu bezpośrednio przekazać ścieżki.

import glob 
import os 

dir = "/Users/ben/downloads/" 

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