>>> from ftplib import FTP >>> ftp = FTP('ftp.debian.org') # connect to host, default port >>> ftp.login() # user anonymous, passwd anonymous@ '230 Login successful.' >>> ftp.cwd('debian') # change into "debian" directory >>> ftp.retrlines('LIST') # list directory contents -rw-rw-r-- 1 1176 1176 1063 Jun 15 10:18 README ... drwxr-sr-x 5 1176 1176 4096 Dec 19 2000 pool drwxr-sr-x 4 1176 1176 4096 Nov 17 2008 project drwxr-xr-x 3 1176 1176 4096 Oct 10 2012 tools '226 Directory send OK.' >>> modtime = f.sendcmd("MDTM file.name") # дата изменения >>> ftp.retrbinary('RETR README', open('README', 'wb').write) '226 Transfer complete.' >>> ftp.quit()
FTP.delete(filename)
Remove the file named filename from the server. If successful, returns the text of the response, otherwise raises error_perm on permission errors or error_reply on other errors.
alexbadaloffПробую делать так:
Если файлы только создаются, и в последствии не модифицируются, то подойдёт команда FTP:MDTM — Возвращает время модификации файла.
ftp = FTP(FTP_serv, FTP_user, FTP_pass) FTP_date = ftp.sendcmd('MDTM ' + fileName)
for fileName in files: num = data1 - FTP_date if num > (86400 * days): ftp.delete(fileName)
data1 = time.time()
alexbadaloffСервер и компьютер, где будет работать скрипт в одном часовом поясе, просто в разных концах города стоят. Насчет перевода даты, сейчас попробую привести в нужный тип.
Ещё надо учесть часовые пояса. Может быть нужно будет внести корректировку в часы.
>>>import datetime >>>import time >>>time.mktime(datetime.datetime.strptime('213 20150113061129'[4:], "%Y%m%d%H%M%S").timetuple()) 1421118689.0
alexbadaloffЯ наверное не познал еще всех удобств питона, потому сделал все так:
Как-то так можно
ftp = FTP(FTP_serv, FTP_user, FTP_pass) FTP_files = ftp.nlst() for fileName in FTP_files: FTP_date = ftp.sendcmd('MDTM ' + fileName) FTP_year = int(FTP_date[4:8]) FTP_month = int(FTP_date[8:10]) FTP_day = int(FTP_date[10:12]) FTP_hour = int(FTP_date[12:14]) FTP_min = int(FTP_date[14:16]) FTP_sec = int(FTP_date[16:18]) dt_obj = datetime(FTP_year, FTP_month, FTP_day, FTP_hour, FTP_min, FTP_sec) time_tuple = dt_obj.timetuple() FTP_date = time.mktime(time_tuple) num = data1 - FTP_date if num > (86400 * days): ftp.delete(fileName) log.write(datetime.datetime.now().ctime() + ' => Файл ' + fileName + ' удален\n') ftp.close()
FTP_files = ftp.nlst()
>>> import datetime >>> import time >>> time.mktime(datetime.datetime.strptime('550 File not found'[4:], "%Y%m%d%H%M%S").timetuple()) Traceback (most recent call last): File "<pyshell#2>", line 1, in <module> time.mktime(datetime.datetime.strptime('550 File not found'[4:], "%Y%m%d%H%M%S").timetuple()) File "C:\Python34\lib\_strptime.py", line 500, in _strptime_datetime tt, fraction = _strptime(data_string, format) File "C:\Python34\lib\_strptime.py", line 337, in _strptime (data_string, format)) ValueError: time data 'File not found' does not match format '%Y%m%d%H%M%S' >>>
alexbadaloffДоступ к удаленной папке есть только у этого скрипта через FTP. Соответственно, никто там без его ведома никуда ничего не перенесет. Да и файлов то там всего 16 штук будет.
И после этого в for, когда он дойдет , например, до тысячного файла, но его не будет существовать, удалён или перемещён.