1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# -*- coding: utf-8 -*-
"""
Created on Wed Apr 11 13:08:16 2018
@author: hanye
"""
import os, sys, datetime
import ftplib
import re
def transfer_from_ftp(filename_pattern, ftp_path, local_path,
f_log=sys.stdout,
host='192.168.17.12', user='ftpadmin', passwd='hy_csm_16'
):
ccr_ftp=ftplib.FTP(host=host, user=user, passwd=passwd)
ccr_ftp.set_pasv(True)
ccr_ftp.encoding='utf-8'
target_dir=ftp_path
ccr_ftp.cwd(target_dir)
ftp_file_Lst=ccr_ftp.nlst()
transf_target_file_Lst=[]
for fn in ftp_file_Lst:
rematch=re.fullmatch(filename_pattern, fn)
if rematch!=None:
transf_target_file_Lst.append(fn)
if len(transf_target_file_Lst)==0:
print('There is no file matches given pattern', filename_pattern,
datetime.datetime.now(), file=f_log)
return None
else:
os.chdir(local_path)
print('Transfering %d files ...' % len(transf_target_file_Lst),
datetime.datetime.now(), file=f_log)
trfile_c=0
for retr_fn in transf_target_file_Lst:
trfile_c+=1
print('[%d/%d] retrieving %s ...' % (trfile_c, len(transf_target_file_Lst), retr_fn),
datetime.datetime.now(), file=f_log)
with open(retr_fn, 'wb') as local_f:
ccr_ftp.retrbinary('RETR %s' % retr_fn, local_f.write)
print('[%d/%d]' % (trfile_c, len(transf_target_file_Lst)), retr_fn, 'done.',
datetime.datetime.now(), file=f_log)
return transf_target_file_Lst
#
if __name__=='__main__':
local_path=r'D:\CSM\Docs\Projects\短视频\code\write-data-into-es\test\FHTech\fhtech-ftp-files'
pattern='[MTP]_2018-04-09_[NU]\\w{0,2}\\.zip'
trf=transfer_from_ftp(pattern, 'FHTech', local_path)