设为首页 收藏本站
查看: 1212|回复: 0

[经验分享] python笔记--内置模块

[复制链接]

尚未签到

发表于 2018-8-14 11:22:29 | 显示全部楼层 |阅读模式
  python常用内置模块
  类似于函数式编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合。而对于一个复杂的功能来说,可能需要多个函数才能完成(函数又可以在不同的.py文件中),n个.py文件组成的代码集合就称为模块。
  模块分为三种:自定义模块、内置模块、开源模块http://pypi.python.org
  一、导入模块
  方法:
import module  
from module.xx.xx import xx
  
from module.xx.xx import xx as rename
  
from module.xx.xx import *
  导入模块其实就是告诉Python解释器去解释那个py文件,导入一个py文件,解释器解释该py文件,导入一个包,解释器解释该包下的 __init__.py 文件。
  那么问题来了,导入模块时是根据那个路径作为基准来进行的呢?即:sys.path
  如果sys.path路径列表没有你想要的路径,可以通过 sys.path.append('路径') 添加。可以通过os模块获得路径,例如:
import sys  
import os
  
pre_path = os.path.abspath('../')
  
sys.path.append(pre_path)
  二、第三方模块的下载安装
  两种方法:
  使用pip工具,具体使用方法,可以参照:
  http://blog.csdn.net/olanlanxiari/article/details/48086917
  下载源码包,解压后进入解压目录,依次执行:
python setup.py build  
python setup.py install
  三、内置模块
  os,用于提供系统级别的操作
  os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
  os.chdir("dirname")  改变当前脚本工作目录;相当于shell下cd
  os.curdir  返回当前目录: ('.')
  os.pardir  获取当前目录的父目录字符串名:('..')
  os.makedirs('dirname1/dirname2')    可生成多层递归目录
  os.removedirs('dirname1')  若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
  os.mkdir('dirname')  生成单级目录;相当于shell中mkdir dirname
  os.rmdir('dirname')  删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
  os.listdir('dirname')  列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
  os.remove()  删除一个文件
  os.rename("oldname","newname")  重命名文件/目录
  os.stat('path/filename')  获取文件/目录信息
  os.sep  输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
  os.linesep  输出当前平台使用的行终止符(换行符),win下为"\t\n",Linux下为"\n"
  os.pathsep  输出用于分割文件路径的字符串
  os.name  输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
  os.system("bash command")  运行shell命令,直接显示
  os.environ  获取系统环境变量
  os.path.abspath(path)  返回path规范化的绝对路径
  os.path.split(path)  将path分割成目录和文件名二元组返回
  os.path.dirname(path)  返回path的目录。其实就是os.path.split(path)的第一个元素
  os.path.basename(path)  返回path最后的文件名。如果path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
  os.path.exists(path)  如果path存在,返回True;如果path不存在,返回False
  os.path.isabs(path)  如果path是绝对路径,返回True,否则返回False
  os.path.isfile(path)  如果path是一个存在的文件,返回True,否则返回False
  os.path.isdir(path)  如果path是一个存在的目录,则返回True,否则返回False
  os.path.islink(path)  如果path是一个链接目录,返回True,否则返回False
  os.path.ismount(path)  如果path挂载了设备,返回True,否则返回False
  os.path.join(path1[, path2[, ...]])  将多个路径组合后返回,常用于拼接路径
  os.path.getatime(path)  返回path所指向的文件或者目录的最后访问时间
  os.path.getctime(path)  返回path所指向的文件或者目录的最后变化时间
  os.path.getmtime(path)  返回path所指向的文件或者目录的最后修改时间
  os.walk(path)  目录生成器返回格式:(dirpath,[dirnames],[filenames]),例如:
>>> import os  
>>> for ROOT,DIR,FILE in os.walk('/root/test'):
  
...     print ROOT
  
...     print DIR
  
...     print FILE
  
...
  
/root/test
  
['lala']
  
['test.txt', '001.txt', '002.py']
  
/root/test/lala
  
[]
  
['003.txt']
  

  
#我们可以看一下/root/test的目录结构:
  
[root@FJC ~]# tree /root/test
  
/root/test
  
├── 001.txt
  
├── 002.py
  
├── lala
  
│   └── 003.txt
  
└── test.txt -> test.txt
  

  
1 directory, 4 files
  
  sys,用于提供对解释器相关的操作
  sys.argv  命令行参数,结果是个列表,第一个元素是程序名,之后的元素是执行程序携带的参数。例如:
