常用模块(未完结)

版权声明:原创作品,谢绝转载!否则将追究法律责任。

一.模块的分类

模块,用一砣代码实现了某个功能的代码集合。 

类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合。而对于一个复杂的功能来,可能需要多个函数才能完成(函数又可以在不同的.py文件中),n个 .py 文件组成的代码集合就称为模块。

如:os 是系统相关的模块;file是文件操作相关的模块

模块分为三种:

  1>.自定义模块:自定义的模块,顾名思义,就是你自己写的python程序,我们知道python的代码都存在一个以".py"结尾的文件中的,我们这样命名一个python脚本,吧后缀去掉就是模块名称,这个就是自定义模块,我举个例子:我写了一个yinzhengjie.py的文件。里面的内容我们可以忽略,如果我们要导入这个模块的话直接导入rianley这个模块名称就好了;

  2>.内置模块:那么问题来了,我们学的cha(),id()等等所有的内置函数是模块吗?答案是否定的!不是!对内置函数不是内置模块,他们只是python解释器自带的一些功能,那么什么是内置模块呢?一会我会再我的博客中提到一些常用的内置模块;

  3>.开源模块:这个就很好解释了,python语言的官网提供了一个供应开发人员上传你的代码到服务器上(https://pypi.python.org/pypi),然后客户端只要在命令行中输入安装命令就可以随意的在shell或者cmd的python解释器中调用这个第三方模块,比如:pip install paramiko.

二.内置模块解析:

 1.OS模块详解

 1 #!/usr/bin/env python
 2 #_*_coding:utf-8_*_
 3 #@author :rianleycheng
 4 #blog:http://www.cnblogs.com/rianley
 5 #EMAIL:rianley@qq.com
 6 import os
 7 #1.获取当前工作目录,即当前python脚本工作的目录路径
 8 print(os.getcwd())
 9 #2.改变当前脚本工作目录;相当于shell下cd,记住,这个是没有返回值的哟!
10 print(os.chdir(r"D:\python\daima\DAY1"))
11 #3.返回当前目录: ('.')
12 print(os.curdir)
13 #4.获取当前目录的父目录字符串名:('..')
14 print(os.pardir)
15 #5.可生成多层递归目录(创建目录),生产完毕后返回一个None值
16 print(os.makedirs("D:\python\daima\DAY10"))
17 #6.若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推(和上面的相反,就是删除目录。)
18 print(os.removedirs("D:\python\daima\DAY10"))
19 #7.生成单级目录;相当于shell中mkdir dirname,如果当前目录已经存在改目录就会报错!
20 print(os.mkdir("DAY10"))
21 #8.删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname,如果当前目录没有改目录就会报错!
22 print(os.rmdir("DAY10"))
23 #9.列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
24 print(os.listdir("D:\python\daima"))
25 #10.删除一个文件
26 # os.remove("locked.txt")
27 #11.重命名文件/目录
28 # os.rename("oldname","newname")
29 #12.os.stat('path/filename')  获取文件/目录信息
30 print(os.stat("D:\python\daima\DAY4"))
31 #13.输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
32 print(os.sep)
33 #14.输出当前平台使用的行终止符,win下为"\r\n",Linux下为"\n"
34 print(os.linesep)
35 #15.输出用于分割文件路径的字符串
36 print(os.pathsep)
37 #16.输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
38 print(os.name)
39 #17.运行shell或者windows命令,直接显示命令的输出结果,可以将这个数据存放在一个变量中哟
40 # print(os.system("dir"))
41 #18.返回path规范化的绝对路径
42 print(os.path.abspath("user_info.txt"))
43 #19.将path分割成目录和文件名二元组返回
44 print(os.path.split(r"D:\python\daima\DAY1\user_info.txt"))
45 #20.返回path的目录。其实就是os.path.split(path)的第一个元素
46 print(os.path.dirname(r"D:\python\daima\DAY1\user_info.txt"))
47 #21.os.path.basename(path)  返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
48 print(os.path.basename(r"D:\python\daima\DAY1\user_info.txt"))
49 #22.os.path.exists(path)  如果path存在,返回True;如果path不存在,返回False
50 print(os.path.exists(r"D:\python\daima\DAY1\user_info.txt"))
51 #23.os.path.isabs(path)  如果path是绝对路径,返回True
52 print(os.path.isabs(r"D:\python\daima\DAY1\user_info.txt"))
53 #24.os.path.isfile(path)  如果path是一个存在的文件,返回True。否则返回False
54 print(os.path.isfile(r"D:\python\daima\DAY1\user_info.txt"))
55 #25.os.path.isdir(path)  如果path是一个存在的目录,则返回True。否则返回False
56 print(os.path.isdir(r"D:\python\daima\DAY1\user_info.txt"))
57 #26.os.path.join(path1[, path2[, ...]])  将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
58 print(os.path.join(r"user_info.txt",r"D:\python\daima\DAY1\user_info.txt"))
59 #27.os.path.getatime(path)  返回path所指向的文件或者目录的最后存取时间
60 print(os.path.getatime(r"D:\python\daima\DAY1\user_info.txt"))
61 #28.os.path.getmtime(path)  返回path所指向的文件或者目录的最后修改时间
62 print(os.path.getmtime(r"D:\python\daima\DAY1\user_info.txt"))
63 '''
64 更多关于os模块的使用方法请参考:https://docs.python.org/2/library/os.html?highlight=os#module-os
65 '''
66 
67 
68 #以上代码执行结果如下:
69 D:\python\daima\DAY4
70 None
71 .
72 ..
73 None
74 None
75 None
76 None
77 ['.idea', 'DAY1', 'DAY2', 'DAY3', 'DAY4', 'DAY5', '__pycache__']
78 os.stat_result(st_mode=16895, st_ino=22799473113577966, st_dev=839182139, st_nlink=1, st_uid=0, st_gid=0, st_size=4096, st_atime=1487743397, st_mtime=1487743397, st_ctime=1486692902)
79 \
80 
81 
82 ;
83 nt
84 D:\python\daima\DAY1\user_info.txt
85 ('D:\\python\\daima\\DAY1', 'user_info.txt')
86 D:\python\daima\DAY1
87 user_info.txt
88 True
89 True
90 True
91 False
92 D:\python\daima\DAY1\user_info.txt
93 1483869109.7747889
94 1483869109.7758367
os模块常用方法详解

 

 1 import os
 2 path = '%s/'%os.path.dirname(__file__)
 3 # 获取该目录下所有文件,存入列表中
 4 f = os.listdir(path)
 5 n = 0
 6 for i in f:
 7     # 设置旧文件名(就是路径+文件名)
 8     oldname = path + i
 9     # 设置新文件名
10     newname = path + 'ico' + str(n + 1) + '.jpg'
11     # 用os模块中的rename方法对文件改名
12     os.rename(oldname, newname)
13     print(oldname, '======>', newname)
14     n += 1
批量改名字

 

 2.sys模块常用方法

 

 1 #!/usr/bin/env python
 2 #_*_coding:utf-8_*_
 3 #@author :rianleycheng
 4 #blog:http://www.cnblogs.com/rianley
 5 #EMAIL:rianley@qq.com
 6 import sys
 7 #1.获取Python解释程序的版本信息
 8 print(sys.version)
 9 #2.返回操作系统平台名称
10 print(sys.platform)
11 #3.返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
12 print(sys.path)
13 #4.退出程序,正常退出时exit(0),如果不写数字的话,默认就是0
14 # print(sys.exit(100))
15 #5.命令行参数List,第一个元素是程序本身路径
16 # path_info = sys.argv[1]
17 #6.显示当前系统最大的Int值
18 print(sys.maxsize)
19 
20 '''
21 更多使用方法请参考:https://docs.python.org/2/library/sys.html?highlight=sys#module-sys
22 '''
23 
24 
25 #以上代码执行结果如下:
26 
27 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:01:18) [MSC v.1900 32 bit (Intel)]
28 win32
29 ['D:\\python\\daima\\DAY4', 'D:\\python\\daima', 'C:\\Users\\rianley\\AppData\\Local\\Programs\\Python\\Python35-32\\python35.zip', 'C:\\Users\\rianley\\AppData\\Local\\Programs\\Python\\Python35-32\\DLLs', 'C:\\Users\\rianley\\AppData\\Local\\Programs\\Python\\Python35-32\\lib', 'C:\\Users\\rianley\\AppData\\Local\\Programs\\Python\\Python35-32', 'C:\\Users\\rianley\\AppData\\Local\\Programs\\Python\\Python35-32\\lib\\site-packages']
30 2147483647
sys模块常用方法详解

 

