【python】ftp下载上传,socket编程

FTP上传下载

相关函数:

from ftplib import FTP            #加载ftp模块
ftp=FTP()                         #设置变量
ftp.set_debuglevel(2)             #打开调试级别2,显示详细信息
ftp.connect("IP","port")          #连接的ftp sever和端口
ftp.login("user","password")      #连接的用户名,密码
ftp.set_debuglevel(0)             #关闭调试模式
ftp.quit()                        #退出ftp
 
ftp相关命令操作
ftp.cwd(pathname)                 #设置FTP当前操作的路径
ftp.dir()                         #显示目录下所有目录信息
ftp.nlst()                        #获取目录下的文件
ftp.mkd(pathname)                 #新建远程目录
ftp.pwd()                         #返回当前所在位置
ftp.rmd(dirname)                  #删除远程目录
ftp.delete(filename)              #删除远程文件
ftp.rename(fromname, toname)#将fromname修改名称为toname。
ftp.storbinaly("STOR filename.txt",file_handel,bufsize)  #上传目标文件
ftp.retrbinary("RETR filename.txt",file_handel,bufsize)  #下载FTP文件

一个示例:

from ftplib import FTP
import os
import sys
import configparser

def downloadfile(downftp, remotepath,localpath):
    bufsize=1024
    fp = open(localpath,'wb')     如果localpath是一个文件名,那么即使不存在也会自己创建,但是如果包含目录,要保证对应的目录一定存在
    downftp.set_debuglevel(2)
    downftp.retrbinary('RETR ' + remotepath, fp.write, bufsize)
    fp.close()   //下载完毕关闭文件句柄
	
def ftpconnect(host,username,password):
    ftp = FTP()
    ftp.connect(host, 2012)
    ftp.login(username, password)
    return ftp

def uploadfile(ftp,remotepath, localpath):
    bufsize=1024
    fp=open(localpath,'rb')       //打开本地的文件读
    ftp.set_debuglevel(0)
    ftp.storbinary('STOR ' + remotepath, fp, bufsize)
    fp.close()

def testDownUp():
    print("下载开始")
    downftp=ftpconnect(ip, username,password)   //ftp的ip,用户名,密码,根据实际填入
    downopsition = realfilename      //realfilename自定义,这一步可以直接对下载下来的文件进行重命名
    downloadfile(downftp,remotedir,downopsition)  //remotedir是远程ftp你所需要下载文件所在的文件目录
    downftp.quit()          //下载完毕需要关闭ftp
    print("下载结束")
    print("上传开始")
    ftp = ftpconnect(_ip, _username, _password)    //若上传的ftp地址和下载不是同一个,则需要重新建立连接
    uploadfile(ftp, remotedir, localpath)  //remotedir是目标ftp要上传的目录,localpath是要上传文件所在的目录,要具体到文件名
    ftp.quit()
    print("上传完毕")

testDownUp()

socket编程

用python实现简单的客户端服务器通信,某些情况下只是简单需求,搭建Nginx或者Apache有点没必要,所以自己实现一个简单的单线程的server和client,client发送server需要的参数,server接收后进行某些操作,并且返回给客户端结果

server.py

#!/usr/bin/python
#encoding:utf-8

import socket
import subprocess
import sys
import json
#开启ip和端口
ip_port = ('127.0.0.1',9999)
#生成一个句柄
sk = socket.socket()
#绑定ip端口
sk.bind(ip_port)
#最多连接数
sk.listen(5)
#开启死循环
while True:
    print ('server waiting...')
    #等待链接,阻塞,直到渠道链接 conn打开一个新的对象 专门给当前链接的客户端 addr是ip地址
    conn,addr = sk.accept()
    #获取客户端请求数据
    client_data = conn.recv(1024)
    #打印客户端的数据
    print (str(client_data,'utf8'))
	#解析收到的json数据
    if(len(client_data) != 0):
        try:
            #解析json数据
            json_data = json.loads(client_data)
            one = json_data['para1']
            two = json_data['para2']
            #调用某些你准备好要进行的操作,将需要的解析后的参数穿进去
            result=somefunction(one, two)
            if result == 1:
                conn.sendall(bytes('fail,具体的原因','utf8'))
            if result == 2:
                conn.sendall(bytes('fail,具体的原因','utf8'))
            if result == 3:
                conn.sendall(bytes('fail,具体的原因','utf8'))
            if result == 0:
                conn.sendall(bytes('Success','utf8'))					
#            subprocess.run([sys.executable,"cydown.py", file_name, tcp_name, post_fix])
        except KeyError:
            conn.sendall(bytes('Fail!检查后重试','utf8'))
        finally:
            conn.close()

client.py

#!/usr/bin/python
#encoding:utf-8

import socket
import json
import sys
import select
import configparser

#从命令行接收参数
lenargs=len(sys.argv)
if lenargs < 3:
    print('参数数量错误')
    sys.exit()

para1=sys.argv[1]
para2=sys.argv[2]

#要连接的ip和端口走配置,如果有变化会比较方便
cf = configparser.ConfigParser()
cf.read("client_conf.conf")
ip = cf.get("link", "ip")
port = cf.getint("link", "port")

#链接服务端ip和端口
ip_port = (ip, port)
#生成一个句柄
sk = socket.socket()
#请求连接服务端
sk.connect(ip_port)
#发送json数据
jsondata = {'para1':para1, 'para2':para2}
json_str = json.dumps(jsondata)
sk.sendall(bytes(json_str,'utf8'))
while True:
    if not sk:
        break;
    rs,_,_ = select.select([sk],[],[],10)
    for r in rs:
        #接受数据
        server_reply = r.recv(1024)
        if not server_reply:
            break
        #打印接受的数据(server给的反馈)
        print (str(server_reply,'utf8'))
#关闭连接
sk.close()

这里读配置用了python自带的configparser,使用起来非常方便,可参考https://www.cnblogs.com/feeland/p/4514771.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值