Python搭建ftp服务

BI(商务智能)部门一般是不能直接连接业务数据库的,因为业务数据库要优先保证企业的日常交易,我们可以通过文件接口将数据从业务数据库定时推送到BI部门。

文件接口是指在业务数据库空闲的时候(一般在凌晨),将数据(一般指前一天或者前一月数据)从业务数据库导出为文本文件,然后通过ftp等方式推送到指定的接口服务器,BI部门再定期从接口服务器获得文件,并将其导入到BI数据库。

本文通过python实现整个ftp服务。

ftp服务端

主要通过pyftpdlib包实现,官方信息请参考https://pypi.org/project/pyftpdlib/

# coding: utf-8

from pyftpdlib.authorizers import DummyAuthorizer

from pyftpdlib.handlers import FTPHandler

from pyftpdlib.servers import FTPServer

# 新建一个用户组

authorizer = DummyAuthorizer()

# 将用户名,密码,指定目录,权限 添加到里面

## 管理员

authorizer.add_user("admin","admin123","D:/ftpserver",perm="elradfmwMT")

## Tableau服务器http_requests日志

authorizer.add_user("tableau","tab123","D:/ftpserver/tableau", perm="elrd")

## 匿名用户

authorizer.add_anonymous("D:/ftpserver/FAQ")

# 初始化ftp句柄

handler = FTPHandler

handler.authorizer = authorizer

#开启服务器

server = FTPServer(("0.0.0.0", 21), handler)

server.serve_forever()

ftp服务器文件名中文乱码问题

原因定位:pyftpdlib内部使用的编码是utf-8,Windows使用的是gbk

解决办法:编辑pyftpdlib目录下的filesystems.py文件,将两处yield line. encode('utf-8', self.cmd_chnnel.unicode_errors)中的utf-8修改为gbk

perm权限说明

读取权限:

e:更改目录,CWD、CDUP命令

l:列表文件,LIST、NLST、STAT、MLSD、MLST、SIZE命令

r:从服务器检索文件,RETR命令

写入权限:

a:将数据追加到现有文件,APPE命令

d:删除文件或目录,DELE、RMD命令

f:重命名文件或者目录,RNFR、RNTO命令

m:创建目录,MKD命令

w:将文件存储到服务器,STOR、STOU命令

M:更改文件模式、权限

T:更改文件修改时间

ftp客户端

from ftplib import FTP

ftp = FTP('127.0.0.1')

# 匿名登陆

ftp.login()

# tableau用户登录

ftp.login('tableau','tab123')

ftp.dir()

-rw-rw-rw- 1 owner group 0 Dec 27 13:51 http_requests_20181224.csv

-rw-rw-rw- 1 owner group 0 Dec 27 13:51 http_requests_20181225.csv

-rw-rw-rw- 1 owner group 0 Dec 27 13:51 http_requests_20181226.csv

# 文件下载

## 下载文件名

fname = "http_requests_20181226.csv"

## 本地下载路径

local_path = "D:\\" + fname

f = open(local_path, 'wb')

# 以二进制形式下载

ftp.retrbinary("RETR %s" %fname, f.write)

f.close()

# 删除文件

ftp.delete(fname)

欢迎关注公众号

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181228G06KRM00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券