In [14]: 'hello-wold.tar.gz'.split('.')
Out[14]: ['hello-wold', 'tar', 'gz'] In [15]: import re In [16]: re.split('-|\.','hello-wold.tar.gz')
Out[16]: ['hello', 'wold', 'tar', 'gz']

In [22]: m = re.search('(to)mo(rr)ow','I will see you tomorrow')

In [23]: m.groups()
  Out[23]: ('to', 'rr')

In [33]: m.group(1)
  Out[33]: 'to'

In [34]: m.group(2)
  Out[34]: 'rr'

#############################正则######################

`

案例:

要点:

匹配ip:

In [23]: m = re.match('^(\d+\.\d){3}',data)

In [24]: m.group()
Out[24]: '192.168.244.2'

或者:

In [25]: m = re.match('^(.*?) -.*$',data)

In [27]: m.group(1)
Out[27]: '192.168.244.2'

使用字典:

代码如下:

[root@master script]# vim account_patt.py
#!/usr/bin/python
# coding:utf-8 import re
def account_patt(fname,patt):
patt_dict = {}
cpatt = re.compile(patt)
with open(fname) as fobj:
for line in fobj:
m = cpatt.search(line)
if m:
key = m.group()
patt_dict[key] = patt_dict.get(key,0) + 1 ###这边很关键
return patt_dict if __name__ == '__main__':
log_file = '/var/log/httpd/access_log'
ip_patt = '^(\d+\.){3}\d+'
br_patt = 'Chrome|Firefox'
print account_patt(log_file,ip_patt)
print account_patt(log_file,br_patt)
~
"account_patt.py" 25L, 573C written
[root@master script]# python account_patt.py
{'192.168.244.2': 4}
{'Chrome': 2, 'Firefox': 2}

还可以对结果进行排序:

[root@master script]# cat account_patt.py
#!/usr/bin/python
# coding:utf-8 import re
def account_patt(fname,patt):
patt_dict = {}
cpatt = re.compile(patt)
with open(fname) as fobj:
for line in fobj:
m = cpatt.search(line)
if m:
key = m.group()
patt_dict[key] = patt_dict.get(key,0) + 1
return patt_dict def sort(aDict): ####字典的值排序,很重要
alist = []
patt_list = aDict.items()
for i in range(len(patt_list)):
greater = patt_list[0]
for j in range(len(patt_list[1:])):
if greater[1] < patt_list[j + 1][1]:
greater = patt_list[j + 1]
alist.append(greater)
patt_list.remove(greater)
return alist
if __name__ == '__main__':
log_file = '/var/log/httpd/access_log'
ip_patt = '^(\d+\.){3}\d+'
br_patt = 'Chrome|Firefox'
ip_count = account_patt(log_file,ip_patt)
print sort(ip_count)
print account_patt(log_file,br_patt)
[root@master script]# python account_patt.py
[('127.0.0.1', 7), ('192.168.244.2', 4), ('192.168.244.9', 1)]
{'Chrome': 2, 'Firefox': 2}

####额外##########

对字典排序还有一个模块可以用,貌似在2.7 以上版本才有

import collections

c = collections.Counter()
c.update(('192.168.244.1','192.168.244.2','192.168.244.2'))
print c.most_common(2) #######most_common(2) 前二

效果:

C:\Python27\python2.exe D:/pycharm/pa/tt.py
[('192.168.244.2', 2), ('192.168.244.1', 1)]

用类的方法写:

####################socket#######################

对于客户端程序来说,建立一个socket需要两个步骤:一。建立一个实际的socket对象;二。需要把他连接到远程服务器上

在建立socket对象的时候,需要告诉系统两件事:通信类型和协议家族

例子:

[root@master script]# vim tcpserv.py
#!/usr/bin/python
# coding:utf-8 import socket host = ''
port = 54321
addr = (host,port) s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
s.bind(addr)
print 'Waiting for connection....'
s.listen(5)
while True:
cli_socket,cli_addr = s.accept()
print 'get connection from', cli_socket.getpeername()
while True:
data = cli_socket.recv(4096)
if not data.strip():
break
print data
cli_socket.send('see you\n')
cli_socket.close()
s.close() 
[root@master script]# vim tcpserv.py
#!/usr/bin/python
# coding:utf-8 import socket
import time
host = ''
port = 54321
addr = (host,port) s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
s.bind(addr)
print 'Waiting for connection....'
s.listen(5)
while 1:
cli_socket,cli_addr = s.accept()
print 'get connection from', cli_socket.getpeername()
while True:
data = cli_socket.recv(4096)
if not data.strip():
break
cli_socket.send('%s :[%s]' % (time.ctime(),data)) ###发送消息到客户端
cli_socket.close()
s.close()

创建一个客户端:

[root@master script]# vim tcpserv_cli.py
#!/usr/bin/python
# coding:utf8 import socket
host = ''
port = 54321
addr = (host,port)
c = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
c.connect(addr) while True:
data = raw_input('>')
if not data:
break
c.send(data)
print c.recv(4096)
c.close()

客户端:

python 基础之第十二天(re正则,socket模块)的更多相关文章

  1. Python基础系列讲解——TCP协议的socket编程

    前言 我们知道TCP协议(Transmission Control Protocol, 传输控制协议)是一种面向连接的传输层通信协议,它能提供高可靠性通信,像HTTP/HTTPS等网络服务都采用TCP ...

  2. Py修行路 python基础 (二十四)socket编程

    socket编程 一.客户端/服务端架构 客户端/服务端架构 即C/S架构,包括:1.硬件C/S架构,2.软件C/S架构. 互联网中处处都是C/S架构,学习socket 就是为了完成C/S架构的开发. ...

  3. Python基础笔记系列十二:requests模块的简单应用

    本系列教程供个人学习笔记使用,如果您要浏览可能需要其它编程语言基础(如C语言),why?因为我写得烂啊,只有我自己看得懂!! httpbin httpbin这个网站能测试 HTTP 请求和响应的各种信 ...

  4. Py修行路 python基础 (二十一)logging日志模块 json序列化 正则表达式(re)

    一.日志模块 两种配置方式:1.config函数 2.logger #1.config函数 不能输出到屏幕 #2.logger对象 (获取别人的信息,需要两个数据流:文件流和屏幕流需要将数据从两个数据 ...

  5. python基础——14(shelve/shutil/random/logging模块/标准流)

    一.标准流 1.1.标准输入流 res = sys.stdin.read(3) 可以设置读取的字节数 print(res) res = sys.stdin.readline() print(res) ...

  6. python基础(十三)--os和sys模块

    os模块 os.getpwd():获取当前工作目录(windows下没有) os.listdir(path):列出目录下的文件 os.remove(path):删出文件 (不能是目录,即文件夹) os ...

  7. Python 基础篇:编码、变量、模块

    1. 编码 python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ASCII). 2. 变量 变量定义的规则: 变量名只能是 字母.数字或下划线的任意组合 变量名的第一个字符不能是数 ...

  8. python基础===中文手册,可查询各个模块

    http://python.usyiyi.cn/translate/python_352/index.html

  9. python基础-协程函数、递归、模块、包等内容

    1. 协程函数 1.1 yield基本用法 yield作用 1.把函数的执行结果封装好,即封装__iter__和__next__,即得到一个迭代器 2.与return功能类似,都可以返回值,但不同的是 ...

随机推荐

  1. 别样JAVA学习(五)继承上(1.1)Object类toString()

    接下来说完equals以后,我们学习接下来的toString(), Java又觉得全部对象不光具有比較性, 还能使对象变成字符串被打印. 出现 曾经前面显示的是数组.如今显示的是这个对象所属的类. 紧 ...

  2. 百度 BAE 项目部署

    转载:http://www.cnblogs.com/shamoyuu/p/node_bae.html 百度有一个应用引擎,价格非常便宜,Java的tomcat每天4毛钱,node每天2毛钱,我以前在上 ...

  3. openERP server action,最强大的功能,没有之一

    Jeffery9@gmail.com 出品 @jeffery-陈帆 原理 ations OE定义了ir.actions.actions,并从中派生了众多的子类 ir.actions.client ir ...

  4. 由于扩展配置问题而无法提供您请求的页面...请添加 MIME 映射.--解决方法

    http://blog.sina.com.cn/s/blog_4c78de680100quis.html HTTP 错误 404.3 - Not Found由于扩展配置问题而无法提供您请求的页面.如果 ...

  5. [笔记] sed and awk

    / awk程序的典型示例是将数据转换成格式化的报表,当数据拥有某种结构时就能最好的体现awk的好处:可以使用awk脚本对数据的列重新排序,甚至可以将列变成行以及将行变成列:awk的功能将文本编辑的思想 ...

  6. Phalcon框架如何实现读写分离

    Phalcon框架如何实现读写分离 假设你已经在DI容器里注册了俩 db services,如下: <?php // 主库 $di->setShared('dbWrite', functi ...

  7. Spring Cloud(十):服务网关zuul(转)

    前面的文章我们介绍了,Eureka用于服务的注册于发现,Feign支持服务的调用以及均衡负载,Hystrix处理服务的熔断防止故障扩散,Spring Cloud Config服务集群配置中心,似乎一个 ...

  8. xadmin入门使用

    ,官方文档:http://xadmin.readthedocs.io/en/docs-chinese/views_api.html 中文文档:https://www.kancloud.cn/net_y ...

  9. centos7下memcached的安装配置

    memcached 依赖 libevent-devel 首先安装libevent-devel yum -y install libevent-devel 安装完毕! 继续安装memcached yum ...

  10. WPF 后台Render线程崩溃, Exception from HRESULT: 0x88980406

    近期遇到一个问题.窗口在Loaded同一时候Resize会出现黑屏或者直接崩溃, 调查发现是WPF后端的Render线程渲染UI到DirectX时崩溃. 硬件环境:WES7 + .Net4.0 关于W ...