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,我筛 ...
随机推荐
- python swap
swap里面的a,b 不会影响函数作用域外面的变量 java也不可以的吧:python里面没有指针,你可以认为所有的东西都是指向的内容,但是不要试图去改变指针的值 其实我觉得所有的对象都是不可变对象, ...
- 常用 Math 属性及方法
Math 对象 Math.PI π 3.141592653589793 Math.ceil('2.5') Math.ceil(2.1) 向上取整 3 Math.floor ...
- ipconfig会出现多个IP地址
一.问题描述 今天调试程序的时候发现电脑有两个IP地址,一时间不知道该用哪个?如下图: 二.问题分析 第一个叫ppp适配器,是一个逻辑的虚拟设备,ppp的意思是Point-to-Point Proto ...
- MaintainableCSS 《可维护性 CSS》 --- 模板篇
什么是模块(Modules) ? 模块是一个特别的独立单元,可以与其他模块组合以形成更复杂的结构. 在客厅里,我们可以认为电视,沙发和墙艺术是模块.它们聚在一起创造一个可用的房间. 如果我们把其中一个 ...
- linux shell 按行循环读入文件方法
转http://blog.csdn.net/hittata/article/details/7042779 #/bin/bash printf "******************** ...
- SCWS中文分词PHP扩展详细安装说明
因最近写的一段代码,需要用到中文分词,在网上找了一下,发现了scws这个不错的插件,故根据文档安装使用,下面记录下安装的全过程 系统:centos 安装scws wget http://www.xun ...
- 个人知识管理系统Version1.0开发记录(04)
demo model 我们采用mvc软件架构模式,方便以后用Struts2框架技术优化.重构.封装.这次主要设计一些常用的方法工具,即数据访问逻辑.工具:eclipse.oracle.sqldevel ...
- react native 获取 软键盘高度 和 新增软键盘的组件
import React, { Component } from 'react'; import { AppRegistry, StyleSheet, Text, View, Keyboard, Te ...
- 转: android之虚拟机访问tomcat服务器资源
最近在研究Android虚拟机访问tomcat服务器资源,所以找了个时间写下这篇博客和大家分享一下心得. 其实Android虚拟机访问tomcat服务器非常的简单,只要不要弄错IP地址就可以访问tom ...
- 第33课 main函数与命令行参数
main函数的概念: 测试程序: 以上四种定义main函数的方法都是正确的. main函数的本质: 操作系统是希望main函数的有返回值的,这样可以知道main函数的退出状态. 如果程序时异常退出的, ...