前言

经过前面两个小节的介绍,我们已经完成了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数据的更多相关文章

  1. python + docker, 实现天气数据 从FTP获取以及持久化(四)-- 数据准备

    前情提要 在之前的文章里,我们已经掌握从FTP上面下载天气数据然后插入到数据库中. 但是如何将我们已有的数据放到生产环境中呢? 思考 首先,我们先简单的理一理现在的情况. 目前: FTP上面已有半个月 ...

  2. python + docker, 实现天气数据 从FTP获取以及持久化(一)

    前情提要 最近项目需要天气数据(预报和历史数据)来作为算法程序的输入. 项目的甲方已经购买了天气数据, 依照他们的约定,天气数据的供应商会将数据以"文本" (.TXT)的方式发到F ...

  3. python + docker, 实现天气数据 从FTP获取以及持久化(五)-- 利用 Docker 容器化 Python 程序

    背景 不知不觉中,我们已经完成了所有的编程工作.接下来,我们需要把 Python 程序 做 容器化 (Docker)部署. 思考 考虑到项目的实际情况,“持久化天气”的功能将会是一个独立的功能模块发布 ...

  4. python + docker, 实现天气数据 从FTP获取以及持久化(二)-- python操作MySQL数据库

    前言 在这一节中,我们主要介绍如何使用python操作MySQL数据库. 准备 MySQL数据库使用的是上一节中的docker容器 “test-mysql”. Python 操作 MySQL 我们使用 ...

  5. 毕设之Python爬取天气数据及可视化分析

    写在前面的一些P话:(https://jq.qq.com/?_wv=1027&k=RFkfeU8j) 天气预报我们每天都会关注,我们可以根据未来的天气增减衣物.安排出行,每天的气温.风速风向. ...

  6. C# 解析百度天气数据,Rss解析百度新闻以及根据IP获取所在城市

    百度天气 接口地址:http://api.map.baidu.com/telematics/v3/weather?location=上海&output=json&ak=hXWAgbsC ...

  7. python量化分析系列之---5行代码实现1秒内获取一次所有股票的实时分笔数据

    python量化分析系列之---5行代码实现1秒内获取一次所有股票的实时分笔数据 最近工作太忙了,有一个星期没有更新文章了,本来这一期打算分享一些对龙虎榜数据的分析结果的,现在还没有把数据内的价值很好 ...

  8. python 获取当天和前几天时间数据

    python 获取当天和前几天时间数据 import datetime from datetime import datetime, date, timedelta def dayDateRange( ...

  9. Python 获取Kmeans聚类结果每一类的数据

    获取聚类结果中每一类的数据,该数据类型是DataFrame 思路:获取clf_KMeans的标签,我这里是聚三类,标签就是0,1,2 将Label转成Series类型,再筛选出指定标签的res0,我筛 ...

随机推荐

  1. Leetcode 16

    //一次AC 有点爽的class Solution { public: int threeSumClosest(vector<int>& nums, int target) { ; ...

  2. MD5加密源码!

    import java.security.*; class MD5{ public final static String MD5(String s){ char hexDigits[] = {'0' ...

  3. 004PHP文件处理——目录操作:glob rewinddir opendir readdir

    <?php /** * 目录操作:glob rewinddir opendir readdir */ //glob 以数组形式返回,参数1这个目录的所有内容,可以置顶返回的具体类型 //只遍历输 ...

  4. js 数据函数

    //shift:删除原数组第一项,并返回删除元素的值:如果数组为空则返回undefined var a = [1,2,3,4,5]; var b = a.shift(); //a:[2,3,4,5]  ...

  5. Eclipse Oxygen SVN Connector Setup

    新版的Eclipse(Oxygen)安装完Subversive后,现时无法自动安装SVN Connector,无论选择哪个都会自动关闭. 解决方法: Help -> Install New So ...

  6. L188

    This is the view from the instrument deployment camera of InSight, America’s latest probe to Mars, w ...

  7. Yii Model

    REFs 自动生成代码 创建第一个Yii应用 创建模型 Yii 用户登陆机制

  8. LOJ10131. 「一本通 4.4 例 2」暗的连锁【树上差分】

    LINK solution 很简单的题 你就考虑实际上是对每一个边求出两端节点分别在两个子树里面的附加边的数量 然后这个值是0第二次随便切有m种方案,如果这个值是1第二次只有一种方案 如果这个值是2或 ...

  9. springboot读取配置文件的顺序

    前言 今天测试一些东西,发现配置文件连接的数据库一直不正常,数据也不对,今天请教了之后,原来springboot的配置文件加载不仅仅是项目内的配置文件. 正文 项目目录是这样的:文件夹下有:项目,ap ...

  10. SqlServer高级特性--游标

    游标 用途:在数据很多的时候,如果在java代码中进行循环之后再进行更新数据,会造成频繁的连接数据库,耗费性能,所以就可以使用到游标 作用:查询出来的集合直接在SQL中进行遍历在进行更新 DECLAR ...