[root@FJC /]# cat /root/test.py  
#!/usr/bin/env python
  
# -*- coding:utf-8 -*-
  
import sys
  
print sys.argv
  
print sys.argv[0]
  
print sys.argv[1]
  
print sys.argv[2]
  
[root@FJC /]# python /root/test.py a b c
  
['/root/test.py', 'a', 'b', 'c']
  
/root/test.py   #argv[0]
  
a               #argv[1]
  
b               #argv[2]
  sys.exit()  执行到sys.exit()时,退出程序,括号中可以加上数字,sys.exit(0)表示正常退出。
  sys.version  返回Python解释程序的版本信息
  sys.maxint  返回最大的Int值
  sys.path  返回模块的搜索路径,以列表的形式,可以追加自定义路径。
  sys.platform  返回操作系统平台名称
  sys.stdin.readline()  标准输入,例如:
>>> name=sys.stdin.readline()  
FJC    #手动输入
  
>>> print name
  
FJC
  sys.stdout.write(‘内容’)  标准输出
  sys.stdout.flush()  配合time.sleep(1)实现实时输出信息,例如:
>>> import sys  
>>> import time
  
>>> for i in range(3):
  
...    print i,
  
...    sys.stdout.flush()
  
...    time.sleep(1)
  

  

  
0 1 2       #每隔一秒输出一个数字
  
  shutil,高级的 文件、文件夹、压缩包 处理模块
  shutil.copyfileobj(fsrc, fdst[, length])
  将文件内容拷贝到另一个文件中,可以部分内容
  #注意! 在其中fsrc,fdst都是文件对象,都需要打开后才能进行复制操作,例如:
[root@FJC ~]# cat test1  
test1
  
[root@FJC ~]# cat test2
  
[root@FJC ~]# python
  
>>> n=open('test1','r+')
  
>>> m=open('test2','a+')
  
>>> import shutil
  
>>> shutil.copyfileobj(n,m)
  
>>> n.close
  
<built-in method close of file object at 0x7fd57bd165d0>
  
>>> m.close
  
<built-in method close of file object at 0x7fd57bd16660>
  
>>> quit()
  
[root@FJC ~]# cat test2
  
test1
  shutil.copyfile(src, dst)
  仅拷贝文件到文件或目录
  shutil.copymode(src, dst)
  仅拷贝权限,内容、组、用户均不变
  shutil.copystat(src, dst)
  拷贝状态的信息,包括:mode bits, atime, mtime, flags
  shutil.copy(src, dst)
  拷贝文件和权限
  shutil.copy2(src, dst)
  拷贝文件和状态信息
  shutil.ignore_patterns(*patterns)#忽略的参数
  shutil.copytree(src, dst, symlinks=True, ignore=None)  #symlinks=True表示原目录中的符号链接文件会被直接复制到目标目录中;symlinks=False表示会将原目录中符号链接文件的正本文件复制到目标目录中。
  递归的去拷贝文件,例如:
[root@FJC ~]# tree test  
test
  
├── 001.txt
  
├── 002.py
  
└── lala
  
    └── 003.txt
  

  
1 directory, 3 files
  

  
#递归拷贝,注意目标目录不能实现建立,否则会报错
  
>>> from shutil import *
  
>>> copytree('test','test1',ignore=ignore_patterns('*.py'))
  

  
[root@FJC ~]# tree test1
  
test1
  
├── 001.txt
  
└── lala
  
    └── 003.txt
  

  
1 directory, 2 files
  shutil.rmtree(path[, ignore_errors[, onerror]])
  递归的去删除文件
  shutil.move(src, dst)
  递归的去移动文件
  python3.0+版本
  shutil.make_archive(base_name, format[, root_dir[, base_dir[, verbose[, dry_run[, owner[, group[, logger]]]]]]])
  创建压缩包并返回文件路径及名称。
  base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径。
  format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar”
  root_dir: 要压缩的文件夹路径(默认当前目录)
  owner: 用户,默认当前用户
  group: 组,默认当前组
  logger: 用于记录日志,通常是logging.Logger对象
  例如:
>>> os.chdir('c:\\')  
>>> ret=shutil.make_archive('www','zip',root_dir='c:\\test')
  
>>> ret
  
'c:\\www.zip'
  