3.json和pickle模块详解

 1 #!/usr/bin/env python
 2 #_*_coding:utf-8_*_
 3 #@author :rianleycheng
 4 #blog:http://www.cnblogs.com/rianley
 5 #EMAIL:rianley@qq.com
 6 import pickle
 7 '''
 8 pickle:
 9     1.>用于python特有的类型 和 python的数据类型间进行转换
10     2.>pickle模块提供了四个功能:dumps、dump、loads、load.
11     补充说明:将数据通过特殊的形式转换成只有python解释器识别的字符串,这个过程我们叫做序列化,而把哪些python能够识别的字符串转换成我们能看懂的叫做反序列化。
12 '''
13 data_info = {"name":"程小航","password":"123"}
14 #1.将数据通过特殊的形式转换为只有python语言知识的字符串并写入文件
15 # pickle_str = pickle.dumps(data_info)
16 # print(pickle_str)
17 # f = open("test.txt","wb")
18 # f.write(pickle_str)
19 #2.上面的写入文件的方法也可以这么玩,看起来更简单
20 # with open("test_1.txt","wb") as fb:
21 #     pickle.dump(data_info,fb)
22 #我们知道将数据存入文件,那么我们怎么把存入文件的东西读出来呢?
23 #方法一:
24 # f = open("test_1.txt","rb")
25 # print(pickle.loads(f.read()))
26 #方法二:
27 f = open("test_1.txt","rb")
28 print(pickle.load(f))
pickle模块

 

 1 #!/usr/bin/env python
 2 #_*_coding:utf-8_*_
 3 #@author :rianleycheng
 4 #blog:http://www.cnblogs.com/rianley
 5 #EMAIL:rianley@qq.com
 6 import json
 7 '''
 8 用于序列化的两个模块
 9     1>.json:用于字符串 和 python数据类型间进行转换
10     2>.pickle:用于python特有的类型和python的数据类型间进行转换
11     json模块提供了四个功能:dumps、dump、loads、load
12     pickle模块提供了四个功能:dumps、dump、loads、load
13 '''
14 accounts = {
15     "id":521,
16     "name":"rianleycheng",
17     "banlance":"9000"
18 }
19 #存数据方式一:
20 # f = open(r"D:\python\daima\DAY4\test_2.txt","w")
21 # json_str = json.dumps(accounts)
22 # f.write(json_str)
23 #存数据方式二:
24 # with open(r"D:\python\daima\DAY4\test_2.txt","w") as fp:
25 #     json.dump(accounts,fp)
26 #读取数据的方法一:
27 # f = open("test_2.txt","r")
28 # print(json.loads(f.read()))
29 #方法二:
30 f = open("test_2.txt","r")
31 print(json.load(f))
json模块用法

 

 

