一,基础工具
1生成随机整数(指定范围内)
生成一个1到100之间的随机整数(包括100)
random_int = random.randint(1, 100)2输出不换行技巧
3制表符\t
4查看搜索.py模块
5代码换行 \
rdd_read=sc.textFile("D:\search_log.txt")restult1=rdd_read.map(lambda x:(x.split("\t")[0][:2],1)).\reduceByKey(lambda a,b:a+b).\sortBy(lambda x:x[1],ascending=False,numPartitions=1).\print("需求一的结果是:",restult1)6判读文件
print(os.path.isdir("D:/test"))#判断是否是文件夹
二,高阶方法
1闭包
定义:在函数嵌套的前提下,内部函数使用外部函数的变量,并且外部函数返回了内部函数,我们把这个使用外部函数变量的内部函数称之为闭包1.1基础使用
print(f"<{logo}>{msg}<{logo}>")作用:内层依赖的外部变量不会被随意修改,既完成了全局变量的作用,又可以避免被外部改动1.2修改外部变量的值 nonlocal
1.3案例:atm机
defaccount_outer(initial_count=0):defatm(num,deposit=True):print(f"存款{num}账户余额为:{initial_count}")print(f"取款{num}账户余额为:{initial_count}")2装饰器
2.1一般写法(闭包写法)
time.sleep(random.randint(1, 5))2.2语法糖写法@
time.sleep(random.randint(1, 5))3设计模式
最常见最经典的设计模式就是面向对象,除此之外有单例,工厂,建造者等模式3.1单例模式
创建类的实例后,就可以得到一个完整的,独立的类对象在某些场景下,我们需要一个类无论获得多少次类对象,都仅仅提供一个具体实例,用于节省创建类对象的开销和内存开销单例模式定义:保证一个类只有一个实例,并提供一个访问它的全局访问点from test2 import str_tool3.2工厂模式
大量创建一个类的实例时,基于工厂提供的方法进行创建子类1.大批量创建对象时候有统一的入口,易于代码维护。defcreate_person(self, type):worker=pf.create_person('w')student=pf.create_person('s')teacher=pf.create_person('t')4多线程
4.1进程,线程
进程:一个运行在程序之上的系统,称这个程序为一个运行进程,进行分配ID方便管理(项目组)4.2并行执行
4.3多线程编程 threading
带上“,”才是元组,否则不是
if __name__ == '__main__':t1 = threading.Thread(target=sing)t2 = threading.Thread(target=dance)if __name__ == '__main__':t1 = threading.Thread(target=sing,args=("我在唱歌......",))t2 = threading.Thread(target=dance,kwargs={"msg":"我在跳舞....."})5网络编程
5.1服务端开发
socket_server=socket.socket()socket_server.bind(("localhost",8888))conn,address=socket_server.accept()第一个元素是连接对象,第二个元素是地址
print(f"接收到了客户端的连接,客户端的地址是:{address}")data:str=conn.recv(1024).decode("utf-8")print(f"接收到的客户端信息是:{data}")msg=input("请输入回复信息:").encode("utf-8")在此基础上,写入一个while true的无限循环接收客户端信息,要使用客户端与本次的连接对象conn
data: str = conn.recv(1024).decode("utf-8")recv接受的参数是缓冲区大小,一般给1024即可
recv方法返回一个字节对象,需要decode方法转换成字符串
print(f"接收到的客户端信息是:{data}")发送回复消息
conn.send(msg.encode("utf-8"))5.2客户端开发
socket_client=socket.socket()socket_client.connect(('127.0.0.1',8888))socket_client.send("您好,我是xxx".encode("utf-8"))recv_data=socket_client.recv(1024)#1024是缓冲区大小,一般1024即可,同样recv方法是阻塞的print(f"回复的消息是:{recv_data.decode('utf-8')}")socket_client=socket.socket()socket_client.connect(('127.0.0.1',8888))发送消息
socket_client.send(msg.encode("utf-8"))接收消息
recv_data = socket_client.recv(1024)1024是缓冲区大小,一般1024即可,同样recv方法是阻塞的
print(f"回复的消息是:{recv_data.decode('utf-8')}")6正则表达式
6.1基本方法
1 re.match
从头开始匹配,成功返回匹配对象(包含匹配信息),不成功返回空。【从头部匹配,开头没有则失败】s="shanxi univercity is double good"result=re.match("shanxi",s)s="1shanxi univercity is double good"result=re.match("shanxi",s)2 search
搜素整个字符串,找出匹配的,从前往后,找到第一个就停止,不会继续向后s="18311luanqibaz shanxi univercity is double good"result=re.search("shanxi",s)3 findall
s="18311luanqibaz shanxi univercity is double good shanxi taiyuan in china shanxi"result=re.findall("shanxi",s)6.2元字符匹配
字符串r标记表示,字符串内转义字符无效,作为普通字符使用1单字符匹配
s="18311luanqibaz shanxi univercity666 is double!!!! good shanxi ###taiyuanin china shanxi"s="18311luanqibaz shanxi univercity666 is double!!!! good shanxi ###taiyuanin china shanxi"s="18311luanqibaz shanxi univercity666 is double!!!! good shanxi ###taiyuanin china shanxi"result=re.findall('[A-Za-z]',s)#字符串前面带上r的标记,表示字符串中转义字符无效,就是普通字符2数量匹配
3边界匹配
4分组匹配
r='^[0-9a-zA-Z]{6,10}2 匹配QQ号,要求纯数字,长度5-11.第一位不为0r='^[1-9][0-9]{4,10}3匹配邮箱地址,只允许qq,163,gmail这三种邮箱地址r=r'(^[\w-]+(\.[\w-]+)*@(qq|163|gmail)(\.[\w-]+)+$)'s='www.shanxi_univercity@qq.com.cn's='123456sjks' print(re.findall(r,s)) Python 2 匹配QQ号,要求纯数字,长度5-11.第一位不为0 import re r='^[1-9][0-9]{4,10}$' s='77068111' print(re.findall(r,s)) Python 3匹配邮箱地址,只允许qq,163,gmail这三种邮箱地址 import re r=r'(^[\w-]+(\.[\w-]+)*@(qq|163|gmail)(\.[\w-]+)+$)' s='www.shanxi_univercity@qq.com.cn' print(re.match(r,s) Pythons='77068111' print(re.findall(r,s)) Python 3匹配邮箱地址,只允许qq,163,gmail这三种邮箱地址 import re r=r'(^[\w-]+(\.[\w-]+)*@(qq|163|gmail)(\.[\w-]+)+$)' s='www.shanxi_univercity@qq.com.cn' print(re.match(r,s) Python s='123456sjks' print(re.findall(r,s)) Python 2 匹配QQ号,要求纯数字,长度5-11.第一位不为0 import re r='^[1-9][0-9]{4,10}$' s='77068111' print(re.findall(r,s)) Python 3匹配邮箱地址,只允许qq,163,gmail这三种邮箱地址 import re r=r'(^[\w-]+(\.[\w-]+)*@(qq|163|gmail)(\.[\w-]+)+$)' s='www.shanxi_univercity@qq.com.cn' print(re.match(r,s) Python7递归
defget_file_recurstion_from_dir(path)::return: list 包含全部文件,如果目录不存在或者无文件就返回一个空for f in os.listdir(path):if os.path.isdir(new_path):file_list+=get_file_recurstion_from_dir(new_path)file_list.append(new_path)print(f"指定的目录{ path}目录不存在")if __name__ == '__main__':print(get_file_recurstion_from_dir("D:/test"))1 注意组装 file_list+=get_file_recurstion_from_dir(new_path)