#表示将c:\\test目录下的文件压缩,保存到当前目录,命名为www
  

  
>>> ret=shutil.make_archive('c:\\www\\myfile','zip',root_dir='c:\\test')
  
>>> ret
  
'c:\\www\\myfile.zip'
  
#表示将c:\\test目录下的文件压缩,保存到c:\\www目录下,命名为myfile
  shutil 对压缩包的处理是调用 ZipFile 和 TarFile 两个模块来进行的。
>>> import zipfile  
#压缩
  
>>> z=zipfile.ZipFile('test.zip','w')
  
>>> z.write('a.log')
  
>>> z.write('b.data')
  
>>> z.close()
  
# 解压
  
>>> z = zipfile.ZipFile('test.zip', 'r')
  
>>> z.extractall()
  
>>> z.close()
  

  
>>> import tarfile
  
#压缩
  
>>> tar=tarfile.open('my.tar','w')
  
>>> tar.add('a.log',arcname='aa.log')   #arcname可以改变文件压缩后的名称
  
>>> tar.add('b.data',arcname='bb.data')
  
>>> tar.close()
  
#解压
  
# 解压
  
>>> tar = tarfile.open('your.tar','r')
  
>>> tar.extractall()   #可设置解压地址
  
>>> tar.close()
  random,用于生成随机数
  random.random()
  返回随机数,在0和1范围内
  random.randint(1,3)
  返回随机整数,在1和3范围内,包括1和3
  random.randrange(1,10)
  返回随机整数,在1和10范围内,不包括10
  random.randrange(1,10,2)
  末尾的2表示跳数,每隔两个取一个数,起始位置为1,所以这个结果就是1~10之间的随机奇数。
  random.sample(array,n)
  表示从一个数组中随机取出n个元素,例如:
>>> import random  
>>> random.sample([1,2,3,4],1)
  
[3]
  hashlib,提供常见的摘要算法,如:MD5、SHA1等
>>> import hashlib  
>>> test=hashlib.md5()
  
>>> test.update('how to use md5 in python hashlib?')
  
>>> print test.hexdigest()
  
d26a53750bc40b38b65a520292f69306
  如果,数据量很大,可以分块多次调用update(),最后的计算结果是一样的。
>>> test2=hashlib.md5()  
>>> test2.update('how to use md5 ')
  
>>> test2.update('in python hashlib?')
  
>>> print test2.hexdigest()
  
d26a53750bc40b38b65a520292f69306
  shelve,简单的数据存储方案
  只有一个函数open(),这个函数接收一个参数就是文件名,然后返回一个shelf对象,你可以用他来存储东西,就可以简单的把他当作一个字典,key必须为字符串,而值可以是python所支持的数据。当你存储完毕的时候,就调用close函数来关闭。
>>> import shelve  
>>> s=shelve.open('test.txt')
  
>>> s['x']=[1,2,3]
  
>>> s['y']=[4,5,6]
  
>>> s['x']
  
[1, 2, 3]
  
#不过有个小问题,例如:
  
>>> s['x'].append(4)
  
>>> s['x']
  
[1, 2, 3]
  新添加的元素到哪里去了呢?其实,元素4没有写回,你把[1,2,3]存到了x,当你再次读取s['x']的时候,s['x']只是一个拷贝,而你没有将拷贝写回,所以当你再次读取s['x']的时候,它又从源中读取了一个拷贝,所以,你新修改的内容并不会出现在拷贝中,解决的办法就是,利用一个缓存的变量,例如:
>>> temp=s['x']  
>>> temp.append(4)
  
>>> s['x']=temp
  
>>> s['x']
  
[1, 2, 3, 4]
  time,时间访问和转换
  time.time()  返回当前时间的时间戳(1970纪元后经过的浮点秒数)。
  time.localtime([时间戳])  转换时间戳为一个时间元组,没有参数是指当前时间。例如:
>>> a=time.localtime()  
>>> type(a)
  
<type 'time.struct_time'>
  
>>> a
  
time.struct_time(tm_year=2017, tm_mon=5, tm_mday=23, tm_hour=18, tm_min=11, tm_sec=30, tm_wday=1, tm_yday=143, tm_isdst=0)
  time.asctime([tuple])  转换时间元组为一个可读性好的格式,没有参数是指当前时间。例如:
>>> time.asctime(time.localtime())  
'Tue May 23 18:26:25 2017'
  time.ctime(时间戳)  转换时间戳为一个可读性好的格式,没有参数是指当前时间。例如:
