美文网首页
Python搭建ftp服务

Python搭建ftp服务

作者: 一枚中年打工男的自救 | 来源:发表于2018-12-28 07:23 被阅读57次
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()
Tableau用户界面

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)
欢迎扫码关注公众号

相关文章

网友评论

      本文标题:Python搭建ftp服务

      本文链接:https://www.haomeiwen.com/subject/kujpkqtx.html