对比json和pickle的异同:

     1>.相同点:都是用于系列化和反序列化的模块。

  2>.不同点:json是在所有语言都通用的数据存储格式,而pickle是仅仅只有python语言独有的存储格式。

 

4.time模块与datetime模块详解

在Python中,通常有这几种方式来表示时间:

  • 时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。
  • 格式化的时间字符串(Format String)
  • 结构化的时间(struct_time):struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时)
1 import time
2 #--------------------------我们先以当前时间为准,让大家快速认识三种形式的时间
3 print(time.time()) # 时间戳:1487130156.419527
4 print(time.strftime("%Y-%m-%d %X")) #格式化的时间字符串:'2017-02-15 11:40:53'
5 
6 print(time.localtime()) #本地时区的struct_time
7 print(time.gmtime())    #UTC时区的struct_time
 1 %a    Locale’s abbreviated weekday name.     
 2 %A    Locale’s full weekday name.     
 3 %b    Locale’s abbreviated month name.     
 4 %B    Locale’s full month name.     
 5 %c    Locale’s appropriate date and time representation.     
 6 %d    Day of the month as a decimal number [01,31].     
 7 %H    Hour (24-hour clock) as a decimal number [00,23].     
 8 %I    Hour (12-hour clock) as a decimal number [01,12].     
 9 %j    Day of the year as a decimal number [001,366].     
