Python编写FTP客户端

薛祯
2023-12-01

之前写过一篇FTP服务端的文章,这篇介绍一下客户端吧。在使用虚拟机的时候,由于虚拟机工具没安装成功,所以我决定用FTP在主机与虚拟机之间传送文件,在虚拟机上开启FTP服务,然后把客户端放在主机上,当然也可以颠倒过来。

服务端请参考:python实现FTP服务器

客户端的实现也不算复杂,本文只是简单的实现了文件的上传和下载功能

import ftplib
import sys

#获取服务器的ip地址(如192.168.1.107),使用sys.argv可以从命令行参数里面获取
if len(sys.argv) < 2:
    tmp = input("please input server address:")
    sys.argv.append(tmp)
server_address = sys.argv[1]
#创建FTP实例,并显示欢迎界面
ftp = ftplib.FTP(server_address)
print(ftp.getwelcome())
#登录,输入服务器里添加过的用户名和口令
ftp.login('user', 'pass')

#文件上传
def upload(fname):
    fd = open(fname, 'rb')
    new_name = input("input new name:")
    #以二进制的形式上传
    ftp.storbinary("STOR %s" % new_name, fd)
    fd.close()
    print("upload finished")
	
#文件下载
def download(fname):
    #构建文件的存储路径,这里用的是D盘,可以自行设置
    new_path = "D:\\FTPdownload\\" + fname
    fd = open(new_path, 'wb')
    #以二进制形式下载,注意第二个参数是fd.write,上传时是fd
    ftp.retrbinary("RETR %s" % fname, fd.write)
    fd.close()
    print("download finished")

def main():
    #选择操作,上传、下载、退出
    op = input("what do you want?(u/d/q)")
    if op == "u":
        #输入文件完整路径,必要时可以用绝对路径
        fname = input("input the file of path:")
        upload(fname)
    elif op == "d":
        fname = input("input the file name:")
        download(fname)
    else:
        print("quit now!")
    ftp.quit()

if __name__ == '__main__':
    main()

附带一些ftplib库的相关操作:

ftp.cwd(pathname)           # 设置FTP当前操作的路径
ftp.dir()                   # 显示目录下所有目录的信息
ftp.nlst()                  # 获取目录下的文件
ftp.mkd(pathname)           # 新建远程目录
ftp.rmd(dirname)            # 删除远程目录
ftp.pwd()                   # 返回当前所在位置
ftp.delete(filename)        # 删除远程文件
ftp.rename(old_name, new_name)    #将fromname改为toname
ftp.storbinary('STOR filename.txt',file_handel,[bufsize])  # 上传目标文件,最后一个参数可以不填
ftp。retrbinary('RETR filename.txt',file_handel,[bufsize])  # 下载FTP文件


 类似资料: