python + docker, 实现天气数据 从FTP获取以及持久化(三)-- python获取FTP数据
前言
经过前面两个小节的介绍,我们已经完成了MySQL数据库的搭建和数据库操作的事宜。 在本小节中,我们需要完成的任务是:使用python从FTP服务其上面获取文本文件。
搭建测试FTP服务器
LZ的测试环境是在 Windows2012 (实体机上的操作系统) + Ubuntu 16.04 (虚拟机)。 为了简单起见,我们就将FTP服务器搭建在 Windows 系统上面。开发和测试在 Ubuntu 系统上面。
1. 打开FTP设置 (Controlpanel -> Turn windows features on or off -> Add roles and features -> Server roles)

如上图所示,勾选上项目后,点击 “Next”, 系统会自动完成安装。
2. 打开IIS, 设置FTP服务器
2.1 新建FTP Site: Site -> Add FTP Site 填写FTP服务器的名字和物理路径(实际文件存放在硬盘上位置), 完成后点击 Next

2.2 设置FTP地址以及SSL (LZ这里选择的是 No SSL, 当然也可以根据自己的需要设置);完成后点击 Next

2.3 设置用户以及使用权限

请注意: 这里的用户 SPCAdmin 是LZ登录系统的用户名。 我们也可指定其他用户来访问FTP,但是必须保证用户存在(需要在创建FTP之前先创建好)
2.4 验证FTP服务器,打开浏览器,输入地址和端口号

按照提示输入正确的用户名密码后,我们就可以看到我们放到FTP服务器上的文件啦

python编程访问FTP
我们将其封装成一个python的文件 FTPUtil.py; 整体代码如下
# -*- coding: utf-8 -*- #from ctypes import *
import os
#import sys
import ftplib class FTPUtil:
ftp = ftplib.FTP()
bIsDir = False
path = "" def __init__(self, host, port=''):
self.ftp.set_debuglevel(2) #打开调试级别2,显示详细信息
# self.ftp.set_pasv(0) #0主动模式 1 #被动模式
self.ftp.connect(host, port) def Login(self, user, passwd):
self.ftp.login(user, passwd)
print self.ftp.welcome def DownLoadFile(self, LocalFile, RemoteFile):
file_handler = open(LocalFile, 'wb')
self.ftp.retrbinary("RETR %s" % (RemoteFile), file_handler.write)
file_handler.close()
return True def UpLoadFile(self, LocalFile, RemoteFile):
if os.path.isfile(LocalFile) == False:
return False
file_handler = open(LocalFile, "rb")
self.ftp.storbinary('STOR %s' % RemoteFile, file_handler, 4096)
file_handler.close()
return True def UpLoadFileTree(self, LocalDir, RemoteDir):
if os.path.isdir(LocalDir) == False:
return False
print "LocalDir:", LocalDir
LocalNames = os.listdir(LocalDir)
print "list:", LocalNames
print RemoteDir
self.ftp.cwd(RemoteDir)
for Local in LocalNames:
src = os.path.join(LocalDir, Local)
if os.path.isdir(src):
self.UpLoadFileTree(src, Local)
else:
self.UpLoadFile(src, Local) self.ftp.cwd("..")
return def DownLoadFileTree(self, LocalDir, RemoteDir):
print "remoteDir:", RemoteDir
if os.path.isdir(LocalDir) == False:
os.makedirs(LocalDir)
self.ftp.cwd(RemoteDir)
RemoteNames = self.ftp.nlst()
print "RemoteNames", RemoteNames
print self.ftp.nlst("/del1")
for file in RemoteNames:
Local = os.path.join(LocalDir, file)
if self.isDir(file):
self.DownLoadFileTree(Local, file)
else:
self.DownLoadFile(Local, file)
self.ftp.cwd("..")
return def show(self, list):
result = list.lower().split(" ")
if self.path in result and "<dir>" in result:
self.bIsDir = True def isDir(self, path):
self.bIsDir = False
self.path = path
# this ues callback function ,that will change bIsDir value
self.ftp.retrlines('LIST', self.show)
return self.bIsDir def close(self):
self.ftp.quit()
最后,编写测试程序
if __name__ == "__main__":
ftp = FTPUtil('10.137.185.88')
ftp.Login('SPCAdmin', 'Siemens@2017') ftp.DownLoadFile('AHHFCH-sun-2018042706_local.txt', 'AHHFCH-sun-2018042706.txt')
# ftp.DownLoadFileTree('del', '/del1') # ok
# ftp.UpLoadFileTree('del', "/del1")
ftp.close()
print "ok!"
参考
FTP服务器搭建 : https://blog.csdn.net/exlsunshine/article/details/29181465
Python FTP: http://www.cnblogs.com/kaituorensheng/p/4480512.html
python + docker, 实现天气数据 从FTP获取以及持久化(三)-- python获取FTP数据的更多相关文章
- python + docker, 实现天气数据 从FTP获取以及持久化(四)-- 数据准备
前情提要 在之前的文章里,我们已经掌握从FTP上面下载天气数据然后插入到数据库中. 但是如何将我们已有的数据放到生产环境中呢? 思考 首先,我们先简单的理一理现在的情况. 目前: FTP上面已有半个月 ...
- python + docker, 实现天气数据 从FTP获取以及持久化(一)
前情提要 最近项目需要天气数据(预报和历史数据)来作为算法程序的输入. 项目的甲方已经购买了天气数据, 依照他们的约定,天气数据的供应商会将数据以"文本" (.TXT)的方式发到F ...
- python + docker, 实现天气数据 从FTP获取以及持久化(五)-- 利用 Docker 容器化 Python 程序
背景 不知不觉中,我们已经完成了所有的编程工作.接下来,我们需要把 Python 程序 做 容器化 (Docker)部署. 思考 考虑到项目的实际情况,“持久化天气”的功能将会是一个独立的功能模块发布 ...
- python + docker, 实现天气数据 从FTP获取以及持久化(二)-- python操作MySQL数据库
前言 在这一节中,我们主要介绍如何使用python操作MySQL数据库. 准备 MySQL数据库使用的是上一节中的docker容器 “test-mysql”. Python 操作 MySQL 我们使用 ...
- 毕设之Python爬取天气数据及可视化分析
写在前面的一些P话:(https://jq.qq.com/?_wv=1027&k=RFkfeU8j) 天气预报我们每天都会关注,我们可以根据未来的天气增减衣物.安排出行,每天的气温.风速风向. ...
- C# 解析百度天气数据,Rss解析百度新闻以及根据IP获取所在城市
百度天气 接口地址:http://api.map.baidu.com/telematics/v3/weather?location=上海&output=json&ak=hXWAgbsC ...
- python量化分析系列之---5行代码实现1秒内获取一次所有股票的实时分笔数据
python量化分析系列之---5行代码实现1秒内获取一次所有股票的实时分笔数据 最近工作太忙了,有一个星期没有更新文章了,本来这一期打算分享一些对龙虎榜数据的分析结果的,现在还没有把数据内的价值很好 ...
- python 获取当天和前几天时间数据
python 获取当天和前几天时间数据 import datetime from datetime import datetime, date, timedelta def dayDateRange( ...
- Python 获取Kmeans聚类结果每一类的数据
获取聚类结果中每一类的数据,该数据类型是DataFrame 思路:获取clf_KMeans的标签,我这里是聚三类,标签就是0,1,2 将Label转成Series类型,再筛选出指定标签的res0,我筛 ...
随机推荐
- SQL server 2012 阻塞分析查询
最近公司的数据库并发有点大,由于CPU不高.内存不高.硬盘正常.网络也正常等等,但系统还是会卡,所以就怀疑是数据库阻塞导致的,于是去查询资料,看书及经过用以下sql观查,经过几天对数据的分析找到原因并 ...
- [原][osg][osgearth]我眼中的osgearth
看了一下,OE生成的可执行文件 除了osg库和第三方库 OE生产最多的dll就是 osgdb_osgearth_XXXX.dll了 这些都是为了通过osgDB机制加载earth的数据用的. 所以,我觉 ...
- linux 查看日志最后几行
tail -n 50 wx.log 示例:查看/var/log/boot.log,只显示最后一行.则执行 tail -n 1 /var/log/boot.log tail -n 1000:显示最后1 ...
- Learn Rails5.2 Bundler ; Forms
如果一个Rubyer想要提供一个功能或某个程序或程序的集合给其他Rubyer使用,这个Rubyer可以创建一个package,这个package就叫做gems. 可以通过gem install安装. ...
- 【Matplotlib】概要总览第一讲
之前一直使用 matplotlib, 但都是随用随查,现在特开此系列帖子已记录其学习过程. Matplotlib可能是Python 扩展包中仅有的最流行的 2D 绘图库.她不仅提供了快速的方式可视化P ...
- Linux修改字符集
set NLS_LANG=american_america.AL32UTF8-----Linux下查看及更改oracle字符集编码[root@OracleDB ~]# cd /usr/local/or ...
- 『转』Bitdefender Internet Security 2013 – 免费1年
活动中可以选择获取Bitdefender Internet Security 2013+Bitdefender Mobile Security (手机版)各一年激活码申请地址:https://part ...
- 『转』谷歌发布Windows版Chrome App Launcher
据国外媒体报道,谷歌发布了Windows版Chrome App Launcher,Windows用户现在因此能够使用谷歌的许多网络应用,如Chrome浏览器.Gmail.Google Drive和Ch ...
- 流程设计器jQuery + svg/vml(Demo4 - 画连线)
流程结点可以添加了之后,接下来到画结点与结点之间的连线,效果图如下 很眼馋visio的连线可以折来折去,这里实现的连线比较简单. 首先是把连线的类型分为Z(折线).N(折线)及I(直线)3种类型,然后 ...
- nmcli命令使用
nmcli命令 地址配置工具:nmcli nmcli device 查看所有网卡的信息 nmcli device status 和numcli device 相同 nmcli device ...