Python学习笔记:??檠?/h1>

https://www.cnblogs.com/tangwei-fuzhou/p/12743005.html

一、定义:

  1、模块:用来从逻辑上组织python代码(包含:变量,函数,类等),本质是实现一个功能的.py结尾的python文件。

  2、包:用来从逻辑上组织??榈?,本质就是一个目录。(必须带有一个__init__.py文件)

二、导入方法

  1、导入一个???,“import 文件名(不需要后缀)”,可以使用“文件名.函数名()”的方式调用。

  2、导入多个模块,“from 文件夹名(或文件名) import? 文件名(或函数名、变量名等)?”,但不建议这样用,因为有重名的方法,后面的会覆盖前面的,造成调用混乱。

  3、为了区分导入的??椋褂胊s关键词,比如:“from 文件夹名 import 文件名 as 调用名”。

三、导入的本质:将要导入的代码全部解释一遍,统一赋值给一个变量

  1、"import ??槊?的本质:将一个文件中的代码赋值给一个模块名,调用的时候用“??槊?变量(或函数)”方式调用。

  2、“from 文件夹名(或文件名) import? 模块名(或函数名、变量名等)”:将文件中的代码块单独赋值给一个??槊H绻堑既牒蛘弑淞?,可以直接在代码中使用。

  3、导入包的本质:就是解释这个包下面的__init__.py文件

四、路劲查找

  1、导入文件会在系统路径下寻找,系统路劲登记在os.path下面,如下:

import sys

print(sys.path)

  2、如果任意路径的文件??樾枰牡既?,应该怎么做?

import sys,os

# 查找目标文件所在的目录

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

# 将目标文件??榈哪柯技尤氲较低陈肪⑾?/p>

sys.path.append(base_dir)


五、导入优化

  1、如下代码重复查找函数,可以做优化

import moudle_test# 以下两个方法都调用了同个??橄碌耐龇椒ǎ庋馗床檎曳椒ㄔ斐闪诵实蚫ef a ():

? ? moudle_test.test()

? ? print("is? a()")def b ():

? ? moudle_test.test()

? ? print("is? b()")## 可以修改成如下方法frommoudle_testimport testdef a ():

? ? moudle_test.test()

? ? print("is? a()")def b ():

? ? moudle_test.test()

? ? print("is? b()")


