Day22~23 模块

时间:2019-09-05
本文章向大家介绍Day22~23 模块,主要包括Day22~23 模块使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

strip()默认去首尾空格和回车

路径拼接尽量用join不用+号

###自定义模块

Package有__init__.py 文件,文件夹Directory中没有__init__.py

alt+/ 调上一个函数

###import功能:1.执行对应的文件,2.引入变量名

比较

import cal

cal.add()

from cal import add

add()

from cal import * ###导出cal模块中所有功能,但不推荐该写法,有可能会与def自定义函数重名,结果指向最后的函数

###import寻找的路径

import sys

print(sys.path)#sys.path的路径就是执行文件bin.py的路径,即当前文件bin.py所在的位置(bin.py作为程序的入口)

可以新建package命名my_module(和bin.py同级)里面放置有cal.py,即可from my_module import cal使用cal函数,即便是my_module下的文件也从bin.py的文件层级开始检索(遵从sys.path路径), 意即my_module下的文件即便是同级文件也不能相互import,必须是执行文件同级才可以相互import,否则用from…import…找寻

main.py逻辑相关组函数,所有与逻辑相关的函数都房在此文件里

package用来组织模块,不同的包可以避免同名模块的冲突

###包被调用时,执行相应的__init__文件

若web1,web2,web3都为package,cal为.py文件,add为函数名,且web1包含web2,web2包含web3

from web1.web2.web3 import cal

cal.add()

from web1.web2.web3.cal import add

add()

###写测试代码的语句

if __name__==“__main__” #该语句若放在bin文件中表示不想让该bin文件被调用

      main.run()  

###总汇

重要的模块:log,re

json,pickle,shelve重点使用json

###time模块,不在lib文件夹内

print(time.time())#时间戳,计算从1970年1月1日00:00据此刻共计多少秒,1970年unix诞生time.localtime() #struct time结构化时间,当地时间

time.gmtime() #世界标准时间(英国)

time.mktime(time.localtime()) #将结构化时间转化成时间戳

#将结构化时间转成字符串时间strftime %X时分秒

print(time.strftime("%Y---%m-%d %X",time.localtime()))

>>>2019---08-14 12:52:05

# ------将字符串时间转成结构化时间strptime

print(time.strptime("2016:12:24:17:50:36","%Y:%m:%d:%X"))

>>>time.struct_time(tm_year=2016, tm_mon=12, tm_mday=24, tm_hour=17, tm_min=50, tm_sec=36, tm_wday=5, tm_yday=359, tm_isdst=-1)

print(time.asctime())

print(time.ctime())

>>>Wed Aug 14 13:21:51 2019

import datetime

print(datetime.datetime.now())

###随机模块random

随机字母

alf=chr(random.randint(65,122))

import random

ret=random.random()

ret=random.randint(1,3)

ret=random.randrange(1,3)

ret=random.choice([11,22,33,44,55])

ret=random.sample([11,22,33,44,55],2)

ret=random.uniform(1,4)

ret=[1,2,3,4,5]

random.shuffle(ret)

#设置验证码

def v_code():

    ret=""

    for i in range(5):

        num=random.randint(0,9)

        alf=chr(random.randint(65,122))

        s=str(random.choice([num,alf]))

        ret+=s

    return ret

print(v_code())

###__file__,Pycharm中处理为绝对路径+文件名,BASE_DIR

临时添加路径

import sys

sys.path.append(r“c:\….”)#建议填路径不要如此写,程序写死

import os

print(__file__)#当前文件路径及名

os.path.dirname(__file__)

BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__))

sys.path.append(BASE_DIR)

os.path.abspath绝对路径,pycharm和终端都可使用

###os模块

os.chdir(".")返回当前目录: ('.')

os.chdir("..") 获取当前目录的父目录字符串名:('..')

os.listdir() 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    输出用于分割文件路径的字符串 win下为;,Linux下为:

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

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

os.path.isdir(path)  如果path是一个存在的目录,则返回True。否则返回False

os.path.join(a,b)  涉及路径拼接

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

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

###sys模块

sys.argv

sys.stdout.write(“#”)

import sys,time

for i in range(10):

    sys.stdout.write(‘#’)#写一个#号但不显示放入缓存里等10个#号写好一次性放出,故需刷新用flush

    time.sleep(1)

该语句使号立刻在屏幕上显示

###json,pickle序列化对象

如果有字符串的话,json把单引号都变为双引号 

json.dumps()可以把所有数据类型转换为字符串

dic_str=json.dumps(dic)

data=json.loads(‘文件名’)

pickle.dumps()处理为字节

推荐用json

###xml

###re正则表达式(很重要)

由C编写,所以速度很快

元字符:. ^ $ * + ? { } [ ] | ( ) \

re.findall(“xyy*?”,”daagagbxyyyy”)

 .  通配符代表除了\外的任意一个符号 

^ 以什么作为开头,如^a,只在字符串的开头匹配

$ 以什么作为结尾,如x$, 结尾是x进行匹配

* 按照紧挨的字符重复匹配0到无穷次

+ 按照紧挨的字符重复匹配1到无穷次 

?按照紧挨的字符重复匹配0到1次

{ } 按照紧挨的字符重复,范围自己定,例如{6},表示重复6次,或{3,}表示重复3到无穷次

* + ? { }均属贪婪匹配,按最大次匹配。后面加?变为惰性匹配

[ ] 字符集,字符集里无特殊符号

[a-z],匹配abcd…xyz

[^a-z] [^]里的^非的意思表示非a到z

[ ]:特殊-,^,\

例如:re.findall(“q[^a-z]”,”qr’)

>>>[ ]

\ 功能进行转义

反斜杠后边跟元字符去除特殊功能,比如\.

反斜杠后边跟普通字符实现特殊功能,比如\d

\d  匹配任何十进制数;它相当于类 [0-9]。

\D 匹配任何非数字字符;它相当于类 [^0-9]。

\s  匹配任何空白字符;它相当于类 [ \t\n\r\f\v]。

\S 匹配任何非空白字符;它相当于类 [^ \t\n\r\f\v]。

\w 匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]。

\W 匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_]

\b  匹配一个特殊字符边界,比如空格 ,&,#等 

r”\b”,加r表示字符串不做任何转义

() re.search(“(?P<name>\w+)”,””).group(“name”)

| 的优先级高于()

findall返回列表,search返回的是对象,只找到一个满足条件的就不在找了,用re.search().group()

re.findall(。。。(。。。)。。。) 优先匹配分组,再匹配其他,

去优先级re.findall(。。。(?:。。。)。。。)

re.match()search,仅在字符串起始处匹配

re.split(” “,”hello abc def“) #按空格分割 

>>>[‘hello’,’abc’,’def’] 

re.split(“[ab]”,”abc”) #先按a分abc,a左边为空,右边bc,得到结果[‘’,bc],同理再用b分[‘’,bc]

>>>[‘’,’’,’c’]

re.sub(”匹配规则“,”替换对象“,”字符串“ ,匹配次数) 

re.subn() 返回元组形式

com = re.compile(“规则”)

com.findall(“字符串”)

re.finditer() 封装返回到迭代器里

ret=re.finditer(…)

next(ret).group()

###config

不区分大小写

default 公共默认部分

###hashlib模块

摘要算法: 把不定长的字符串转化成定长的,转化的密文是唯一的

md5只能把明文变成密文,sha256常用

import hashlib

obj = hashlib.md5()

obj.update(“hello”.encode(“utf8”))

print(obj.hexdigest())

原文地址:https://www.cnblogs.com/xuwinwin/p/11465504.html