10 %m    Month as a decimal number [01,12].     
11 %M    Minute as a decimal number [00,59].     
12 %p    Locale’s equivalent of either AM or PM.    (1)
13 %S    Second as a decimal number [00,61].    (2)
14 %U    Week number of the year (Sunday as the first day of the week) as a decimal number [00,53]. All days in a new year preceding the first Sunday are considered to be in week 0.    (3)
15 %w    Weekday as a decimal number [0(Sunday),6].     
16 %W    Week number of the year (Monday as the first day of the week) as a decimal number [00,53]. All days in a new year preceding the first Monday are considered to be in week 0.    (3)
17 %x    Locale’s appropriate date representation.     
18 %X    Locale’s appropriate time representation.     
19 %y    Year without century as a decimal number [00,99].     
20 %Y    Year with century as a decimal number.     
21 %z    Time zone offset indicating a positive or negative time difference from UTC/GMT of the form +HHMM or -HHMM, where H represents decimal hour digits and M represents decimal minute digits [-23:59, +23:59].     
22 %Z    Time zone name (no characters if no time zone exists).     
23 %%    A literal '%' character.
24 
25 格式化字符串的时间格式
格式化字符串时间

其中计算机认识的时间只能是'时间戳'格式,而程序员可处理的或者说人类能看懂的时间有: '格式化的时间字符串','结构化的时间' ,于是有了下图的转换关系

 

 1 #--------------------------按图1转换时间
 2 # localtime([secs])
 3 # 将一个时间戳转换为当前时区的struct_time。secs参数未提供,则以当前时间为准。
 4 time.localtime()
 5 time.localtime(1473525444.037215)
 6 
 7 # gmtime([secs]) 和localtime()方法类似,gmtime()方法是将一个时间戳转换为UTC时区(0时区)的struct_time。
 8 
 9 # mktime(t) : 将一个struct_time转化为时间戳。
10 print(time.mktime(time.localtime()))#1473525749.0
11 
12 
13 # strftime(format[, t]) : 把一个代表时间的元组或者struct_time(如由time.localtime()和
14 # time.gmtime()返回)转化为格式化的时间字符串。如果t未指定,将传入time.localtime()。如果元组中任何一个
15 # 元素越界,ValueError的错误将会被抛出。
16 print(time.strftime("%Y-%m-%d %X", time.localtime()))#2016-09-11 00:49:56
17 
18 # time.strptime(string[, format])
19 # 把一个格式化时间字符串转化为struct_time。实际上它和strftime()是逆操作。
20 print(time.strptime('2011-05-05 16:37:06', '%Y-%m-%d %X'))
21 #time.struct_time(tm_year=2011, tm_mon=5, tm_mday=5, tm_hour=16, tm_min=37, tm_sec=6,
22 #  tm_wday=3, tm_yday=125, tm_isdst=-1)
23 #在这个函数中,format默认为:"%a %b %d %H:%M:%S %Y"。

 

 

 1 #--------------------------按图2转换时间
 2 # asctime([t]) : 把一个表示时间的元组或者struct_time表示为这种形式:'Sun Jun 20 23:21:05 1993'。
 3 # 如果没有参数,将会将time.localtime()作为参数传入。
 4 print(time.asctime())#Sun Sep 11 00:43:43 2016
 5 
 6 # ctime([secs]) : 把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。如果参数未给或者为
 7 # None的时候,将会默认time.time()为参数。它的作用相当于time.asctime(time.localtime(secs))。
 8 print(time.ctime())  # Sun Sep 11 00:46:38 2016
 9 print(time.ctime(time.time()))  # Sun Sep 11 00:46:38 2016
