<code>ftp</code>
<code>'''第一个例子'''</code>
<code>def</code> <code>get_C(</code><code>self</code><code>,target_dir</code><code>=</code><code>None</code><code>):</code>
<code> </code><code>C </code><code>=</code> <code>[]</code>
<code> </code><code>print</code> <code>"PWD:"</code><code>, </code><code>self</code><code>.ftp.pwd()</code>
<code> </code><code>if</code> <code>target_dir </code><code>is</code> <code>not</code> <code>None</code><code>:</code>
<code> </code><code>self</code><code>.ftp.cwd(target_dir)</code><code># change working directory to target_dir</code>
<code> </code><code>server_file_list </code><code>=</code> <code>[]</code>
<code> </code><code>fuck_callback </code><code>=</code> <code>lambda</code> <code>x: (server_file_list.append(x))</code>
<code> </code><code>self</code><code>.ftp.retrlines(</code><code>'LIST'</code><code>, fuck_callback)</code>
<code> </code><code># print server_file_list</code>
<code> </code><code>server_file_items </code><code>=</code> <code>self</code><code>.filter_dir_list(server_file_list)</code>
<code> </code><code>for</code> <code>item </code><code>in</code> <code>server_file_items:</code>
<code> </code><code>if</code> <code>item.is_dir:</code>
<code> </code><code>print</code> <code>'name = '</code><code>, item.name</code>
<code> </code><code>sub_C </code><code>=</code> <code>self</code><code>.get_C(item.name)</code>
<code> </code><code># sub_C = ['/'+item.name+'/'+cc.name for cc in sub_C]</code>
<code> </code><code>for</code> <code>cc </code><code>in</code> <code>sub_C:</code>
<code> </code><code>cc.name </code><code>=</code> <code>'/'</code> <code>+</code> <code>item.name </code><code>+</code> <code>cc.name</code>
<code> </code><code>print</code> <code>'name --- '</code><code>,cc.name</code>
<code> </code><code>C.extend(sub_C)</code>
<code> </code><code>else</code><code>:</code>
<code> </code><code>item.name </code><code>=</code> <code>'/'</code> <code>+</code> <code>item.name</code>
<code> </code><code>C.append(item)</code>
<code> </code><code>self</code><code>.ftp.cwd(</code><code>'..'</code><code>)</code>
<code> </code><code>return</code> <code>C</code>
<code>def</code> <code>runtest(</code><code>self</code><code>,next_dir):</code>
<code> </code><code>C </code><code>=</code> <code>ftp.get_C(next_dir)</code>
<code> </code><code>next_dir2</code><code>=</code><code>next_dir[</code><code>2</code><code>:]</code>
<code> </code><code>C </code><code>=</code> <code>[cc.pack </code><code>for</code> <code>cc </code><code>in</code> <code>C]</code>
<code> </code><code>for</code> <code>i </code><code>in</code> <code>C:</code>
<code> </code><code>print</code> <code>i</code>
<code> </code><code>next_dir1</code><code>=</code><code>i</code>
<code> </code><code>pos</code><code>=</code><code>next_dir1.rindex(</code><code>'/'</code><code>)</code>
<code> </code><code>next_dir3</code><code>=</code> <code>next_dir1[</code><code>0</code><code>:pos]</code>
<code> </code><code>all_path</code><code>=</code><code>next_dir2 </code><code>+</code> <code>next_dir3</code>
<code> </code><code>print</code> <code>all_path</code>
<code> </code><code>next_dir_local </code><code>=</code> <code>all_path.decode(</code><code>'utf8'</code><code>).encode(</code><code>'gbk'</code><code>)</code>
<code> </code><code>try</code><code>:</code>
<code> </code><code>print</code> <code>next_dir_local</code>
<code> </code><code>#os.makedirs(next_dir_local)</code>
<code> </code><code>except</code> <code>OSError:</code>
<code> </code><code>pass</code>
<code> </code><code>#os.chdir(next_dir_local)</code>
<code> </code><code>localfile</code><code>=</code><code>next_dir1[pos</code><code>+</code><code>1</code><code>:]</code>
<code> </code><code>print</code> <code>localfile</code>
<code> </code><code>allall_path</code><code>=</code><code>all_path </code><code>+</code> <code>"/"</code> <code>+</code> <code>localfile</code>
<code> </code><code>self</code><code>.ftp.cwd(</code><code>'/'</code><code>)</code>
<code> </code><code>print</code> <code>self</code><code>.ftp.pwd()</code>
<code> </code><code>#file_handler = open(localfile, 'wb')</code>
<code> </code><code>#self.ftp.retrbinary('RETR %s' % (allall_path), file_handler.write)</code>
<code> </code><code>#file_handler.close()</code>
<code>'''第一个例子获取成/home/user/test.txt这样的列表'''</code>
<code>第二个例子</code>
<code>def</code> <code>download_files(</code><code>self</code><code>, localdir</code><code>=</code><code>'./'</code><code>, remotedir</code><code>=</code><code>'./'</code><code>):</code>
<code> </code><code>try</code><code>:</code>
<code> </code><code>self</code><code>.ftp.cwd(remotedir)</code>
<code> </code><code>except</code><code>:</code>
<code> </code><code>debug_print(</code><code>'目录%s不存在,继续...'</code> <code>%</code> <code>remotedir)</code>
<code> </code><code>return</code>
<code> </code><code>if</code> <code>not</code> <code>os.path.isdir(localdir):</code>
<code> </code><code>pass</code>
<code> </code><code>#os.makedirs(localdir)</code>
<code> </code><code>debug_print(</code><code>'切换至目录 %s'</code> <code>%</code> <code>self</code><code>.ftp.pwd())</code>
<code> </code><code>self</code><code>.file_list </code><code>=</code> <code>[]</code>
<code> </code><code>self</code><code>.ftp.</code><code>dir</code><code>(</code><code>self</code><code>.get_file_list)</code>
<code> </code><code>remotenames </code><code>=</code> <code>self</code><code>.file_list</code>
<code> </code><code>print</code><code>(remotenames)</code>
<code> </code><code># return</code>
<code> </code><code>for</code> <code>item </code><code>in</code> <code>remotenames:</code>
<code> </code><code>filetype </code><code>=</code> <code>item[</code><code>0</code><code>]</code>
<code> </code><code>filename </code><code>=</code> <code>item[</code><code>1</code><code>]</code>
<code> </code><code>print</code> <code>"filename:"</code><code>,filename</code>
<code> </code><code>local </code><code>=</code> <code>os.path.join(localdir, filename)</code>
<code> </code><code>if</code> <code>filetype </code><code>=</code><code>=</code> <code>'d'</code><code>:</code>
<code> </code><code>self</code><code>.download_files(local, filename)</code>
<code> </code><code>elif</code> <code>filetype </code><code>=</code><code>=</code> <code>'-'</code><code>:</code>
<code> </code><code>self</code><code>.download_file(local, filename)</code>
<code> </code><code>debug_print(</code><code>'返回上层目录 %s'</code> <code>%</code> <code>self</code><code>.ftp.pwd())</code>
<code>f.download_files(rootdir_local, rootdir_remote)</code>
<code>'''第二个例子'''</code>
区别很大
ftp:
ftp.retrlines('LIST', fuck_callback)
完全是循环,目录的进行循环操作,而文件下载。最底层目录的文件下载完,回归上级目录。继续循环。
self.ftp.pwd()
self.ftp.dir(self.get_file_list)
get_file_list(self, line)
self.ftp.cwd('..')
self.ftp.cwd(remotedir)
self.download_file(local, filename)
建立好本地目录,然后cd到远程目录,下载
代码格式乱了,详细例子
ftp 第一个例子
<code># !/usr/bin/env python</code>
<code># -*-coding:utf-8-*-</code>
<code>from</code> <code>ftplib </code><code>import</code> <code>FTP</code>
<code>from</code> <code>time </code><code>import</code> <code>sleep</code>
<code>import</code> <code>os, datetime,logging,time</code>
<code>import</code> <code>string,re</code>
<code>d1 </code><code>=</code> <code>datetime.datetime.now()</code>
<code>'''months=['Jan','Feb','March','Apr','May','Jun','Jul','Aug','Sep']</code>
<code>patternm = r'2017.*|201611.*|201612.*|201610.*'</code>
<code>patternxml = r'.*2016'</code>
<code>patternx = r'xx.*'''</code><code>''</code>
<code>HOST </code><code>=</code> <code>"192.168.1.100"</code>
<code>USER </code><code>=</code> <code>"ftpuser3"</code>
<code>PASSWORD </code><code>=</code> <code>"test1passwd"</code>
<code>class</code> <code>Myfile(</code><code>object</code><code>):</code>
<code> </code><code>def</code> <code>__init__(</code><code>self</code><code>, name, size, mtime):</code>
<code> </code><code>self</code><code>.name </code><code>=</code> <code>name </code><code># 文件名字</code>
<code> </code><code>self</code><code>.mtime </code><code>=</code> <code>mtime </code><code># 文件创建时间</code>
<code> </code><code>self</code><code>.is_dir </code><code>=</code> <code>False</code> <code># 是否为文件夹,默认为不是文件夹</code>
<code> </code><code>#self.size = float(size) / (1024 * 1024) # 文件大小</code>
<code> </code><code>size </code><code>=</code> <code>float</code><code>(size)</code>
<code> </code><code>if</code> <code>size > </code><code>1024</code><code>*</code><code>1024</code><code>:</code>
<code> </code><code>self</code><code>.size </code><code>=</code> <code>str</code><code>(</code><code>'%.2f'</code><code>%</code><code>(size </code><code>/</code> <code>(</code><code>1024</code><code>*</code><code>1024</code><code>))) </code><code>+</code> <code>'MB'</code>
<code> </code><code>elif</code> <code>size > </code><code>1024</code><code>:</code>
<code> </code><code>self</code><code>.size </code><code>=</code> <code>str</code><code>(</code><code>'%.2f'</code><code>%</code><code>(size </code><code>/</code> <code>1024</code><code>)) </code><code>+</code> <code>'KB'</code>
<code> </code><code>else</code><code>:</code>
<code> </code><code>self</code><code>.size </code><code>=</code> <code>str</code><code>(size) </code><code>+</code> <code>'Bytes'</code>
<code> </code><code>@</code><code>property</code>
<code> </code><code>def</code> <code>is_file(</code><code>self</code><code>):</code>
<code> </code><code>return</code> <code>not</code> <code>self</code><code>.is_dir</code>
<code> </code><code>def</code> <code>dir_property(</code><code>self</code><code>):</code>
<code> </code><code>if</code> <code>self</code><code>.is_dir</code><code>=</code><code>=</code><code>True</code><code>:</code>
<code> </code><code>return</code> <code>'dir'</code>
<code> </code><code>return</code> <code>'file'</code>
<code> </code><code>def</code> <code>show(</code><code>self</code><code>):</code>
<code> </code><code>print</code> <code>'[%s], [%s], [%s], [%s]'</code> <code>%</code> <code>(</code><code>self</code><code>.name, </code><code>self</code><code>.size, </code><code>self</code><code>.mtime, </code><code>self</code><code>.dir_property)</code>
<code> </code><code>def</code> <code>pack(</code><code>self</code><code>):</code>
<code> </code><code>"""</code>
<code> </code><code>将myfile对象封装为一个字符串</code>
<code> </code><code>:return:</code>
<code> </code><code>#return '[%s][%s][%s]'%(self.name, self.size, self.mtime)</code>
<code> </code><code>#return '[%s][%s]'%(self.name, self.size)</code>
<code> </code><code>return</code> <code>'%s'</code> <code>%</code><code>(</code><code>self</code><code>.name)</code>
<code>class</code> <code>CLASS_FTP:</code>
<code> </code><code>def</code> <code>__init__(</code><code>self</code><code>, HOST, USER, PASSWORD, PORT</code><code>=</code><code>'21'</code><code>):</code>
<code> </code><code>self</code><code>.HOST </code><code>=</code> <code>HOST</code>
<code> </code><code>self</code><code>.USER </code><code>=</code> <code>USER</code>
<code> </code><code>self</code><code>.PASSWORD </code><code>=</code> <code>PASSWORD</code>
<code> </code><code>self</code><code>.PORT </code><code>=</code> <code>PORT</code>
<code> </code><code>self</code><code>.ftp </code><code>=</code> <code>FTP()</code>
<code> </code><code>self</code><code>.flag </code><code>=</code> <code>0</code> <code># 0:no connected, 1: connting</code>
<code> </code><code>def</code> <code>Connect(</code><code>self</code><code>):</code>
<code> </code><code>if</code> <code>self</code><code>.flag </code><code>=</code><code>=</code> <code>1</code><code>:</code>
<code> </code><code>logging.info(</code><code>"ftp Has been connected"</code><code>)</code>
<code> </code><code>self</code><code>.ftp.connect(</code><code>self</code><code>.HOST, </code><code>self</code><code>.PORT)</code>
<code> </code><code>self</code><code>.ftp.login(</code><code>self</code><code>.USER, </code><code>self</code><code>.PASSWORD)</code>
<code> </code><code># self.ftp.set_pasv(False)</code>
<code> </code><code>self</code><code>.ftp.set_debuglevel(</code><code>0</code><code>)</code>
<code> </code><code>self</code><code>.flag </code><code>=</code> <code>1</code>
<code> </code><code>except</code> <code>Exception:</code>
<code> </code><code>logging.info(</code><code>"FTP login failed"</code><code>)</code>
<code> </code><code>def</code> <code>str_codec_std(</code><code>self</code><code>,mystr):</code>
<code> </code><code>return</code> <code>mystr.decode(</code><code>'utf8'</code><code>).encode(</code><code>'gbk'</code><code>)</code>
<code> </code><code>def</code> <code>dirmakedirs(</code><code>self</code><code>,next_dir_local,local_dir):</code>
<code> </code><code># next_dir_local2= next_dir_local.split('/')[1:]</code>
<code> </code><code>next_dir_local2 </code><code>=</code> <code>next_dir_local[</code><code>1</code><code>:].replace(</code><code>'/'</code><code>, </code><code>'\\'</code><code>)</code>
<code> </code><code># next_dir_localw = next_dir_local2.decode('utf8').encode('gbk') # windows用这个</code>
<code> </code><code>s_file </code><code>=</code> <code>os.path.join(local_dir, next_dir_local2)</code>
<code> </code><code>print</code> <code>"s_file"</code><code>, s_file</code>
<code> </code><code>if</code> <code>not</code> <code>os.path.exists(s_file):</code>
<code> </code><code>os.makedirs(s_file)</code>
<code> </code><code>os.chdir(s_file)</code>
<code> </code><code>def</code> <code>filter_dir_list(</code><code>self</code><code>,mystr_list):</code>
<code> </code><code>res </code><code>=</code> <code>[]</code>
<code> </code><code>for</code> <code>mystr </code><code>in</code> <code>mystr_list:</code>
<code> </code><code>#mystr = self.str_codec_std(mystr)</code>
<code> </code><code># print "mystr is :%s" % mystr</code>
<code> </code><code>file_info </code><code>=</code> <code>string.split(mystr, maxsplit</code><code>=</code><code>8</code><code>)</code>
<code> </code><code>name </code><code>=</code> <code>file_info[</code><code>8</code><code>]</code>
<code> </code><code>print</code> <code>'name = '</code><code>, name</code>
<code> </code><code>if</code> <code>name </code><code>=</code><code>=</code> <code>'.'</code> <code>or</code> <code>name </code><code>=</code><code>=</code> <code>'..'</code><code>:</code>
<code> </code><code>continue</code>
<code> </code><code>size </code><code>=</code> <code>file_info[</code><code>4</code><code>]</code>
<code> </code><code>mtime </code><code>=</code> <code>'%s-%s-%s'</code> <code>%</code> <code>(file_info[</code><code>5</code><code>], file_info[</code><code>6</code><code>], file_info[</code><code>7</code><code>])</code>
<code> </code><code>myfile </code><code>=</code> <code>Myfile(name</code><code>=</code><code>name, size</code><code>=</code><code>size, mtime</code><code>=</code><code>mtime)</code>
<code> </code><code>dir_info </code><code>=</code> <code>file_info[</code><code>0</code><code>]</code>
<code> </code><code>if</code> <code>dir_info[</code><code>0</code><code>] </code><code>=</code><code>=</code> <code>'d'</code><code>:</code>
<code> </code><code>myfile.is_dir </code><code>=</code> <code>True</code>
<code> </code><code>res.append(myfile)</code>
<code> </code><code>return</code> <code>res</code>
<code> </code><code>def</code> <code>get_C(</code><code>self</code><code>,target_dir</code><code>=</code><code>None</code><code>,local_dir</code><code>=</code><code>None</code><code>):</code>
<code> </code><code>next_dir_local </code><code>=</code> <code>self</code><code>.ftp.pwd()</code>
<code> </code><code>self</code><code>.dirmakedirs(next_dir_local, local_dir)</code>
<code> </code><code>sub_C </code><code>=</code> <code>self</code><code>.get_C(item.name,local_dir)</code>
<code> </code><code>def</code> <code>runtest(</code><code>self</code><code>,local_dir,next_dir):</code>
<code> </code><code>os.chdir(local_dir)</code>
<code> </code><code>C </code><code>=</code> <code>ftp.get_C(next_dir,local_dir)</code>
<code> </code><code>print</code> <code>"C:"</code><code>,C</code>
<code> </code><code>self</code><code>.dirmakedirs(all_path, local_dir)</code>
<code> </code><code>next_dir_localz </code><code>=</code> <code>all_path[</code><code>1</code><code>:].replace(</code><code>'/'</code><code>, </code><code>'\\'</code><code>)</code>
<code> </code><code>'''# next_dir_local = next_dir_localz</code>
<code> </code><code># next_dir_local = next_dir_localz.decode('utf8').encode('gbk') #windows用这个'''</code>
<code> </code><code># s_file = os.path.join(local_dir, next_dir_localz)</code>
<code> </code><code># try:</code>
<code> </code><code># os.makedirs(s_file)</code>
<code> </code><code># except OSError:</code>
<code> </code><code># pass</code>
<code> </code><code># os.chdir(s_file)</code>
<code> </code><code>file_handler </code><code>=</code> <code>open</code><code>(localfile, </code><code>'wb'</code><code>)</code>
<code> </code><code>self</code><code>.ftp.retrbinary(</code><code>'RETR %s'</code> <code>%</code> <code>(allall_path), file_handler.write)</code>
<code> </code><code>file_handler.close()</code>
<code>if</code> <code>__name__ </code><code>=</code><code>=</code> <code>'__main__'</code><code>:</code>
<code> </code><code>ftp </code><code>=</code> <code>CLASS_FTP(HOST, USER, PASSWORD)</code>
<code> </code><code>ftp.Connect()</code>
<code> </code><code>ftp.runtest(</code><code>'D:\\ftp'</code><code>,</code><code>'./'</code><code>)</code>
<code> </code><code>d2 </code><code>=</code> <code>datetime.datetime.now()</code>
<code> </code><code>print</code> <code>d2 </code><code>-</code> <code>d1</code>
<code>'''参数乱七八糟'''</code>
ftp 第二个例子 别人2010写好的
<code># coding:utf-8</code>
<code>import</code> <code>os, sys, string, datetime, time</code>
<code>import</code> <code>socket</code>
<code>class</code> <code>MYFTP:</code>
<code> </code><code>def</code> <code>__init__(</code><code>self</code><code>, hostaddr, username, password, remotedir, port</code><code>=</code><code>21</code><code>):</code>
<code> </code><code>self</code><code>.hostaddr </code><code>=</code> <code>hostaddr</code>
<code> </code><code>self</code><code>.username </code><code>=</code> <code>username</code>
<code> </code><code>self</code><code>.password </code><code>=</code> <code>password</code>
<code> </code><code>self</code><code>.remotedir </code><code>=</code> <code>remotedir</code>
<code> </code><code>self</code><code>.port </code><code>=</code> <code>port</code>
<code> </code><code># self.ftp.set_debuglevel(2)</code>
<code> </code><code>def</code> <code>__del__(</code><code>self</code><code>):</code>
<code> </code><code>self</code><code>.ftp.close()</code>
<code> </code><code># self.ftp.set_debuglevel(0)</code>
<code> </code><code>def</code> <code>login(</code><code>self</code><code>):</code>
<code> </code><code>ftp </code><code>=</code> <code>self</code><code>.ftp</code>
<code> </code><code>timeout </code><code>=</code> <code>60</code>
<code> </code><code>socket.setdefaulttimeout(timeout)</code>
<code> </code><code>ftp.set_pasv(</code><code>True</code><code>)</code>
<code> </code><code>print</code> <code>'开始连接到 %s'</code> <code>%</code> <code>(</code><code>self</code><code>.hostaddr)</code>
<code> </code><code>ftp.connect(</code><code>self</code><code>.hostaddr, </code><code>self</code><code>.port)</code>
<code> </code><code>print</code> <code>'成功连接到 %s'</code> <code>%</code> <code>(</code><code>self</code><code>.hostaddr)</code>
<code> </code><code>print</code> <code>'开始登录到 %s'</code> <code>%</code> <code>(</code><code>self</code><code>.hostaddr)</code>
<code> </code><code>ftp.login(</code><code>self</code><code>.username, </code><code>self</code><code>.password)</code>
<code> </code><code>print</code> <code>'成功登录到 %s'</code> <code>%</code> <code>(</code><code>self</code><code>.hostaddr)</code>
<code> </code><code>debug_print(ftp.getwelcome())</code>
<code> </code><code>deal_error(</code><code>"连接或登录失败"</code><code>)</code>
<code> </code><code>print</code> <code>"now:"</code><code>,</code><code>self</code><code>.ftp.pwd()</code>
<code> </code><code>self</code><code>.ftp.cwd(</code><code>self</code><code>.remotedir)</code>
<code> </code><code>except</code><code>(Exception):</code>
<code> </code><code>deal_error(</code><code>'切换目录失败'</code><code>)</code>
<code> </code><code>def</code> <code>is_same_size(</code><code>self</code><code>, localfile, remotefile):</code>
<code> </code><code>remotefile_size </code><code>=</code> <code>self</code><code>.ftp.size(remotefile)</code>
<code> </code><code>remotefile_size </code><code>=</code> <code>-</code><code>1</code>
<code> </code><code>localfile_size </code><code>=</code> <code>os.path.getsize(localfile)</code>
<code> </code><code>localfile_size </code><code>=</code> <code>-</code><code>1</code>
<code> </code><code>debug_print(</code><code>'lo:%d re:%d'</code> <code>%</code> <code>(localfile_size, remotefile_size), )</code>
<code> </code><code>if</code> <code>remotefile_size </code><code>=</code><code>=</code> <code>localfile_size:</code>
<code> </code><code>return</code> <code>1</code>
<code> </code><code>return</code> <code>0</code>
<code> </code><code>def</code> <code>download_file(</code><code>self</code><code>, localfile, remotefile):</code>
<code> </code><code>if</code> <code>self</code><code>.is_same_size(localfile, remotefile):</code>
<code> </code><code>debug_print(</code><code>'%s 文件大小相同,无需下载'</code> <code>%</code> <code>localfile)</code>
<code> </code><code>print</code> <code>"remotefile:"</code><code>,remotefile</code>
<code> </code><code>debug_print(</code><code>'>>>>>>>>>>>>下载文件 %s ... ...'</code> <code>%</code> <code>localfile)</code>
<code> </code><code># return</code>
<code> </code><code>file_handler </code><code>=</code> <code>open</code><code>(localfile, </code><code>'wb'</code><code>)</code>
<code> </code><code>self</code><code>.ftp.retrbinary(</code><code>'RETR %s'</code> <code>%</code> <code>(remotefile), file_handler.write)</code>
<code> </code><code>file_handler.close()</code>
<code> </code><code>def</code> <code>download_files(</code><code>self</code><code>, localdir</code><code>=</code><code>'./'</code><code>, remotedir</code><code>=</code><code>'./'</code><code>):</code>
<code> </code><code>print</code> <code>"remotedir:"</code><code>,remotedir</code>
<code> </code><code># pass</code>
<code> </code><code>os.makedirs(localdir)</code>
<code> </code><code>print</code><code>(</code><code>self</code><code>.ftp.</code><code>dir</code><code>())</code>
<code> </code><code># print(remotenames)</code>
<code> </code><code>local </code><code>=</code> <code>os.path.join(localdir, filename).replace(</code><code>'\\', '</code><code>/</code><code>')</code>
<code> </code><code>def</code> <code>upload_file(</code><code>self</code><code>, localfile, remotefile):</code>
<code> </code><code>if</code> <code>not</code> <code>os.path.isfile(localfile):</code>
<code> </code><code>debug_print(</code><code>'跳过[相等]: %s'</code> <code>%</code> <code>localfile)</code>
<code> </code><code>file_handler </code><code>=</code> <code>open</code><code>(localfile, </code><code>'rb'</code><code>)</code>
<code> </code><code>self</code><code>.ftp.storbinary(</code><code>'STOR %s'</code> <code>%</code> <code>remotefile, file_handler)</code>
<code> </code><code>debug_print(</code><code>'已传送: %s'</code> <code>%</code> <code>localfile)</code>
<code> </code><code>def</code> <code>upload_files(</code><code>self</code><code>, localdir</code><code>=</code><code>'./'</code><code>, remotedir</code><code>=</code><code>'./'</code><code>):</code>
<code> </code><code>localnames </code><code>=</code> <code>os.listdir(localdir)</code>
<code> </code><code>self</code><code>.ftp.cwd(remotedir)</code>
<code> </code><code>for</code> <code>item </code><code>in</code> <code>localnames:</code>
<code> </code><code>src </code><code>=</code> <code>os.path.join(localdir, item)</code>
<code> </code><code>if</code> <code>os.path.isdir(src):</code>
<code> </code><code>try</code><code>:</code>
<code> </code><code>self</code><code>.ftp.mkd(item)</code>
<code> </code><code>except</code><code>:</code>
<code> </code><code>debug_print(</code><code>'目录已存在 %s'</code> <code>%</code> <code>item)</code>
<code> </code><code>self</code><code>.upload_files(src, item)</code>
<code> </code><code>self</code><code>.upload_file(src, item)</code>
<code> </code><code>def</code> <code>get_file_list(</code><code>self</code><code>, line):</code>
<code> </code><code>print</code> <code>"line1:"</code><code>, line</code>
<code> </code><code>ret_arr </code><code>=</code> <code>[]</code>
<code> </code><code>file_arr </code><code>=</code> <code>self</code><code>.get_filename(line)</code>
<code> </code><code>print</code> <code>"file_arr:"</code><code>,file_arr</code>
<code> </code><code>if</code> <code>file_arr[</code><code>1</code><code>] </code><code>not</code> <code>in</code> <code>[</code><code>'.'</code><code>, </code><code>'..'</code><code>]:</code>
<code> </code><code>self</code><code>.file_list.append(file_arr)</code>
<code> </code><code>def</code> <code>get_filename(</code><code>self</code><code>, line):</code>
<code> </code><code>print</code> <code>"line2:"</code><code>,line</code>
<code> </code><code>print</code> <code>type</code><code>(line)</code>
<code> </code><code>pos </code><code>=</code> <code>line.rfind(</code><code>':'</code><code>)</code>
<code> </code><code>while</code> <code>(line[pos] !</code><code>=</code> <code>' '</code><code>):</code>
<code> </code><code>pos </code><code>+</code><code>=</code> <code>1</code>
<code> </code><code>while</code> <code>(line[pos] </code><code>=</code><code>=</code> <code>' '</code><code>):</code>
<code> </code><code>print</code> <code>pos</code>
<code> </code><code>file_arr </code><code>=</code> <code>[line[</code><code>0</code><code>], line[pos:]]</code>
<code> </code><code>return</code> <code>file_arr</code>
<code>def</code> <code>debug_print(s):</code>
<code> </code><code>print</code> <code>(s)</code>
<code>def</code> <code>deal_error(e):</code>
<code> </code><code>timenow </code><code>=</code> <code>time.localtime()</code>
<code> </code><code>datenow </code><code>=</code> <code>time.strftime(</code><code>'%Y-%m-%d'</code><code>, timenow)</code>
<code> </code><code>logstr </code><code>=</code> <code>'%s 发生错误: %s'</code> <code>%</code> <code>(datenow, e)</code>
<code> </code><code>debug_print(logstr)</code>
<code> </code><code>file</code><code>.write(logstr)</code>
<code> </code><code>sys.exit()</code>
<code> </code><code>file</code> <code>=</code> <code>open</code><code>(</code><code>"log.txt"</code><code>, </code><code>"a"</code><code>)</code>
<code> </code><code>logstr </code><code>=</code> <code>datenow</code>
<code> </code><code># 配置如下变量</code>
<code> </code><code>hostaddr </code><code>=</code> <code>'192.168.1.100'</code> <code># ftp地址</code>
<code> </code><code>username </code><code>=</code> <code>'ftpuser3'</code> <code># 用户名</code>
<code> </code><code>password </code><code>=</code> <code>'test1passwd'</code> <code># 密码</code>
<code> </code><code>port </code><code>=</code> <code>21</code> <code># 端口号</code>
<code> </code><code>#rootdir_local = '.' + os.sep + 'bak/' # 本地目录</code>
<code> </code><code>rootdir_local </code><code>=</code> <code>'D:/ftp/'</code>
<code> </code><code>rootdir_remote </code><code>=</code> <code>'./'</code> <code># 远程目录</code>
<code> </code><code>f </code><code>=</code> <code>MYFTP(hostaddr, username, password, rootdir_remote, port)</code>
<code> </code><code>f.login()</code>
<code> </code><code>f.download_files(rootdir_local, rootdir_remote)</code>
<code> </code><code>logstr </code><code>+</code><code>=</code> <code>" - %s 成功执行了备份\n"</code> <code>%</code> <code>datenow</code>
<code> </code><code>file</code><code>.close()</code>
<code></code>
本文转自 liqius 51CTO博客,原文链接:http://blog.51cto.com/szgb17/1907740,如需转载请自行联系原作者