六、模块的分类

  1、标准库(内置??椋喝鏾s,time,datetime

  2、开源??椋旱谌叫吹目吹模梢悦夥咽褂?,

  3、自定义??椋鹤约盒吹哪??/p>

七、标准库

  1、random:该模块实现了各种分布的伪随机数生成器。

# 随机整数:printrandom.randint(1,50)# 随机选取0到100间的偶数:printrandom.randrange(0, 101, 2)# 随机浮点数:print random.random()printrandom.uniform(1, 10)# 随机字符:printrandom.choice('abcdefghijklmnopqrstuvwxyz!@#$%^&*()')# 多个字符中生成指定数量的随机字符:printrandom.sample('zyxwvutsrqponmlkjihgfedcba',5)# 从a-zA-Z0-9生成指定数量的随机字符:ran_str =''.join(random.sample(string.ascii_letters + string.digits, 8))print ran_str# 多个字符中选取指定数量的字符组成新字符串:print''.join(random.sample(['z','y','x','w','v','u','t','s','r','q','p','o','n','m','l','k','j','i','h','g','f','e','d','c','b','a'], 5))# 随机选取字符串:printrandom.choice(['剪刀','石头','布'])# 打乱排序items = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]printrandom.shuffle(items)

?  2、os标准库:本模块提供了一种使用与操作系统相关的功能的便捷式途径

import os# 返回环境变量print("输出操作系统分割文件路劲的字符串",os.environ)# 返回当前操作系统别名,nt代表windows,posix代表linuxprint("输出操作系统分割文件路劲的字符串",os.name)# 当前工作目录print("当前工作目录",os.getcwd())# 当前执行的py文件print("当前执行的py文件路径",__file__)# 改变当前工作目录到指定的路径。print("当前工作目录到指定的路径",os.chdir(r"c:/"))# 返回当前目录,返回的是当前执行python文件的文件夹,“.”代表当前目录print("当前目录",os.curdir)# 返回当前目录的父目录print("返回当前目录的父目录",os.pardir)# 递归依次创建目录# print("递归依次创建目录c:/a/b/c",os.makedirs("c:/a/b/c"))# 删除目录,只能从最下级目录开始删除# print("删除目录,只能从最下级目录开始删除",os.rmdir("c:/a/b/c"))# 删除目录,递归逐级删除# print("删除目录,递归逐级删除",os.removedirs("c:/a/b"))# 列出目录列表print("列出目录列表",os.listdir(os.curdir))# 修改目录或文件名# print("修改目录或文件名",os.rename("c:/a/a.txt","c:/a/ab.txt"))# 删除一个文件# print("删除一个文件",os.remove("c:/b/a.txt"))# 返回目录或文件的信息print("返回文件目录的信息",os.stat("c:/a/ab.txt"))# 输出操作系统的路径分割符,Windows为"\\",Linux为"/"print("输出操作系统的路径分割符",os.sep)# 输出操作系统的换行符,Windows为"\r\n",Linux为"\n"print("输出操作系统的换行符",str(os.linesep))# 输出操作系统分割文件路劲的字符串,为";"print("输出操作系统分割文件路劲的字符串",os.pathsep)# 调用cmd命令行# print("调用cmd命令行",os.system("ipconfig"))# 返回规范的绝对路劲,用"\"做为路劲分隔符print("返回规范的绝对路劲", os.path.abspath(__file__))# 分割路径,将文件分成目录和文件的组成的元组,目录可以不存在print("分割路径,将文件分成目录和文件的组成的元组", os.path.split(__file__))# 返回文件所在目录,即父目录,目录可以不存在print("返回文件所在目录,即父目录", os.path.dirname(__file__))# 返回文件名,目录可以不存在print("返回文件所在目录,即父目录", os.path.basename(__file__))# 判断路劲是否存在print("判断路劲是否存在", os.path.exists(__file__))# 判断路劲是否为绝对路劲,windwos以盘符开头,linux以“/”开头print("判断路劲是否为绝对路劲", os.path.isabs(__file__))# 判断路劲是否为文件print("判断路劲是否为文件", os.path.isfile(__file__))# 判断路劲是否为目录print("判断路劲是否为目录", os.path.isdir(__file__))# 拼接多个路径返回,第一个绝对路劲之前的参数会被忽略print("拼接多个路径", os.path.join("c","a","b","a.txt"))# 文件最后访问时间print("文件最后访问时间", os.path.getatime(__file__))# 文件最后修改时间print("文件最后修改时间", os.path.getmtime(__file__))

?  3、sys标准库:系统相关的参数和函数

# 获得文件输入参数,控制台输入“python python文件名 参数(参数之间用空格间隔)”print(sys.argv)# 返回操作系统平台名称print(sys.platform)# 返回python文件搜索路劲print(sys.path)# 打印并且计数print(sys.stdout.write("Hello World"))

  4、shutil标准库:模块提供了一系列对文件和文件集合的高阶操作

import shutil# 先打开文件,后复制文件f1 = open("test1", encoding="utf-8")

f2 = open("test2", mode="w", encoding="utf-8")

shutil.copyfileobj(f1, f2)# 直接复制shutil.copyfile("test1","test3")# 同时copy文件和文件状态shutil.copy("test1","test3")# 递归复制目录和文件shutil.copytree("test","test_new")# 递归删除目录和文件shutil.rmtree("test_new")# # 移动文件shutil.move("f1","f2")# # 压缩shutil.make_archive("最终得到的压缩文件名","压缩格式如zip等","压缩路径")

?  5、hashlib库:用于哈希加密

import hashlib

md5_test = hashlib.md5()

md5_test.update(b"Hello")# 打印Hello的md5的值print(md5_test.hexdigest())

md5_test.update(b"world")# 打印Helloworld的md5的值,注意这里是update操作,所以是两段加一起print(md5_test.hexdigest())

md5_test2 = hashlib.md5()

md5_test2.update(b"Helloworld")# 下面一个新对象打印的值也跟上面一样,证明了是两段加一起print(md5_test2.hexdigest())# 更安全的sha256加密sha256_test = hashlib.sha256()

sha256_test.update(b"Hello")# 打印sha256的值print(sha256_test.hexdigest())# 中文处理sha256_test2 = hashlib.sha256()

sha256_test2.update("你好中国".encode(encoding="utf-8"))# 打印sha256的值print(sha256_test.hexdigest())

  6、re??椋禾峁┱虮泶锸降牟僮?/b>

" . ",指代任意一个字符,除了换行之外(如果有加 flags="r.S" 就可以匹配换行)。

" ^ " 和 " \A ",匹配原文本的开头,意思是从开头开始匹配

“ $ ” 和 " \Z ",匹配原文本的末尾,意思是从某处开始一直匹配的原文本的末尾

“? *? ”,匹配*号前面的字符0次或者多次,比如re.findall("ab*","cabb3abcbbac"),结果["abb","ab","a"]

“ + ”,匹配+号前面的字符1次或者多次,比如"re.findall("ab+","ab+cd+abb+bba")“,结果["abb","ab"]

“ ? ”,匹配?号前面的字符1次或者0次,如果放在*或者+后面就变成”非贪婪模式“,只返回最短的匹配字符

{m},匹配前面字符m次

{n,m},匹配前面字符n 到m次,比如"re.findall("ab{1,3}","abb abc abbcbbb")“,结果["abb","ab","abb"]、

“ () ”,分组匹配,可以将括号内的字符当成一个整体来处理,比如"re.findall("(ab){1}","ababc")",结果["ab","ab"]

“ | ”,匹配|左或右的字符,或者逻辑。

" \d ",匹配数字

“ \D ”,匹配非数字,包括特殊字符。

“ \w ”,匹配[0-9a-zA-Z]

" \W ”,匹配非[0-9a-zA-Z]

” \s ”,匹配空白字符,空格、换行等。

“?(?P<city>)(?P<birthday>) ”,分组匹配后按所取的键名返回一个字典,比如re.search("(?P<city>(\d){6})(?P<birthday>(\d){8})","350783199306260001").groupdict(),结果是:{'city': '350783', 'birthday': '19930626'}

" split() ",分割后返回一个列表,比如print(re.split("\d+","a12b13c")),结果是:[“a”,"b","c"]

“ sub() ”,替换,?最后一个参数是替换次数。比如print(re.sub(".+","a12b13c",flags=r.S)),结果是:a_b13c

" flags=r.S ",改变“.”的模式,使其可以匹配换行符,比如:print(re.match(".*" , "a12b13c" , flags=re.S)),结果是:a12b13c

"?flags=r.M ",改变“^”和"$"的模式,使其可以匹配多行,比如:print(re.search("(aaab){1}$","aaa12b13c\naaab\na1da",flags=re.M)),结果是:aaab,如果不加re.M是匹配不到aaab的

“ flags=r.I ",忽略大小写,都匹配。比如:print(re.search("(aaab){1}","aaa12b13c\nAaab\na1da",flags=re.I)),结果是:Aaab

?著作权归作者所有,转载或内容合作请联系作者

  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,100评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,308评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事?!?“怎么了?”我有些...
    开封第一讲书人阅读 159,718评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,275评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,376评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,454评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,464评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,248评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,686评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,974评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,150评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,817评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,484评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,140评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,374评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,012评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,041评论 2 351

推荐阅读更多精彩内容