2015-09-29 6 views
6

मैं बस एक स्क्रिप्ट बनाने की कोशिश कर रहा था जो ".zip" एक्सटेंशन द्वारा आइटम हटा देता है।पायथन में एक्सटेंशन द्वारा फ़ाइल को कैसे हटाएं?

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) 

जब भी मैं स्क्रिप्ट चलाने मैं:

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

cities1000.zip स्पष्ट रूप से मेरी डाउनलोड फ़ोल्डर में एक फाइल है।

मैंने यहां क्या गलत किया? क्या यह मुद्दा है कि os.remove को फ़ाइल के पूर्ण पथ की आवश्यकता है? यदि यह मुद्दा है, तो मैं इस वर्तमान स्क्रिप्ट में इसे पूरी तरह से लिखने के बिना कैसे कर सकता हूं।

+0

os.listdir ("/ उपयोगकर्ताओं/बेन/डाउनलोड /", इस, पूर्ण पथ नहीं है यह इस पूर्ण पथ –

+0

हटाने। – stephan

+0

मुझे लगता है कि आप के लिए एक साथ पथ और फ़ाइल नाम डाल करने के लिए है है? –

उत्तर

4

आप एक dir_name चर करने के लिए पथ सेट कर सकते तो अपने os.remove के लिए os.path.join का उपयोग करें।

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

ध्यान दें कि एक वैरिएबल नाम के रूप में डीआईआर का उपयोग करना बुरा अभ्यास है, इसलिए फ़ाइल है, क्योंकि वे फ़ंक्शंस में भी बनाई गई हैं। https://docs.python.org/3/library/functions.html#dir – borgr

+0

@ बोर्गर मैंने सभी संपादनों को वापस ले लिया, कुछ बदलाव किए और 's/dir/dir_name/g'। ऐसा लगता है कि मेरे पास शुरुआत से 'डीआईआर' था। ऐसा नहीं होना चाहिए था, अच्छा पकड़। – idjaw

+1

' sys' आवश्यक नहीं है। –

0

प्रारंभ में लगा फ़ाइल नाम के लिए निर्देशिका

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

संपादित करें: या os.chdir का उपयोग कर वर्तमान कार्यशील निर्देशिका बदल जाते हैं।

3

इस ऑपरेशन के लिए आपको फ़ाइल पथ पर फ़ाइल नाम जोड़ना होगा ताकि आदेश जानता है कि आप किस फ़ोल्डर में देख रहे हैं।

आप इसे os.path.join कमांड का उपयोग करके पाइथन में सही तरीके से और पोर्टेबल तरीके से कर सकते हैं।
उदाहरण के लिए:

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 os.listdir उत्पादन में शामिल नहीं है। आपको फ़ंक्शन द्वारा लौटाई गई सूची से फ़ाइल को संदर्भित करने के लिए इसे संलग्न करना होगा।

1

वैकल्पिक दृष्टिकोण जो स्वयं को शामिल करने से बचाता है: glob मॉड्यूल का उपयोग एक बार में शामिल होने के लिए करें, फिर इसे आपको सीधे पथ वापस दें।

import glob 
import os 

dir = "/Users/ben/downloads/" 

for zippath in glob.iglob(os.path.join(dir, '*.zip')): 
    os.remove(zippath) 
संबंधित मुद्दे