小弟是python新手,為了實現從FTP抓下檔案後,壓縮成zip檔,從網路上去找了以下的code來實現我要的目的‧在壓縮成zip檔備份後,要刪除從ftp抓下的檔案,用在壓縮成zip檔備份後,要刪除從ftp抓下的檔案,用shutil.remtree時最後會有一個error顯示有一個檔案正由另一個程序使用而沒辦法完全清除‧ 請問我該如何可以在最後把下載的檔案全部刪除‧
#判斷及增加從FTP下載到本地資料夾
import os,os.path
if not os.path.exists(localdir):
os.makedirs(localdir)
#從FTP下載到本地資料夾
from ftplib import FTP
ftp = FTP()
timeout = 30
port = 21
ftp.connect('xx.xx.xx.xx', port, timeout) # 連線FTP伺服器
ftp.login('user', 'pass') # 登入
print(ftp.getwelcome() ) # 獲得歡迎資訊
ftp.cwd(remotedir) # 設定FTP路徑
list = ftp.nlst() # 獲得目錄列表
print(list)
for name in list:
print(name) # 列印檔名字
path = localdir + name # 檔案儲存路徑
f = open(path, 'wb') # 開啟要儲存檔案
filename = 'RETR ' + name # 儲存FTP檔案
ftp.retrbinary(filename, f.write) # 儲存FTP上的檔案
#ftp.delete(name) # 刪除FTP檔案
#ftp.storbinary('STOR ' + filename, open(path, 'rb')) # 上傳FTP檔案
ftp.quit() # 退出FTP伺服器
#壓所資料夾成zip
import zipfile
def zip_dir(dirname,zipfilename):
filelist = []
if os.path.isfile(dirname):
filelist.append(dirname)
else :
for root, dirs, files in os.walk(dirname):
for name in files:
filelist.append(os.path.join(root, name))
zf = zipfile.ZipFile(zipfilename, "w", zipfile.zlib.DEFLATED)
for tar in filelist:
arcname = tar[len(dirname):]
#print arcname
zf.write(tar,arcname)
zf.close()
if name == 'main':
zip_dir(localdir, backupdir)
#刪除資料夾
import shutil
if os.path.exists(localdir):
shutil.rmtree(localdir)
f = open(path, 'wb') # 開啟要儲存檔案
改用
with open(path, 'wb' ) as f :
ftp.retrbinary(filename, f.write) # 儲存FTP上的檔案
加入
f.close()
可以整理一下你的原始碼,放到 < > 的程式框裡嗎?這樣看好辛苦,且請把你的錯誤訊息也完整PO上來
最後一行加個參數試試
shutil.rmtree(localdir, ignore_errors=True)