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下为" ",Linux下为" "
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 匹配任何空白字符;它相当于类 [ fv]。
S 匹配任何非空白字符;它相当于类 [^ fv]。
w 匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]。
W 匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_]
匹配一个特殊字符边界,比如空格 ,&,#等
r””,加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())