10 
11 1 #--------------------------其他用法
12 2 # sleep(secs)
13 3 # 线程推迟指定的时间运行,单位为秒。

 

 1 #时间加减
 2 import datetime
 3 
 4 # print(datetime.datetime.now()) #返回 2016-08-19 12:47:03.941925
 5 #print(datetime.date.fromtimestamp(time.time()) )  # 时间戳直接转成日期格式 2016-08-19
 6 # print(datetime.datetime.now() )
 7 # print(datetime.datetime.now() + datetime.timedelta(3)) #当前时间+3天
 8 # print(datetime.datetime.now() + datetime.timedelta(-3)) #当前时间-3天
 9 # print(datetime.datetime.now() + datetime.timedelta(hours=3)) #当前时间+3小时
10 # print(datetime.datetime.now() + datetime.timedelta(minutes=30)) #当前时间+30分
11 
12 
13 #
14 # c_time  = datetime.datetime.now()
15 # print(c_time.replace(minute=3,hour=2)) #时间替换
16 
17 datetime模块
datetime模块

 

5.random模块(随机数模块)


#!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :rianleycheng
#blog:http://www.cnblogs.com/rianley
#EMAIL:rianley@qq.com

 1 import random
 2  
 3 print(random.random())#(0,1)----float    大于0且小于1之间的小数
 4  
 5 print(random.randint(1,3))  #[1,3]    大于等于1且小于等于3之间的整数
 6  
 7 print(random.randrange(1,3)) #[1,3)    大于等于1且小于3之间的整数
 8  
 9 print(random.choice([1,'23',[4,5]]))#1或者23或者[4,5]
10  
11 print(random.sample([1,'23',[4,5]],2))#列表元素任意2个组合
12  
13 print(random.uniform(1,3))#大于1小于3的小数,如1.927109612082716 
14  
15  
16 item=[1,3,5,7,9]
17 random.shuffle(item) #打乱item的顺序,相当于"洗牌"
18 print(item)

 

