Board logo

标题: Windows使用内置模块ftplib [打印本页]

作者: admin    时间: 2019-9-26 14:33     标题: Windows使用内置模块ftplib

FTP服务器的安装可参考:CentOS8_vsftpd虚拟用户 例子一: 上传文件到FTP根目录: #coding=utf-8 import ftplib def ftp_upload(file_remote,file_local): try: host = '192.168.168.154' #远程FTP服务器的IP地址 username = 'zhuohua' #远程FTP用户 password = '111' #远程FTP用户的密码 f = ftplib.FTP(host) f.login(username, password) f.encoding = 'utf-8' pwd_path = f.pwd() #默认的工作目录就是FTP根目录 print("FTP当前工作目录:", pwd_path) bufsize = 1024 #设置缓冲器大小 fp = open(file_local, 'rb') f.storbinary('STOR ' + file_remote, fp, bufsize) #以二进制形式上传文件 fp.close() except Exception as e: print(f"本地文件{file_local}上传失败,原因: {e}") else: print(f"本地文件{file_local}上传成功。") finally: f.quit() if __name__ == '__main__': file_remote = 'a.txt' #远程文件 file_local = 'D:\\a.txt' #本地文件 ftp_upload(file_remote,file_local) print("-" * 10) file_remote = 'b.log' #远程文件,如果文件名称重复会被直接覆盖(上传成功) file_local = 'D:\\b1.log' #本地文件;本地文件名与远程文件名可以不一样 ftp_upload(file_remote,file_local) print("-" * 10) file_remote = 'StringIO()函数.txt' #远程文件的名称可以包含中文 file_local = 'D:\\share\\StringIO()函数.txt' #本地文件的名称也可以包含中文 ftp_upload(file_remote,file_local) #多次执行函数,就可以一次性上传多个文件 脚本运行的结果: C:\Users\jacky\Desktop>python xx.py FTP当前工作目录: / 本地文件D:\a.txt上传成功。 ---------- FTP当前工作目录: / 本地文件D:\b1.log上传成功。 ---------- FTP当前工作目录: / 本地文件D:\share\StringIO()函数.txt上传成功。 C:\Users\jacky\Desktop> ###### 例子二: 创建FTP子目录: #coding=utf-8 import ftplib def ftp_mkd(my_dir): try: host = '192.168.168.154' username = 'zhuohua' password = '111' f = ftplib.FTP(host) f.login(username, password) f.encoding = 'utf-8' f.mkd(my_dir) except Exception as e: print(f"FTP子目录{my_dir}创建失败,原因: {e}") else: print(f"FTP子目录{my_dir}创建成功。") finally: f.quit() if __name__ == '__main__': ftp_mkd('/dir_1') #在FTP根目录里创建子目录 ftp_mkd('/dir_1/dir_2') #在FTP子目录里创建子目录 print("-" * 10) ftp_mkd('/财务部文件夹') 脚本运行的结果:(成功时) C:\Users\jacky\Desktop>python xx.py FTP子目录/dir_1创建成功。 FTP子目录/dir_1/dir_2创建成功。 ---------- FTP子目录/财务部文件夹创建成功。 C:\Users\jacky\Desktop> 脚本运行的结果:(因FTP子目录已经存在而失败时) C:\Users\jacky\Desktop>python xx.py FTP子目录/dir_1创建失败,原因: 550 Create directory operation failed. FTP子目录/dir_1/dir_2创建失败,原因: 550 Create directory operation failed. ---------- FTP子目录/财务部文件夹创建失败,原因: 550 Create directory operation failed. C:\Users\jacky\Desktop> ###### 例子三: 显示FTP根目录里的文件、子目录:(不会延伸到子目录的子目录) #coding=utf-8 import ftplib def ftp_show(): try: host = '192.168.168.154' username = 'zhuohua' password = '111' f = ftplib.FTP(host) f.login(username, password) f.encoding = 'utf-8' pwd_path = f.pwd() #默认的工作目录就是FTP根目录 print("FTP当前工作目录:", pwd_path) print("-" * 10) print("-" * 10) print("FTP根目录下的文件、子目录:") lines = [] f.dir(f"{pwd_path}", lines.append) for line in lines: tokens = line.split(maxsplit = 9) name = tokens[8] print(name) except Exception as e: print(f"显示失败,原因: {e}") else: pass finally: f.quit() if __name__ == '__main__': ftp_show() 脚本运行的结果:(成功时) C:\Users\jacky\Desktop>python xx.py FTP当前工作目录: / ---------- ---------- FTP根目录下的文件、子目录: StringIO()函数.txt a.txt b.log dir_1 财务部文件夹 C:\Users\jacky\Desktop> 脚本运行的结果:(因用户名错误而失败时) C:\Users\jacky\Desktop>python xx.py 显示失败,原因: 530 Login incorrect. C:\Users\jacky\Desktop> ###### 例子四: 只显示FTP根目录里的txt文件: #coding=utf-8 import ftplib def ftp_show(): try: host = '192.168.168.154' username = 'zhuohua' password = '111' f = ftplib.FTP(host) f.login(username, password) f.encoding = 'utf-8' pwd_path = f.pwd() #默认的工作目录就是FTP根目录 print("FTP当前工作目录:", pwd_path) print("-" * 10) print("-" * 10) print("FTP根目录下的txt文件:") lines = [] f.dir(f"{pwd_path}", lines.append) K_1 = '.txt' #文件后缀 for line in lines: if line.endswith(K_1): tokens = line.split(maxsplit = 9) name = tokens[8] print(name) except Exception as e: print(f"显示失败,原因: {e}") else: pass finally: f.quit() if __name__ == '__main__': ftp_show() 脚本运行的结果:(成功时) C:\Users\jacky\Desktop>python xx.py FTP当前工作目录: / ---------- ---------- FTP根目录下的txt文件: StringIO()函数.txt a.txt C:\Users\jacky\Desktop> 脚本运行的结果:(因用户密码错误而失败时) C:\Users\jacky\Desktop>python xx.py 显示失败,原因: 530 Login incorrect. C:\Users\jacky\Desktop> ###### 例子五: 上传文件到FTP子目录: #coding=utf-8 import ftplib def ftp_upload(file_remote,file_local): try: host = '192.168.168.154' username = 'zhuohua' password = '111' f = ftplib.FTP(host) f.login(username, password) f.encoding = 'utf-8' f.cwd('/dir_1') #切换FTP的工作目录,上传的文件会放到对应的子目录 pwd_path = f.pwd() print("FTP当前工作目录:", pwd_path) bufsize = 1024 fp = open(file_local, 'rb') f.storbinary('STOR ' + file_remote, fp, bufsize) fp.close() except Exception as e: print(f"本地文件{file_local}上传失败,原因: {e}") else: print(f"本地文件{file_local}上传成功。") finally: f.quit() if __name__ == '__main__': file_local = 'D:\\Music\\你会爱我到什么时候.mp3' #本地文件 file_remote = file_local.split("\\")[2] #远程文件 ftp_upload(file_remote,file_local) print("-" * 10) file_local = 'D:\\Music\\青狐狸.mp3' #本地文件 file_remote = file_local.split("\\")[2] #远程文件 ftp_upload(file_remote,file_local) print("-" * 10) file_local = 'D:\\Music\\图片a.png' #本地文件 file_remote = file_local.split("\\")[2] #远程文件 ftp_upload(file_remote,file_local) 脚本运行的结果: C:\Users\jacky\Desktop>python xx.py FTP当前工作目录: /dir_1 本地文件D:\Music\你会爱我到什么时候.mp3上传成功。 ---------- FTP当前工作目录: /dir_1 本地文件D:\Music\青狐狸.mp3上传成功。 ---------- FTP当前工作目录: /dir_1 本地文件D:\Music\图片a.png上传成功。 C:\Users\jacky\Desktop> ###### 例子六: 显示FTP子目录里的文件、子目录: #coding=utf-8 import ftplib def ftp_show(): host = '192.168.168.154' username = 'zhuohua' password = '111' f = ftplib.FTP(host) f.login(username, password) f.encoding = 'utf-8' f.cwd('/dir_1') #切换FTP的工作目录 pwd_path = f.pwd() print("FTP当前工作目录:", pwd_path) print("-" * 10) print("-" * 10) print(f"FTP子目录{pwd_path}下的文件、子目录:") for file in f.nlst(): print(file) f.quit() if __name__ == '__main__': ftp_show() 脚本运行的结果: C:\Users\jacky\Desktop>python xx.py FTP当前工作目录: /dir_1 ---------- ---------- FTP子目录/dir_1下的文件、子目录: dir_2 你会爱我到什么时候.mp3 图片a.png 青狐狸.mp3 C:\Users\jacky\Desktop> ###### 例子七: 只显示FTP子目录里的mp3文件: #coding=utf-8 import ftplib def ftp_show(): host = '192.168.168.154' username = 'zhuohua' password = '111' f = ftplib.FTP(host) f.login(username, password) f.encoding = 'utf-8' f.cwd('/dir_1') #切换FTP的工作目录 pwd_path = f.pwd() print("FTP当前工作目录:", pwd_path) print("-" * 10) print("-" * 10) print(f"FTP子目录{pwd_path}下的mp3文件:") K_1 = '.mp3' #文件后缀 for file in f.nlst(): if file.endswith(K_1): print(file) f.quit() if __name__ == '__main__': ftp_show() 脚本运行的结果: C:\Users\jacky\Desktop>python xx.py FTP当前工作目录: /dir_1 ---------- ---------- FTP子目录/dir_1下的mp3文件: 你会爱我到什么时候.mp3 青狐狸.mp3 C:\Users\jacky\Desktop> ###### 例子八: 从FTP根目录下载文件: #coding=utf-8 import ftplib def ftp_download(file_remote,file_local): try: host = '192.168.168.154' username = 'zhuohua' password = '111' f = ftplib.FTP(host) f.login(username, password) f.encoding = 'utf-8' f.cwd('/') #切换FTP的工作目录,默认的工作目录就是FTP根目录 pwd_path = f.pwd() print("FTP当前工作目录:", pwd_path) bufsize = 1024 #设置缓冲器大小 fp = open(file_local, 'wb') f.retrbinary('RETR %s' % file_remote, fp.write, bufsize) #以二进制形式下载文件 fp.close() except Exception as e: print(f"远程文件{file_remote}下载失败,原因: {e}") else: print(f"远程文件{file_remote}下载成功。") finally: f.quit() if __name__ == '__main__': file_remote = 'a.txt' #远程文件 file_local = 'D:\\a.txt' #本地文件 ftp_download(file_remote,file_local) print("-" * 10) file_remote = 'b.log' #远程文件;远程文件名与本地文件名可以不一样 file_local = 'D:\\b1.log' #本地文件;如果文件名称重复会被直接覆盖(下载成功) ftp_download(file_remote,file_local) print("-" * 10) file_remote = 'StringIO()函数.txt' #远程文件的名称可以包含中文 file_local = 'D:\\share\\StringIO()函数.txt' #本地文件的名称也可以包含中文 ftp_download(file_remote,file_local) #多次执行函数,就可以一次性下载多个文件 脚本运行的结果: C:\Users\jacky\Desktop>python xx.py FTP当前工作目录: / 远程文件a.txt下载成功。 ---------- FTP当前工作目录: / 远程文件b.log下载成功。 ---------- FTP当前工作目录: / 远程文件StringIO()函数.txt下载成功。 C:\Users\jacky\Desktop> ###### 例子九: 从FTP子目录下载文件: #coding=utf-8 import ftplib def ftp_download(file_remote,file_local): try: host = '192.168.168.154' username = 'zhuohua' password = '111' f = ftplib.FTP(host) f.login(username, password) f.encoding = 'utf-8' f.cwd('/dir_1') #切换FTP的工作目录,会从对应的子目录下载文件 pwd_path = f.pwd() print("FTP当前工作目录:", pwd_path) bufsize = 1024 fp = open(file_local, 'wb') f.retrbinary('RETR %s' % file_remote, fp.write, bufsize) fp.close() except Exception as e: print(f"远程文件 {file_remote} 下载失败,原因: {e}") else: print(f"远程文件 {file_remote} 下载成功。") finally: f.quit() if __name__ == '__main__': file_remote = '你会爱我到什么时候.mp3' #远程文件 file_local = f"D:\\share\\{file_remote}" #本地文件 ftp_download(file_remote,file_local) print("-" * 10) file_remote = '青狐狸.mp3' #远程文件 file_local = f"D:\\share\\{file_remote}" #本地文件 ftp_download(file_remote,file_local) print("-" * 10) file_remote = '图片a.png' #远程文件 file_local = f"D:\\share\\{file_remote}" #本地文件 ftp_download(file_remote,file_local) 脚本运行的结果: C:\Users\jacky\Desktop>python xx.py FTP当前工作目录: /dir_1 远程文件 你会爱我到什么时候.mp3 下载成功。 ---------- FTP当前工作目录: /dir_1 远程文件 青狐狸.mp3 下载成功。 ---------- FTP当前工作目录: /dir_1 远程文件 图片a.png 下载成功。 C:\Users\jacky\Desktop> ###### 例子十: 重命名FTP文件: #coding=utf-8 import ftplib def ftp_rename(file_old,file_new): try: host = '192.168.168.154' username = 'zhuohua' password = '111' f = ftplib.FTP(host) f.login(username, password) f.encoding = 'utf-8' f.cwd('/') #切换FTP的工作目录,默认的工作目录就是FTP根目录 pwd_path = f.pwd() print("FTP当前工作目录:", pwd_path) f.rename(file_old,file_new) except Exception as e: print(f"远程文件 {file_old} 重命名失败,原因: {e}") else: print(f"远程文件 {file_old} 成功重命名为 {file_new}") finally: f.quit() if __name__ == '__main__': file_old = 'StringIO()函数.txt' #远程的旧文件 file_new = 'new_StringIO()函数.txt' #远程的新文件 ftp_rename(file_old,file_new) 脚本运行的结果:(成功时) C:\Users\jacky\Desktop>python xx.py FTP当前工作目录: / 远程文件 StringIO()函数.txt 成功重命名为 new_StringIO()函数.txt C:\Users\jacky\Desktop> 脚本运行的结果:(因远程的旧文件不存在而失败时) C:\Users\jacky\Desktop>python xx.py FTP当前工作目录: / 远程文件 StringIO()函数.txt 重命名失败,原因: 550 RNFR command failed. C:\Users\jacky\Desktop> ###### 例子十一: 重命名FTP文件:(把远程文件移动到其他FTP目录) #coding=utf-8 import ftplib def ftp_rename(file_old,file_new): try: host = '192.168.168.154' username = 'zhuohua' password = '111' f = ftplib.FTP(host) f.login(username, password) f.encoding = 'utf-8' f.cwd('/dir_1') #切换FTP的工作目录,会以对应子目录作为起点 pwd_path = f.pwd() print("FTP当前工作目录:", pwd_path) f.rename(file_old,file_new) except Exception as e: print(f"远程文件 {file_old} 重命名失败,原因: {e}") else: print(f"远程文件 {file_old} 成功重命名为 {file_new}") finally: f.quit() if __name__ == '__main__': file_old = '你会爱我到什么时候.mp3' #远程的旧文件 file_new = '/dir_1/dir_2/你会爱我到什么时候.mp3' #远程的新文件 ftp_rename(file_old,file_new) print("-" * 10) file_old = '青狐狸.mp3' #远程的旧文件 file_new = '/青狐狸.mp3' #会把新文件放到FTP根目录 ftp_rename(file_old,file_new) 脚本运行的结果: C:\Users\jacky\Desktop>python xx.py FTP当前工作目录: /dir_1 远程文件 你会爱我到什么时候.mp3 成功重命名为 /dir_1/dir_2/你会爱我到什么时候.mp3 ---------- FTP当前工作目录: /dir_1 远程文件 青狐狸.mp3 成功重命名为 /青狐狸.mp3 C:\Users\jacky\Desktop> ###### 例子十二: 删除FTP根目录下的文件: #coding=utf-8 import ftplib def ftp_del_file(file_old): try: host = '192.168.168.154' username = 'zhuohua' password = '111' f = ftplib.FTP(host) f.login(username, password) f.encoding = 'utf-8' f.cwd('/') #切换FTP的工作目录,默认的工作目录就是FTP根目录 pwd_path = f.pwd() print("FTP当前工作目录:", pwd_path) f.delete(file_old) except Exception as e: print(f"远程文件 {file_old} 删除失败,原因: {e}") else: print(f"远程文件 {file_old} 删除成功。") finally: f.quit() if __name__ == '__main__': file_old = '青狐狸.mp3' #远程的FTP文件 ftp_del_file(file_old) 脚本运行的结果:(成功时) C:\Users\jacky\Desktop>python xx.py FTP当前工作目录: / 远程文件 青狐狸.mp3 删除成功。 C:\Users\jacky\Desktop> 脚本运行的结果:(因远程的FTP文件不存在而删除失败时) C:\Users\jacky\Desktop>python xx.py FTP当前工作目录: / 远程文件 青狐狸.mp3 删除失败,原因: 550 Delete operation failed. C:\Users\jacky\Desktop> ###### 例子十三: 删除FTP子目录下的文件: #coding=utf-8 import ftplib def ftp_del_file(file_old): try: host = '192.168.168.154' username = 'zhuohua' password = '111' f = ftplib.FTP(host) f.login(username, password) f.encoding = 'utf-8' f.cwd('/dir_1') #切换FTP的工作目录,会以对应子目录作为起点 pwd_path = f.pwd() print("FTP当前工作目录:", pwd_path) f.delete(file_old) except Exception as e: print(f"远程文件 {file_old} 删除失败,原因: {e}") else: print(f"远程文件 {file_old} 删除成功。") finally: f.quit() if __name__ == '__main__': file_old = '图片a.png' #远程的FTP文件 ftp_del_file(file_old) 脚本运行的结果: C:\Users\jacky\Desktop>python xx.py FTP当前工作目录: /dir_1 远程文件 图片a.png 删除成功。 C:\Users\jacky\Desktop> ###### 例子十四: 删除FTP子目录: #coding=utf-8 import ftplib def ftp_del_dir(dir_old): try: host = '192.168.168.154' username = 'zhuohua' password = '111' f = ftplib.FTP(host) f.login(username, password) f.encoding = 'utf-8' f.rmd(dir_old) except Exception as e: print(f"子目录 {dir_old} 删除失败,原因: {e}") else: print(f"子目录 {dir_old} 删除成功。") finally: f.quit() if __name__ == '__main__': dir_old = '/财务部文件夹' #远程的FTP子目录 ftp_del_dir(dir_old) 脚本运行的结果:(成功时) C:\Users\jacky\Desktop>python xx.py 子目录 /财务部文件夹 删除成功。 C:\Users\jacky\Desktop> 脚本运行的结果:(因远程的FTP子目录不为空而删除失败时) C:\Users\jacky\Desktop>python xx.py 子目录 /财务部文件夹 删除失败,原因: 550 Remove directory operation failed. C:\Users\jacky\Desktop> 脚本运行的结果:(因远程的FTP子目录不存在而删除失败时) C:\Users\jacky\Desktop>python xx.py 子目录 /财务部文件夹 删除失败,原因: 550 Remove directory operation failed. C:\Users\jacky\Desktop> ###### 例子十五: 以列表的形式显示FTP根目录里的文件、子目录:(不会延伸到子目录的子目录) #coding=utf-8 import ftplib def ftp_show(): try: host = '192.168.168.154' username = 'zhuohua' password = '111' f = ftplib.FTP(host) f.login(username, password) f.encoding = 'utf-8' f.cwd('/') #切换FTP的工作目录,默认的工作目录就是FTP根目录 pwd_path = f.pwd() print("FTP当前工作目录:", pwd_path) print("-" * 10) print("-" * 10) print("FTP根目录下的文件、子目录:") Result_1 = f.nlst() print(Result_1) print(type(Result_1)) except Exception as e: print(f"显示失败,原因: {e}") else: pass finally: f.quit() if __name__ == '__main__': ftp_show() 脚本运行的结果: C:\Users\jacky\Desktop>python xx.py FTP当前工作目录: / ---------- ---------- FTP根目录下的文件、子目录: ['a.txt', 'b.log', 'dir_1', 'new_StringIO()函数.txt'] C:\Users\jacky\Desktop> ###### 例子十六: 重命名FTP子目录: #coding=utf-8 import ftplib def ftp_rename(dir_old,dir_new): try: host = '192.168.168.154' username = 'zhuohua' password = '111' f = ftplib.FTP(host) f.login(username, password) f.encoding = 'utf-8' f.rename(dir_old,dir_new) except Exception as e: print(f"子目录 {dir_old} 重命名失败,原因: {e}") else: print(f"子目录 {dir_old} 成功重命名为 {dir_new}") finally: f.quit() if __name__ == '__main__': dir_old = '/dir_1' #旧的FTP子目录 dir_new = '/new_dir_1' #新的FTP子目录 ftp_rename(dir_old,dir_new) 脚本运行的结果:(FTP子目录不为空时,也可以重命名) C:\Users\jacky\Desktop>python xx.py 子目录 /dir_1 成功重命名为 /new_dir_1 C:\Users\jacky\Desktop> ###### 例子十七: 重命名FTP子目录的子目录: #coding=utf-8 import ftplib def ftp_rename(dir_old,dir_new): try: host = '192.168.168.154' username = 'zhuohua' password = '111' f = ftplib.FTP(host) f.login(username, password) f.encoding = 'utf-8' f.rename(dir_old,dir_new) except Exception as e: print(f"子目录 {dir_old} 重命名失败,原因: {e}") else: print(f"子目录 {dir_old} 成功重命名为 {dir_new}") finally: f.quit() if __name__ == '__main__': dir_old = '/new_dir_1/dir_2' #旧的FTP子目录 dir_new = '/new_dir_1/new_dir_2' #新的FTP子目录 ftp_rename(dir_old,dir_new) 脚本运行的结果:(FTP子目录不为空时,也可以重命名) C:\Users\jacky\Desktop>python xx.py 子目录 /new_dir_1/dir_2 成功重命名为 /new_dir_1/new_dir_2 C:\Users\jacky\Desktop> ###### 例子十八: 以列表的形式显示FTP子目录里的文件、子目录: #coding=utf-8 import ftplib def ftp_show(): try: host = '192.168.168.154' username = 'zhuohua' password = '111' f = ftplib.FTP(host) f.login(username, password) f.encoding = 'utf-8' f.cwd('/new_dir_1/new_dir_2') #切换FTP的工作目录,会以对应子目录作为起点 pwd_path = f.pwd() print("FTP当前工作目录:", pwd_path) print("-" * 10) print("-" * 10) print(f"FTP子目录{pwd_path}下的文件、子目录:") Result_1 = f.nlst() print(Result_1) print(type(Result_1)) print("-" * 10) print(Result_1[0]) except Exception as e: print(f"显示失败,原因: {e}") else: pass finally: f.quit() if __name__ == '__main__': ftp_show() 脚本运行的结果: C:\Users\jacky\Desktop>python xx.py FTP当前工作目录: /new_dir_1/new_dir_2 ---------- ---------- FTP子目录/new_dir_1/new_dir_2下的文件、子目录: ['你会爱我到什么时候.mp3'] ---------- 你会爱我到什么时候.mp3 C:\Users\jacky\Desktop> 相关文章: Linux使用内置模块ftplib split()函数 文件操作(复制、重命名、删除等)




欢迎光临 blog.zhuohua.store (http://blog.zhuohua.store/) Powered by Discuz! 7.2