使用python实现正则匹配检索远端FTP目录下的文件


Posted in Python onMarch 25, 2015

遇到一个问题,需要正则匹配远端FTP目录下的文件,如果使用ftp客户端可以通过命令行很容易的做到这一点,但是暂时没有一个工具支持这样的需求,于是通过python对FTP的支持和对正则表达式的支持,写了这么一个简单的工具,用于使用正则表达式来匹配远端目录的文件。

代码如下

# coding=utf-8
#########################################################################
# File Name: reg_url.py
# Author: WangWeilong
# Company: Baidu
#########################################################################

import re
import sys
import os
from ftplib import FTP

dhccmd = "http://xxx/api/submit"

class DHC_FTP():
 def __init__(self, hostname, username="", passwd=""):
  self.hostname = hostname
  try:
   self.ftp = FTP(self.hostname)
  except:
   print "hostname error!"
   exit(-1)
  self.username = username
  self.passwd = passwd
  self.filelist = []
  self.reg_pattern = ""

 def getftpfilelist(self, path):
  self.ftp.login(self.username, self.passwd)
  self.ftp.cwd(path)
  self.filelist = self.ftp.nlst()

 def matchnames(self, regpattern):
  pattern = re.compile(regpattern)
  matchedfiles = []
  for file in self.filelist:
   match = pattern.search(file)
   if match:
    matchedfiles.append(match.string)
  return matchedfiles



if __name__ == "__main__":
 if len(sys.argv) != 4:
  print 'usage:python reg_url.py $ftpurldir $regular'
 else:
  #解析ftpurl字符串
  head = sys.argv[1].split("@")[1].split("/")[0]
  username = sys.argv[1].split("//")[1].split(":")[0]
  passwd = sys.argv[1].split("//")[1].split(":")[1].split("@")[0]
  pathdir = sys.argv[1].split(head)[1]

  dhc_ftp = DHC_FTP(head, username, passwd)
  dhc_ftp.getftpfilelist("./" + pathdir)

  #获取正则表达式
  regpattern = r'%s' % sys.argv[2]

  matchedfiles = dhc_ftp.matchnames(regpattern)
  for files in matchedfiles:
   ftpname = sys.argv[1] + "/" + files
   print ftpname

通过输入想要的检索的远端目录地址和想要用来匹配的正则表达式,就能获取到远端的文件了,至于用这些文件来干嘛,那就是需求问题了。

以上所述就是本文的全部内容了,希望大家能够喜欢。

请您花一点时间将文章分享给您的朋友或者留下评论。我们将会由衷感谢您的支持!

Python 相关文章推荐
python daemon守护进程实现
Aug 27 Python
python让列表倒序输出的实例
Jun 25 Python
Python实现常见的回文字符串算法
Nov 14 Python
python使用selenium登录QQ邮箱(附带滑动解锁)
Jan 23 Python
Python3.5字符串常用操作实例详解
May 01 Python
python制作简单五子棋游戏
Jun 18 Python
Python 实现大整数乘法算法的示例代码
Sep 17 Python
浅析python内置模块collections
Nov 15 Python
Python对称的二叉树多种思路实现方法
Feb 28 Python
在python3.64中安装pyinstaller库的方法步骤
Jun 02 Python
Python代码覆盖率统计工具coverage.py用法详解
Nov 25 Python
Python实现PIL图像处理库绘制国际象棋棋盘
Jul 16 Python
python通过wxPython打开一个音频文件并播放的方法
Mar 25 #Python
python概率计算器实例分析
Mar 25 #Python
python编写的最短路径算法
Mar 25 #Python
python实现挑选出来100以内的质数
Mar 24 #Python
Python 的 Socket 编程
Mar 24 #Python
python获取标准北京时间的方法
Mar 24 #Python
python实现定时同步本机与北京时间的方法
Mar 24 #Python
You might like
php后门URL的防范
2013/11/12 PHP
php中文乱码问题的终极解决方案汇总
2017/08/01 PHP
php如何计算两坐标点之间的距离
2018/12/29 PHP
laravel 实现用户登录注销并限制功能
2019/10/24 PHP
jQuery 常见学习网站与参考书
2009/11/09 Javascript
30个精美的jQuery幻灯片效果插件和教程
2011/08/23 Javascript
jquery方法+js一般方法+js面向对象方法实现拖拽效果
2012/08/30 Javascript
鼠标移动到图片名上,显示图片的简单实例
2013/07/14 Javascript
Asp.Net alert弹出提示信息的几种方法总结
2014/01/29 Javascript
一个JavaScript防止表单重复提交的实例
2014/10/21 Javascript
Bootstrap模态框使用详解
2017/02/15 Javascript
解决Vue2.0自带浏览器里无法打开的原因(兼容处理)
2017/07/28 Javascript
Vue中定义全局变量与常量的各种方式详解
2017/08/23 Javascript
使用veloticy-ui生成文字动画效果
2018/02/08 Javascript
NodeJs 文件系统操作模块fs使用方法详解
2018/11/26 NodeJs
JavaScript实现轮播图特效
2020/04/10 Javascript
vue实现购物车结算功能
2020/06/18 Javascript
JS typeof fn === 'function' && fn()详解
2020/08/22 Javascript
K-means聚类算法介绍与利用python实现的代码示例
2017/11/13 Python
Python实现自动上京东抢手机
2018/02/06 Python
Centos下实现安装Python3.6和Python2共存
2018/08/15 Python
PyQt5 QTableView设置某一列不可编辑的方法
2019/06/25 Python
Django框架组成结构、基本概念与文件功能分析
2019/07/30 Python
python实现批量处理将图片粘贴到另一张图片上并保存
2019/12/12 Python
python读写文件write和flush的实现方式
2020/02/21 Python
浅谈cv2.imread()和keras.preprocessing中的image.load_img()区别
2020/06/12 Python
Python Map 函数的使用
2020/08/28 Python
Python实现七个基本算法的实例代码
2020/10/08 Python
Vilebrequin欧洲官网:法国豪华泳装品牌(男士沙滩裤)
2018/04/14 全球购物
硕士研究生自我鉴定范文
2013/12/27 职场文书
毕业证丢失证明
2014/01/15 职场文书
大学旷课检讨书
2014/01/28 职场文书
会计师职业生涯规划范文
2014/02/18 职场文书
《植树问题》教学反思
2016/03/03 职场文书
Netty客户端接入流程NioSocketChannel创建解析
2022/03/25 Java/Android
Win11运行cmd提示“请求的操作需要提升”的两种解决方法
2022/07/07 数码科技