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:Python27python2.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 ') 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()
客户端: