工具函数
来源:互联网 发布:刷留言软件 编辑:程序博客网 时间:2024/04/30 11:56
1.由域名获取IP地址
import urllibimport httplibimport reimport urlparseimport jsondef ip(host_addr,format="dot"): ''' describe: function try to find the ip addr of the given host addr params: host_addr:the format like www.baidu.com or http://www.baidu.com format:the format of return value dot=>ip string like 123.121.121.21, num=>number format like 327382483 return :IP string list or number list when num specified ''' query_url='http://ip.chinaz.com/?' if host_addr.startswith("http"): req_url=urlparse.urlsplit(host_addr).netloc else: req_url=host_addr r=urllib.urlopen(query_url+"IP="+req_url) ipRex=r':\s+([\d\.]*)\s' try: if r !=None: context=r.read() rst=re.findall(ipRex,context) if rst!=None: if format=="num": rss=[] for rs in rst: sum=0 for f in enumerate(rs.split('.')): sum+=int(f[1])<<((3-f[0])*8) rss.append(str(sum)) del rst rst=rss return rst return None except : return Noneprint ip('www.baidu.com')print ip('www.baidu.com','num')
测试结果:
['220.181.111.147']['3702878099']参考:http://www.oschina.net/code/snippet_79695_16093
2. IP地址和整数之间的转换函数
import socketimport structdef str2uint(str1): return socket.ntohl(struct.unpack("I",socket.inet_aton(str1))[0]) # 得到始终是正数 def str2int(str1): uint = socket.ntohl(struct.unpack("I",socket.inet_aton(str1))[0]) return struct.unpack("i", struct.pack('I', uint))[0] # 先得到负数,再转换一下 def num2str(ip): if ip < 0: ip = struct.unpack("I", struct.pack('i', ip))[0] return socket.inet_ntoa(struct.pack('I',socket.htonl(ip)))
测试结果:
print str2uint("10.7.11.213")print str2int("10.7.11.213")print num2str(168233941)
转自:http://blog.csdn.net/rainharder/article/details/6107154
3.判断文件编码并获取文件内容
__author__ = 'soso_fy'#codeing:utf-8# 写python脚本经常要用到的一些函数# 免得每次都重写蛋疼# require python 3.2 or laterimport osimport codecs# 读取文本文件函数,支持bom-utf-8,utf-8,utf-16,gbk,gb2312# 返回文件内容def ReadTextFile(filepath): try: file = open(filepath, 'rb') except IOError as err: print('读取文件出错 in ReadFile', err) bytes = file.read() file.close() if bytes[:3] == codecs.BOM_UTF8: content = bytes[3:].decode('utf-8') else: try: content = bytes.decode('gb2312') except UnicodeDecodeError as err: try: content = bytes.decode('utf-16') except UnicodeDecodeError as err: try: content = bytes.decode('utf-8') except UnicodeDecodeError as err: try: content = bytes.decode('gbk') except UnicodeDecodeError as err: content = '' print('不支持此种类型的文本文件编码', err) return content
测试结果:
print ReadTextFile('C://python2.7//myTest//kp.conf')运行结果
realserver 192.168.191.129 10447{ weight 3}realserver 192.168.191.130 80{ weight 3}
4.获取目录下的特定扩展名的文件名
__author__ = 'soso_fy'#codeing:utf-8# 获取指定路径下所有指定后缀的文件# dir 指定路径# ext 指定后缀,链表&不需要带点或者不指定。例子:['xml', 'java']def GetFileFromThisRootDir(dir,ext = None): allfiles = [] needExtFilter = (ext != None) if needExtFilter: ext = list(map(lambda x:x.lower(), ext)) for root,dirs,files in os.walk(dir): for filespath in files: filepath = os.path.join(root, filespath).lower() extension = os.path.splitext(filepath)[1][1:] if needExtFilter and extension in ext: allfiles.append(filepath) elif not needExtFilter: allfiles.append(filepath) return allfiles测试结果:
print GetFileFromThisRootDir('C://python2.7//myTest',['txt,conf'])
运行结果
['c://python2.7//mytest\\1.txt', 'c://python2.7//mytest\\conf_1000.conf', 'c://python2.7//mytest\\kp.conf', 'c://python2.7//mytest\\rs.conf', 'c://python2.7//mytest\\test.conf']
上面2个转自:http://www.oschina.net/code/snippet_272860_16194
5. unicode编码转换成utf8编码
def h2b(x):"""十六进制转二进制"""result = []if x==0:return ['0']while x != 1:result.append(str(x%2))x /= 2result.append('1')result.reverse()if len(result) % 4 != 0:for i in range(0,(4 - len(result) % 4)):result.insert(0,'0')return "".join(result)def c2u(x):"""unicode 转 utf8"""result = ''if 0x0 <= x and x <= 0x7F:result = h2b(x)elif 0x80 <= x and x <= 0x7FF:if len(h2b(x)) == 8:tmp = '000' + h2b(x)else:tmp = h2b(x)[1:]result = '110'+ tmp[0:5] + '10' + tmp[5:]elif 0x800 <= x and x <= 0xFFFF:if len(h2b(x)) == 12:tmp = '0000' + h2b(x)else:tmp = h2b(x)result = '1110'+ tmp[0:4] + '10' + tmp[4:10] + '10' + tmp[10:]return b2h(result)def b2h(x):"""二进制转十六进制"""hex = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9' , 'A' , 'B' , 'C' , 'D' , 'E' , 'F']result = []def getValue(bin):value = 0for i in range(4):value += int(bin[i]) * 2**(3-i)return valuefor i in range(len(x)/4):result.append(hex[getValue(x[i*4:(i+1)*4])])return result
转自:http://www.oschina.net/code/snippet_223232_15787
6.统计日志中IP出现的次数
#-*- coding:utf-8 -*-import re,timedef mail_log(file_path): global count log=open(file_path,'r') C=r'\.'.join([r'\d{1,3}']*4) find=re.compile(C) count={} for i in log: for ip in find.findall(i): count[ip]=count.get(ip,1)+1if __name__ == '__main__': print time.clock() num=0 mail_log(r'e:\MDaemon-20110329-all.log') R=count.items() for i in R: if i[1]>0: #提取出现次数大于0的IP print i num+=1 print '符合要求数量:%s耗时(%s)'%(num,time.clock())
测试结果:(这脚本可用于多种日志类型,本人测试MDaemon的all日志文件大小1.23G左右,分析用时2~3分钟
代码很简单,很适合运维人员,有不足的地方请大家指出哦)
('206.220.200.250', 8)('66.40.52.37', 10)('66.40.52.36', 5)('207.115.11.41', 4)('96.47.193.25', 9)('96.47.193.24', 5)('96.47.193.23', 17)('72.32.181.92', 5)
http://www.oschina.net/code/snippet_591089_12662
5.subprocess函数的使用测试
import subprocessdef disk_report(): p = subprocess.Popen("df -h ",shell=True,stdout=subprocess.PIPE) return p.stdout.readlines()print disk_report()
结果:
['Filesystem Size Used Avail Use% Mounted on\n', '/dev/sda2 19G 9.9G 8.2G 55% /\n', '/dev/sda5 414G 6.4G 386G 2% /var\n', '/dev/sda1 99M 11M 83M 12% /boot\n', 'tmpfs 4.0G 0 4.0G 0% /dev/shm\n']
6.复制文件夹
def CopyFolderOs(sFolder,tFolder): sourcePath = sFolder destPath = tFolder for root, dirs, files in os.walk(sourcePath): #figure out where we're going dest = destPath + root.replace(sourcePath, '') #if we're in a directory that doesn't exist in the destination folder #then create a new folder if not os.path.isdir(dest): os.mkdir(dest) print 'Directory created at: ' + dest #loop through all files in the directory for f in files: #compute current (old) & new file locations oldLoc = root + '\\' + f newLoc = dest + '\\' + f if not os.path.isfile(newLoc): try: shutil.copy2(oldLoc, newLoc) print 'File ' + f + ' copied.' except IOError: print 'file "' + f + '" already exists'
测试结果:
CopyFolderOs("C://python2.7//myTest","C://python2.7//myTestbak")
Directory created at: C://python2.7//myTestbakFile Conf_1000.conf copied.File ip.log copied.File kp.conf copied.File RS.conf copied.File test.conf copied.
7.复制文件夹里面的文件
def RemoveFolderOs(sourceDir,localAppDataPath): for root, dirs, files in os.walk(sourceDir): for f in files: os.unlink(os.path.join(root, f)) for d in dirs: shutil.rmtree(os.path.join(root, d))
测试结果:
RemoveFolderOs("C://python2.7//myTestbak")
myTestbak文件夹还存在
转自 http://www.oschina.net/code/snippet_72895_1576
8.创建守护进程
def createDaemon(): ”’Funzione che crea un demone per eseguire un determinato programma…”’ import os # create - fork 1 try: if os.fork() > 0: os._exit(0) # exit father… except OSError, error: print ‘fork #1 failed: %d (%s)’ % (error.errno, error.strerror) os._exit(1) # it separates the son from the father os.chdir(’/') os.setsid() os.umask(0) # create - fork 2 try: pid = os.fork() if pid > 0: print ‘Daemon PID %d’ % pid os._exit(0) except OSError, error: print ‘fork #2 failed: %d (%s)’ % (error.errno, error.strerror) os._exit(1) funzioneDemo() # function demo def funzioneDemo(): import time fd = open('/tmp/demone.log', 'w') while True: fd.write(time.ctime()+'\n') fd.flush() time.sleep(2) fd.close() if __name__ == '__main__': createDaemon()
转自:http://www.oschina.net/code/snippet_16840_1896
9.执行外部命令
import commands ret, output = commands.getstatusoutput('ls')print ret print output
转自:http://www.cnblogs.com/lovemdx/archive/2013/03/08/2950301.html
10.文件内容的查找和替换
查找
import remyfile = file("C://python2.7//myTest//file.txt", "r+")count = 0for s in myfile.readlines(): li = re.findall("hello", s) if len([li]) > 0: count = count + li.count("hello")print "find:" + str(count) + "times hello" myfile.close()
文件内容的查找:从hello.txt中查找字符串“hello”, 并统计“hello”出现的次数。
结果:find:10times hello
替换:文件内容的替换:把hello.txt中的hello全部换为”hi“,并把结果保存到myhello.txt中。
f1 = file("C://python2.7//myTest//file.txt", "r")f2 = file("C://python2.7//myTest//myhello.txt", "w")for s in f1.readlines(): f2.write(s.replace("hello","hi")) f1.close()f2.close()
11.目录的遍历
方法1:递归
import osdef VisitDir(path) : li = os.listdir(path) for p in li: pathname = os.path.join(path, p) if not os.path.isfile(pathname) : VisitDir(pathname) else: print pathnameif __name__ == "__main__": path = r"C://python2.7//myTest" VisitDir(path)
2.walk()函数
os.walk()的执行效率最高,且不需要回调函数,容易使用。os.walk()的声明如下:
walk(top, topdown=ture, onerron= none)
(1)top表示需要遍历的目录树的路径。
(2)参数topdown的默认值为ture,表示先返回目录树下的文件,然后再遍历目录树的子目录,topdow为 false表示先遍历目录树下的子目录,然后返回根目录树的文件
(3)onerror为none表示忽略文件遍历时产生的错误。
(4)该函数返回一个元组,该元组有三个元素,分别是:每次遍历的路径名,目录列表和文件列表
def VisitDirWalk(path) : for root, dirs, files in os.walk(path): print 'root:',root print 'dirs:',dirs print 'files:',files for filepath in files: print os.path.join(root, filepath)
测试结果:
path = r"C://python2.7//myTest" VisitDirWalk(path)
root: C://python2.7//myTestdirs: ['test']files: ['Conf_1000.conf', 'file.txt', 'ip.log', 'kp.conf', 'myhello.txt', 'RS.conf', 'test.conf']C://python2.7//myTest\Conf_1000.confC://python2.7//myTest\file.txtC://python2.7//myTest\ip.logC://python2.7//myTest\kp.confC://python2.7//myTest\myhello.txtC://python2.7//myTest\RS.confC://python2.7//myTest\test.confroot: C://python2.7//myTest\testdirs: []files: ['Conf_1000.conf']C://python2.7//myTest\test\Conf_1000.conf
12.删除py中的注释
f = open('file1.py', 'r+')line = f.readlines()f.seek(0)for l in line: for i in range(len(l)): if l[i]=='#': l=l[:i]+' '*(len(l)-i-1)+'\n' break f.write(l)f.close()
- 工具函数
- 工具函数
- 工具函数
- 工具函数
- 工具函数
- 工具函数
- 一些工具函数
- 几个java工具函数
- jsf中工具函数
- JSP一些工具函数
- 内核函数跟踪工具
- 一些工具函数--JSONHelper
- 一些工具函数--WordDocHelper
- 实用 Ajax 工具函数
- freemodbus工具函数
- php 重要工具函数
- jQuery使用工具函数
- 工具小函数集合
- [3月18日的脚本] 在SharePoint Server 2010中热启动应用程序
- 求任意一整数的各位数和
- 机器学习中的数学(4)-线性判别分析(LDA), 主成分分析(PCA)
- Jpcap 4个主要类的说明
- html5学习笔记地理定位
- 工具函数
- java_decorator
- 与概率相关的题目
- linux 工作队列之schedule_delayed_work
- sqlplus 远程连接oracle 命令
- 怎么成为技术大牛
- 提高sql效率
- 图解autoscan、aclocal、autoheader、automake、autoconf、configure、make
- android usb mass storage EMMC转化为SD卡(二)