使用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爬取Coursera课程资源的详细过程
Nov 04 Python
使用IronPython把Python脚本集成到.NET程序中的教程
Mar 31 Python
Python修改MP3文件的方法
Jun 15 Python
Python导入oracle数据的方法
Jul 10 Python
Python DataFrame设置/更改列表字段/元素类型的方法
Jun 09 Python
python实现简易内存监控
Jun 21 Python
Python3中内置类型bytes和str用法及byte和string之间各种编码转换 问题
Sep 27 Python
Django框架模板注入操作示例【变量传递到模板】
Dec 19 Python
pyqt5实现俄罗斯方块游戏
Jan 11 Python
django有外键关系的两张表如何相互查找
Feb 10 Python
python matplotlib:plt.scatter() 大小和颜色参数详解
Apr 14 Python
详解Python中namedtuple的使用
Apr 27 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
历史证明,懒惰才是推动科学发展技术进步的动力
2021/03/02 无线电
通过JavaScript或PHP检测Android设备的代码
2011/03/09 PHP
php URL验证正则表达式
2011/07/19 PHP
Laravel中log无法写入问题的解决
2017/06/17 PHP
Swoole源码中如何查询Websocket的连接问题详解
2020/08/30 PHP
js身份证验证超强脚本
2008/10/26 Javascript
JavaScript 事件的一些重要说明
2009/10/25 Javascript
jquery动态加载js三种方法实例
2013/08/03 Javascript
javascript实现复制与粘贴操作实例
2014/10/16 Javascript
js表单登陆验证示例
2016/10/19 Javascript
vue实现ToDoList简单实例
2017/02/07 Javascript
Vue分页组件实例代码
2017/04/17 Javascript
nodejs 生成和导出 word的实例代码
2018/07/31 NodeJs
vue中Axios的封装与API接口的管理详解
2018/08/09 Javascript
react 不用插件实现数字滚动的效果示例
2020/04/14 Javascript
JavaScript console的使用方法实例分析
2020/04/28 Javascript
详解vue中v-model和v-bind绑定数据的异同
2020/08/10 Javascript
[34:56]Ti4冒泡赛LGD vs Liquid 1
2014/07/14 DOTA
[01:18:21]EG vs TNC Supermajor小组赛B组败者组第一轮 BO3 第一场 6.2
2018/06/03 DOTA
Django框架实现的简单分页功能示例
2018/12/04 Python
对python:print打印时加u的含义详解
2018/12/15 Python
Django 配置多站点多域名的实现步骤
2019/05/17 Python
python openpyxl使用方法详解
2019/07/18 Python
tensorflow自定义激活函数实例
2020/02/04 Python
python yield和Generator函数用法详解
2020/02/10 Python
Python控制台输出时刷新当前行内容而不是输出新行的实现
2020/02/21 Python
Python之关于类变量的两种赋值区别详解
2020/03/12 Python
用python实现名片管理系统
2020/06/18 Python
python集合能干吗
2020/07/19 Python
Kendra Scott官网:美国领先的时尚配饰品牌
2020/10/22 全球购物
个人简历自荐信
2014/06/26 职场文书
护士年终考核评语
2014/12/31 职场文书
生死抉择观后感
2015/06/09 职场文书
职工食堂管理制度
2015/08/06 职场文书
2016应届毕业生实习评语
2015/12/01 职场文书
为什么MySQL8新特性会修改自增主键属性
2022/04/18 MySQL