小练习(生成验证码

 1 import random
 2 def make_code(n):
 3     res=''
 4     for i in range(n):
 5         s1=chr(random.randint(65,90))
 6         s2=str(random.randint(0,9))
 7         res+=random.choice([s1,s2])
 8     return res
 9 
10 print(make_code(9))
11 
12 生成随机验证码
View Code

6. shutil 模块 (文件处理模块)

高级的 文件、文件夹、压缩包 处理模块

shutil.copyfileobj(fsrc, fdst[, length])
将文件内容拷贝到另一个文件中

#!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :rianleycheng
#blog:http://www.cnblogs.com/rianley
#EMAIL:rianley@qq.com

 import shutil

shutil.copyfileobj(open('old.xml','r'), open('new.xml', 'w'))

shutil.copyfile(src, dst)
拷贝文件

1 shutil.copyfile('f1.log', 'f2.log') #目标文件无需存在

shutil.copymode(src, dst)
仅拷贝权限。内容、组、用户均不变

1 shutil.copymode('f1.log', 'f2.log') #目标文件必须存在

 

shutil.copystat(src, dst)
仅拷贝状态的信息,包括:mode bits, atime, mtime, flags

1 shutil.copystat('f1.log', 'f2.log') #目标文件必须存在

 

shutil.copy(src, dst)
拷贝文件和权限

1 import shutil
2  
3 shutil.copy('f1.log', 'f2.log')

 

shutil.copy2(src, dst)
拷贝文件和状态信息

1 import shutil
2  
3 shutil.copy2('f1.log', 'f2.log')

 

shutil.ignore_patterns(*patterns)
shutil.copytree(src, dst, symlinks=False, ignore=None)
递归的去拷贝文件夹

1  import shutil
2 
3 shutil.copytree('folder1', 'folder2', ignore=shutil.ignore_patterns('*.pyc', 'tmp*')) #目标目录不能存在,注意对folder2目录父级目录要有可写权限,ignore的意思是排除 

 

 1 #!/usr/bin/env python
 2 #_*_coding:utf-8_*_
 3 #@author :rianleycheng
 4 #blog:http://www.cnblogs.com/rianley
 5 #EMAIL:rianley@qq.com
 6 
 7 import shutil
 8 
 9 shutil.copytree('f1', 'f2', symlinks=True, ignore=shutil.ignore_patterns('*.pyc', 'tmp*'))
10 
11 '''
12 通常的拷贝都把软连接拷贝成硬链接,即对待软连接来说,创建新的文件
13 '''
拷贝软链接

shutil.rmtree(path[, ignore_errors[, onerror]])
递归的去删除文件

1 import shutil
2  
3 shutil.rmtree('folder1')

 

shutil.move(src, dst)
递归的去移动文件,它类似mv命令,其实就是重命名。

1 import shutil
2  
3 shutil.move('folder1', 'folder3')

 

shutil.make_archive(base_name, format,...)

创建压缩包并返回文件路径,例如:zip、tar

创建压缩包并返回文件路径,例如:zip、tar

1 base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径,
2 如 data_bak                       =>保存至当前路径
3 如:/tmp/data_bak =>保存至/tmp/
4 format:    压缩包种类,“zip”, “tar”, “bztar”,“gztar”
5 root_dir:    要压缩的文件夹路径(默认当前目录)
6 owner:    用户,默认当前用户
7 group:    组,默认当前组
8 logger:    用于记录日志,通常是logging.Logger对象
#将 /data 下的文件打包放置当前程序目录
import shutil
ret = shutil.make_archive("data_bak", 'gztar', root_dir='/data')
  
  
#将 /data下的文件打包放置 /tmp/目录
import shutil
ret = shutil.make_archive("/tmp/data_bak", 'gztar', root_dir='/data')

shutil 对压缩包的处理是调用 ZipFile 和 TarFile 两个模块来进行的,详细:

 1 #!/usr/bin/env python
 2 #_*_coding:utf-8_*_
 3 #@author :rianleycheng
 4 #blog:http://www.cnblogs.com/rianley
 5 #EMAIL:rianley@qq.com
 6 
 7 import zipfile
 8 
 9 # 压缩
10 z = zipfile.ZipFile('laxi.zip', 'w')
11 z.write('a.log')
12 z.write('data.data')
13 z.close()
14 
15 # 解压
16 z = zipfile.ZipFile('laxi.zip', 'r')
17 z.extractall(path='.')
18 z.close()
zipfile压缩解压缩

 

 1 #!/usr/bin/env python
 2 #_*_coding:utf-8_*_
 3 #@author :rianleycheng
 4 #blog:http://www.cnblogs.com/rianley
 5 #EMAIL:rianley@qq.com
 6 
 7 import tarfile
 8 
 9 # 压缩
10 >>> t=tarfile.open('/tmp/egon.tar','w')
11 >>> t.add('/test1/a.py',arcname='a.bak')
12 >>> t.add('/test1/b.py',arcname='b.bak')
13 >>> t.close()
14 
15 
16 # 解压
17 >>> t=tarfile.open('/tmp/egon.tar','r')
18 >>> t.extractall('/egon')
19 >>> t.close()
tarfile压缩解压缩

 

 

常用模块(未完结,,,更多模块使用,请继续关注博客)

 

posted @ 2018-05-20 16:03  rianley  阅读(157)  评论(0编辑  收藏  举报