>>> time.ctime(time.time())  
'Tue May 23 18:28:46 2017'
  time.sleep(seconds)  按照给定的秒数延迟执行,参数可以是整数或浮点数。
  time.strftime(format[,tuple]) 将元组时间转换成指定格式,没有tuple是定当前时间。例如:
>>> time.strftime('%Y-%m-%d %H:%M:%S')  
'2017-05-23 18:39:44'
  
>>> time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(12345))
  
'1970-01-01 11:25:45'
  re,正则表达式
  re.match(pattern, string)  仅从字符串头开始匹配,例如:
>>> re.match('abc','1abc2abc')#没有结果  
>>> a=re.match('abc','abc1abc2abc')
  
>>> a.group()
  
'abc'
  re.search(pattern, string)  匹配整个字符串,直到找到一个匹配,例如:
>>> b=re.search('abc','1abc2abc')  
>>> b.group()
  
'abc'
  re.findall(pattern, string)   找到所有要匹配的字符并返回列表格式,例如:
>>> re.findall('abc','1abc2abc')#注意返回结果是一个列表  
['abc', 'abc']
  re.complie(string)  生成要匹配的正则对象,例如:
>>> c=re.compile('abc')#参数可以是各种正则表达式,提前编译。  
>>> d=c.match('abc1abc2abc')#匹配时直接调用,提高了性能。
  
>>> d.group()
  
'abc'
  re.sub(pattern, repl, string, count,flag)  替换匹配到的字符,即对字符串string按照pattern匹配,得到的替换为repl,替换个数为count,flag表示匹配模式,例如:
>>> re.sub("[0-9]","|", "aaa1bbb2ccc3ddd4eee",count=2 )  
'aaa|bbb|ccc3ddd4eee'
  
>>> re.sub("[0-9]","|", "aaa1bbb2ccc3ddd4eee")   #不指定count表示替换所有匹配的
  
'aaa|bbb|ccc|ddd|eee'
  flag的类型:
  1).re.I(re.IGNORECASE): 忽略大小写
  2).re.M(MULTILINE): 多行模式,改变’^’和’$’的行为
  3).re.S(DOTALL): 点任意匹配模式,改变’.’的行为
  4).re.L(LOCALE): 使预定字符类 \w \W \b \B \s \S 取决于当前区域设定
  5).re.U(UNICODE): 使预定字符类 \w \W \b \B \s \S \d \D 取决于unicode定义的字符属性
  6).re.X(VERBOSE): 详细模式。这个模式下正则表达式可以是多行,忽略空白字符,并可以加入注释。
  注:
  正则表达式实例:
  字符匹配
  python 匹配 "python".
  字符类
  [Pp]ython 匹配 "Python" 或 "python"
  rub[ye] 匹配 "ruby" 或 "rube"
  [aeiou] 匹配中括号内的任意一个字母
  [0-9] 匹配任何数字。类似于 [0123456789]
  [a-z] 匹配任何小写字母
  [A-Z] 匹配任何大写字母
  [a-zA-Z0-9] 匹配任何字母及数字
  [^aeiou] 除了aeiou字母以外的所有字符
  [^0-9] 匹配除了数字外的字符
  特殊字符类
  . 匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用象 '[.\n]' 的模式。
  \d 匹配一个数字字符。等价于 [0-9]。
  \D 匹配一个非数字字符。等价于 [^0-9]。
  \s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
  \S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
  \w 匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。
  \W 匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'。
  参考练习:
  1.批量改名:
  目录下abc_001.txt
  abc_002.txt
  abc_003.txt
  abc_004.txt
  abc_005.txt
  改名为:001.txt
  002.txt
  003.txt
  004.txt
  005.txt
#!/usr/bin/env python  
import os
  
for x,y,z in os.walk("."):
  for i in z:
  a="".join(list(i)[4:])
  os.rename(i,a)
  2.随机生成6个包含大写字母、小写字母、数字的字符串:
#!/usr/bin/env python  
a=range(65,91)
  
b=range(97,123)
  
c=range(48,58)
  
a.extend(b)
  
a.extend(c)
  
import random
  
c=[]
  
for i in range(6):
  
    d=chr (random.sample(a,1)[0])
  
    c.append(d)
  
print "".join(c)

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-551575-1-1.html 上篇帖子: python3学习之练习题 下篇帖子: python中的if__name__== "__main__"
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表