python 3.5学习笔记(第五章)

本章内容

  1、什么是模块

  2、模块的导入方法

  3、搜索路径

  4、重要标准库

 

一、什么是模块

  1、模块本质上是一个以.py 结尾的python文件,包含了python对象定义和python语句。

  2、模块是用来从逻辑上组织python代码(定义变量、函数、类、逻辑等)以实现某种功能

  3、包:包含多个模块的文件夹(包中要有一个__init__.py的文件,文件内容可以是空的)

 

二、导入模块

1、完全导入

import 模块1[, 模块2[,... 模块N]
from 包名 import 模块名

import test 相当于把test中的所有代码都赋值给了test这个变量

注:

(1)建议每一个模块都单独导入便于阅读

(2)也可以使用 from module_name import * 来导入模块中的所有功能,但是不建议这样做

(3)如果模块名字太长,导入后调用会不方便,可以使用下面的方法

import 原模块名 as 新模块名

(4)一个模块只能被导入一次

2、部分导入

from 模块名 import 方法名

3、导入包

import 包名 
#只执行init文件中的code
import 包名.模块名 
#既执行init文件中的code,也会执行导入的模块中的code

小结:

1、导入模块的本质是把python文件执行一遍

2、导入包的本质是执行包下的__init__.py 文件

 

三、搜索路径

import module_name-->module_name.py-->module_name.py的路径-->sys.path-->在当前目录下寻找-
->找父集目录【os模块-->os.path.dirname(os.path.abspath(__file__))】

  当导入一个模块的时候,python解释器对模块位置的搜索顺序是:

1、当前目录

2、如果不在当前目录,Python 则搜索在 shell 变量 PYTHONPATH 下的每个目录。

3、如果都找不到,Python会察看默认路径。

 

四、重要标准库

1、time标准库

  1)time模块中时间的表示方法有三种:

  a、 timestamp时间戳,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量

  b、struct_time时间元组,共有九个元素组 。

time.struct_time(tm_year=2018, tm_mon=5, tm_mday=20, tm_hour=20, tm_min=20, tm_sec=45, tm_wday=6, tm_yday=140, tm_isdst=0)
2018

  c、format time 格式化时间,已格式化的结构使时间更具可读性。包括自定义格式和固定格式。(如:年-月-日-时- 分-秒)

  2)time模块中的内置方法

  a、time()

  ——return current time in seconds since the Epoch as a float

   #获取时间戳(秒)

import time
a = time.time()
print(a)
》1526822821.9055681

  3)sleep()

  ——delay for a number of seconds given as a float 、

  #程序休眠

import time
time.sleep(3)
print("休眠3s")

  4)gmtime()

  —— convert seconds since Epoch to UTC tuple

   #把时间戳转换为struct_time的格式,默认对当前时间进行转换,转换结果是utc时区的时间

import time
a = time.gmtime()
print(a)
》time.struct_time(tm_year=2018, tm_mon=5, tm_mday=20, tm_hour=13, tm_min=31, tm_sec=24, tm_wday=6, tm_yday=140, tm_isdst=0)

  5)localtime()

  ——convert seconds since Epoch to local time tuple

   #把时间戳转换为struct_time的格式,默认对当前时间进行转换,转换结果是本地时区的时间

import time
a = time.localtime()
print(a)
》time.struct_time(tm_year=2018, tm_mon=5, tm_mday=20, tm_hour=21, tm_min=33, tm_sec=1, tm_wday=6, tm_yday=140, tm_isdst=0)

 注意:mgtime() 和 loacltime() 之间相差8个小时。

  6)asctime()

  —— convert time tuple to string

  #接收的变量是元组

import time
a = time.localtime()
b = time.asctime(a)
print(a)
print(b)
》time.struct_time(tm_year=2018, tm_mon=5, tm_mday=20, tm_hour=21, tm_min=38, tm_sec=4, tm_wday=6, tm_yday=140, tm_isdst=0)
》Sun May 20 21:38:04 2018

  7)ctime()

  —— convert time in seconds to string

  #接收的变量是时间戳

import time
a = time.time()
b = time.ctime(a)
print(a)
print(b)
》1526823558.3019936
》Sun May 20 21:39:18 2018

  8)mktime()

  ——convert local time tuple to seconds since Epoch

  #把struct_time转换为时间戳的形式

import time
a = time.localtime()
b = time.mktime(a)
print(a)
print(b)
》time.struct_time(tm_year=2018, tm_mon=5, tm_mday=20, tm_hour=21, tm_min=40, tm_sec=33, tm_wday=6, tm_yday=140, tm_isdst=0)
》1526823633.0

  9)strftime()

  ——convert time tuple to string according to format specification

  #把元组格式的时间转换为格式化的字符串格式的时间

import time
a = time.localtime()
b = time.strftime("%Y-%m-%d %H:%M:%S",a)
print(a)
print(b)
》time.struct_time(tm_year=2018, tm_mon=5, tm_mday=20, tm_hour=21, tm_min=45, tm_sec=7, tm_wday=6, tm_yday=140, tm_isdst=0)
》2018-05-20 21:45:07

  10)strptime()

  ——parse string to time tuple according to format specification

  #把格式化的字符串格式的时间转换为元组格式的时间

import time
a = time.localtime()
b = time.strftime("%Y-%m-%d %H:%M:%S",a)
c = time.strptime(b,"%Y-%m-%d %H:%M:%S")
print(a)
print(b)
print(c)
》time.struct_time(tm_year=2018, tm_mon=5, tm_mday=20, tm_hour=21, tm_min=47, tm_sec=17, tm_wday=6, tm_yday=140, tm_isdst=0)
》2018-05-20 21:47:17
》time.struct_time(tm_year=2018, tm_mon=5, tm_mday=20, tm_hour=21, tm_min=47, tm_sec=17, tm_wday=6, tm_yday=140, tm_isdst=-1)

 

2、datatime标准库

  1)datetime.datetime.now()

  ——当前时间

import datetime
print(datetime.datetime.now())   #当前时间
》2018-05-20 21:53:21.906109

  2)replace()

  ——修改当前时间

import datetime
a_time = datetime.datetime.now()
print(a_time)
b_time = a_time.replace(year=1,month=1,day=1,minute=0,hour=0,second=0)
print(b_time)
》2018-05-20 21:55:57.7815790001-01-01 00:00:00.781579

  3)timedelta()

  ——时间延迟

import datetime
print("当前时间:",datetime.datetime.now())
print(datetime.datetime.now()+datetime.timedelta(3))  #当前时间加三天
print(datetime.datetime.now()+datetime.timedelta(-3))  #当前时间减三天
print(datetime.datetime.now()+datetime.timedelta(hours=3))   #当前时间加三个小时
print(datetime.datetime.now()+datetime.timedelta(hours=-3))    #当前时间减三个小时
print(datetime.datetime.now()+datetime.timedelta(minutes=30))   #当前时间加30分钟
》当前时间: 2018-05-20 21:59:19.3894052018-05-23 21:59:19.3894052018-05-17 21:59:19.3894052018-05-21 00:59:19.3894052018-05-20 18:59:19.3894052018-05-20 22:29:19.389405

 

3、random标准库

  1)随机取浮点数

    (a)不指定随机区间

import random
print(random.random())
》0.23569079391833148

    (b)指定随机区间

import random
print(random.uniform(1,10))
>>>6.12050957632076
#包括1和10

  2)随机取整数

import random
print(random.randint(1,3))
#包括1和3
print(random.randrange(1,3))
#包括1但是不包括3

  3)传入参数,然后在参数中随机取出内容

    (a)从传入的参数中随机取一个值

import random
print(random.choice("sfbuewahelih")) 
》f

    (b)从传入的内容中随机取n位

import random
print(random.sample("nioasfgje9gh",3))
#取3位,结果以列表的形式呈现并且是序的
》['s', 'n', 'a']

  4)打乱顺序

import random
items = [1,2,3,4,5]
print(items)
random.shuffle(items)
print(items)
>>>[1, 2, 3, 4, 5]
[2, 4, 5, 1, 3]

  5)利用random模块实现一个简单的验证码功能

import random

checkcode = ''

for i in range(5):
    current = random.randint(0,5)
    if current == i:
        tmp = chr(random.randint(65,90))
    else:
        tmp = random.randint(0,9)

    checkcode += str(tmp)

print(checkcode)

 

4、os模块

  提供对操作系统进行调用的接口

  1)os.getcwd() :获取当前工作目录,即当前py脚本工作的目录路径

  2)os.chdir("dirname") :改变当前脚本的工作目录,相当于shell下的cd

  3)os.curdir :返回当前目录

  4)os.pardir : 获取当前目录的父目录字符串名

  5)os.makedirs("dirname1/dirname2") : 可生成多层递归目录

  6)os.removedirs("dirname1") : 若目录为空,则删除,并递归到上一级目录,如果仍然为空,则继续删除,以此类推

  7)os.mkdir("dirname") : 生成单级目录,相当于shell中的mkdir dirname

  8)os.rmdir("dirname") : 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中的rmdir dirname

  9)os.listdir("dirname") : 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表的方式打印

  10)os.remove() : 删除一个文件

  11)os.rename("oldname","newname") :重命名文件/目录

  12)os.stat("path/filename") :获取文件/目录信息

  13)os.sep :输出操作系统特定的路径分隔符,win下为“\\” , Linux 下为“/”

  14)os.linesep :输出当前平台使用的行终止符(换行符),win下为“\t\n” , Linux 下为“\n”

  15)os.pathsep : 输出用于分割文件路径的字符串

  16)os.name : 输出字符串指示当前使用平台。 win->"nt", Linux->"posix"

  17)os.system("bash command") :运行shell命令,直接显示

  18)os.environ :获取系统环境变量

  19)os.path.abspath(path) : 返回path规范化的绝对路径

  20)os.path.split(path) : 将path分割成目录和文件名二元组返回

  21)os.path.dirname(path) : 返回path的目录。其实就是os.path.split(path)的第一个元素

  22)os.path.basename(path) : 返回path最后的文件名。如果path以 / 或 \ 结尾,那么就会返回空值。

  23)os.path.exists(path) : 如果path存在,返回True

  24)os.path.isabs(path) : 如果path是绝对路径,返回True

  25)os.path.isfile(path) :如果path是一个存在的文件,返回True,否则返回False

  26)os.path.isdir(path) :如果path是一个存在的目录,则返回true,否则返回false

  27)os.path.join(path1 [,path2 [, ......]]) :将多个路径组合后返回,第一个绝对路径之前的参数将被忽略

  28)os.path.getatime(path) :返回path所指向的文件或者目录的最后存取时间

  29)os.path.getmtime(path) : 返回path所指向的文件或者目录的最后修改时间

 

5、sys模块

  1) sys.argv : 实现从程序外部向程序传递参数

  2) sys.exit([arg]) : 程序中间的退出,arg=0为正常的退出

  3) sys.getdefaultencoding() : 获取系统当前编码,一般默认为ascii

  4) sys.setdefaultencoding() : 设置系统默认编码,执行dir(sys) 时不会看到这个方法,在解释器中执行不通过,可以先执行reload(sys) ,

再执行setdefaultencoding('utf-8'), 此时将系统默认编码设置为utf-8。

  5) sys.getfilesystemencoding() :  获取文件系统使用编码方式,windows下返回“mbcs”,mac下返回“utf-8”。

  6) sys.path : 获取指定模块搜索路径的字符串集合,可以将写好的模块放在得到的某个路径下,就可以在程序中import时正确找到。

  7) sys.platform : 获取当前系统平台

 

6、shutil模块

  可以复制(copy),可以压缩(zip)

  参考:https://blog.csdn.net/ff_smile/article/details/78081909

 

7、Configparser模块

  参考:https://blog.csdn.net/miner_k/article/details/77857292

 

8、xml模块

  参考:https://www.jb51.net/article/114411.htm

 

9、shelve模块

  参考:https://www.jb51.net/article/118198.htm

 

10、Hashlib模块

  参考:https://blog.csdn.net/seymour163/article/details/53448029

 

11、Hmac模块

  参考:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0015108777177966ef0f4f8510a41b3b8c48cdcf7047b2d000

 

12、正则表达式Re模块

基础语法:

  1) '.'     默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行

  2) '^'     匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r"^a","\nabc\neee",flags=re.MULTILINE)

  3) '$'     匹配字符结尾,或e.search("foo$","bfoo\nsdfsf",flags=re.MULTILINE).group()也可以

  4) '*'     匹配*号前的字符0次或多次,re.findall("ab*","cabb3abcbbac")  结果为['abb''ab''a']

  5) '+'     匹配前一个字符1次或多次,re.findall("ab+","ab+cd+abb+bba") 结果['ab''abb']

  6) '?'     匹配前一个字符1次或0

  7) '{m}'   匹配前一个字符m次

  8) '{n,m}' 匹配前一个字符n到m次,re.findall("ab{1,3}","abb abc abbcbbb") 结果'abb''ab''abb']

  9) '|'     匹配|左或|右的字符,re.search("abc|ABC","ABCBabcCD").group() 结果'ABC'

  10) '(...)' 分组匹配,re.search("(abc){2}a(123|456)c""abcabca456c").group() 结果 abcabca456c

  11) '\A'    只从字符开头匹配,re.search("\Aabc","alexabc") 是匹配不到的

  12) '\Z'    匹配字符结尾,同$

  13) '\d'    匹配数字0-9

  14) '\D'    匹配非数字

  15) '\w'    匹配[A-Za-z0-9]

  16) '\W'    匹配非[A-Za-z0-9]

  17) 's'     匹配空白字符、\t、\n、\r , re.search("\s+","ab\tc1\n3").group() 结果 '\t'

  18) '(?P<name>...)' 分组匹配 re.search("(?P<province>[0-9]{4})(?P<city>[0-9]{2})(?P<birthday>[0-9]{4})","371481199306143242").groupdict("city")

    结果{'province''3714''city''81''birthday''1993'}

常用语法:

  1) re.match("","") 从头开始匹配

  2) re.search("","") 从整个文本中来搜索

  3) re.findall("","") findall没有group方法

  4) re.split("","") 按照指定内容进行分割

  5) re.sub("匹配的内容","指定内容","待匹配项"[, count = n])

    将匹配到的内容更换为指定内容,count 表示需要更换的次数,当count=2时,只更换匹配到的前两个

  6) ^ 匹配字符的开头

  7) \d 匹配一个数字

  8) \d+ 匹配一个或多个数字

  9) $ 以最后一个要匹配的字符结尾

  10) [a-z] 从小写a到小写z

  11) [a-zA-Z] 从小写a到大写Z

   12) [a-zA-Z0-9] 从小写a到数字9

  13) re.search("[a-z]+","adasfAfsaB",flags=re.I)

      flags=re.I  表示忽略大小写      flags=re.M  表示多行模式,改变'^'和'$'的行为      flags=re.S  表示点任意匹配模式,改变'.'的行为




















 

猜你喜欢

转载自www.cnblogs.com/muouran0120/p/9064816.html