前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python基础之常用模块

python基础之常用模块

作者头像
不断折腾
发布2019-09-23 10:30:50
5210
发布2019-09-23 10:30:50
举报

无论是风里,还是在雨里,我都在这里守候着你~

socket模块

常用于通讯,任何通讯工具中都含有socket,比如qq,微信。

udp实例:

udp实例:

# 导入模块

import socket

def main():

# 创建套接字

# 参数一:ip协议,socket.AF_INET表示ipv4协议。

# 参数二:使用udp协议还是tcp协议 socket.SOCK_DGRAM表示udp协议。

udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

# 绑定信息,里面是一个元组,第一个参数为ip,""表示自己的ip

# 第二个表示端口号

udp_socket.bind(("",7890))

# 接收对方的ip地址

dest_ip = input("请输入对方的ip:")

# 接收对方的端口(port)

dest_port = int(input("请输入对方的接收端口:"))

# 接收发送消息

send_data = input("请输入需要发送的消息:")

# 发送消息

# 参数一:表示需要发送的消息。

# 参数二:一个元组,第一个为对方的ip地址,第二个为对方的端口号

udp_socket.sendto(send_data.encode("utf-8"),(dest_ip,dest_port))

# 接收消息 1024表示能接收的最大值。

recv_data = udp_socket.recvfrom(1024)

# 输出接收到的消息,返回的也是一个元组,1,发送过来的信息2,表示发送方的ip和端口

# 为什么需要解码gbk?因为Windows的编码为gbk

print(recv_data[0].decode("gbk"))

# 关闭套接字

udp_socket.close()

if __name__ == "__main__":

main()

可以看到上文需要输入对方的ip地址和端口号,为什么?

简单来说就是通过ip地址找到你的电脑,再通过端口号找到接收的程序。

其他的注释应该很清楚了。tcp和udp的区别?

tcp是传输比较稳定,不掉包,udp是传输快,容易掉包。

掉包的意思就是说发送过去,对方一不定可以接收到(当然数据过大的时候会出现这种情况。)

这里补充几个名词的含义。

单工:比如说收音机,只能发,或者只能收消息。

半双工:能发也能收,但是在同一时刻只能收或只能发。

全双工:同一时刻能发也能收。

tcp实例

import socket

def main():

# 创建套接字

# 参数一:ip协议,socket.AF_INET表示ipv4协议。

# 参数二:使用udp协议还是tcp协议 socket.SOCK_STREAM表示tcp协议

tcp_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

# 绑定信息,里面是一个元组,第一个参数为ip,""表示自己的ip

# 第二个表示端口号

tcp_socket.bind(("",7890))

# 接收对方的ip地址

dest_ip = input("请输入对方的ip:")

# 接收对方的端口(port)

dest_port = int(input("请输入对方的接收端口:"))

# 链接服务器

tcp_socket.connec((dest_ip,dest_port))

# 接收发送消息

send_data = input("请输入需要发送的消息:")

# 发送消息

tcp_socket.send(send_data.encode("utf-8"))

# 接收消息 1024表示能接收的最大值。

recv_data = tcp_socket.recv(1024)

# 输出接收到的消息,返回的也是一个元组,1,发送过来的信息2,表示发送方的ip和端口

# 为什么需要解码gbk?因为Windows的编码为gbk

print(recv_data[0].decode("gbk"))

# 关闭套接字

tcp_socket.close()

if __name__ == "__main__":

main()

time模块

import time #导入模块

time.sleep(5) # 停留5秒,不给钱不优化那种

time.time() # 返回从1970年1月1日到现在经历了多少秒。

# 格式化时间

time.strftime("%Y-%m-%d %H:%M:%S") # 2018-11-08 21:50:01

time.strftime("%Y/%m/%d %H:%M:%S") # 2018/11/08 21:50:01

其他格式:

%Y 四位数的年份表示(000-9999)

%m 月份(01-12)

%d 月内中的一天(0-31)

%H 24小时制小时数(0-23)

%I 12小时制小时数(01-12)

%M 分钟数(00=59)

%S 秒(00-59)

%a 本地简化星期名称

%A 本地完整星期名称

%b 本地简化的月份名称

%B 本地完整的月份名称

%c 本地相应的日期表示和时间表示

%j 年内的一天(001-366)

%p 本地A.M.或P.M.的等价符

%U 一年中的星期数(00-53)星期天为星期的开始

%w 星期(0-6),星期天为星期的开始

%W 一年中的星期数(00-53)星期一为星期的开始

%x 本地相应的日期表示

%X 本地相应的时间表示

%Z 当前时区的名称

%% %号本身

# 以上自己可以试试。

time.localtime() # 结构化时间

# time.struct_time(tm_year=2018, tm_mon=11, tm_mday=8, tm_hour=21, tm_min=59, tm_sec=14, tm_wday=3, tm_yday=312, tm_isdst=0)

time.tm_year # 返回年

# 将时间戳转化为结构化时间

t = time.time()

time.localtime(t) # 现在的时间

time.gmtime() # 国外某地点现在的时间

# 将格式化时间转化为时间戳

strtime = '2018-11-08 21:50:01'

time.mktime(strtime)

# 将格式化时间转化为结构化时间

time.strptime('2018-11-8','%Y-%m-%d')

# 将结构化时间转化为格式化时间

time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(1600000000))

其他类型时间

time.asctime() # Thu Nov 8 22:22:27 2018

time.ctime(1600000000) # Sun Sep 13 20:26:40 2020

random随机数模块

实例:

# 导入模块

import random

# 随机整数

random.randint(0,5) # 返回大于0小于等于5的整数

# 随机偶数

random.randrange(0,10,2) # 返回大于等于0小于10的偶数,2为步长,和列表一样

# 随机返回其中一个值

random.choice([1,2,3,4,5]) # 随机返回其中一个值

# 随机返回多个值

random.sanple([1,2,3,4,5],3) # 随机返回3个值,返回几个取决于第二个参数

# 打乱列表顺序

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

random.shuffle(list) # 随机打乱列表的顺序)

os 模块(与操作系统相关)

实例:

#导入模块

import os

# getcwd() 获取当前工作目录(当前工作目录默认都是当前文件所在的文件夹)

os.getcwd()

# chdir()改变当前工作目录

os.chdir('/python/Demo')

# listdir() 获取指定文件夹中所有内容的名称列表

os.listdir('/python/Demo')

# mkdir()创建文件夹

os.mkdir('Test')

# makedirs()递归创建文件夹

os.makedirs('/python/Demo/Test/A/B')

# rmdir() 删除空目录

os.rmdir('Demo')

# removedirs递归删除文件夹 必须都是空目录

os.removedirs('/python/Demo/Test/A/B')

# stat()获取文件或者文件夹的信息

os.stat('/python3/Demo.py)

# system()执行系统命令

os.system('ls -al') #获取隐藏文件

# abspath()将相对路径转化为绝对路径

path = './Demo' #相对

result = os.path.abspath(path)

print(result)

# dirname()获取完整路径当中的目录部分

path = '/python3/Demo/Test'

os.path.dirname(path) # /python3/Demo

# basename()获取完整路径当中的主体部分

os.path.basename(path) # Test

#split() 将一个完整的路径切割成目录部分和主体部分

result = os.path.split(path)

print(result) #返回一个元组('/python3/Demo', 'Test')

# join()将2个路径合并成一个

path1 = '/python3/Demo'

path2 = 'Test.py'

os.path.join(path1,path2)# '/python3/Demo/Test.py'

# splitext() 将一个路径切割成文件后缀和其他两个部分,主要用于获取文件的后缀

path = '/python3/Demo/Test.py'

os.path.splitext(path) # ('/python3/Demo/Test', '.py')

# getsize() 获取文件的大小

path = '/python3/Demo/Test.py'

os.path.getsize(path)

# isfile()检测是否是文件

path = '/python3/Demo/Test.py'

os.path.isfile(path)

# isdir()检测是否是文件夹

os.path.isdir(path)

# islink() 检测是否是链接

os.path.islink(path)

# getctime()获取文件的创建时间

# getmtime()获取文件的修改时间

# getatime()获取文件的访问时间

# getenv() 获取系统的环境变量

# curdir表示当前文件夹 .表示当前文件夹

print(os.curdir)

#pardir表示上一层文件夹 ..表示上一层文件夹

#name 获取代表操作系统的名称字符串

print(os.name)

#sep 获取系统路径间隔符号

print(os.sep) # window是\ linux事/

#linesep 获取操作系统的换行符号

print(os.linesep) # window 是\r\n linux/unix 是 \n

sys 模块(和python解释器交互)

# 导入模块

import sys

sys.exit() # 退出程序

# sys.exit(0) 正常退出 sys.exit(1)遇见错误退出

print(sys.platform) # 操作系统名称

print(sys.version) # python解释器的版本

sys.path # 返回模块的搜索路径

sys.argv # 实现从程序外部向程序传递参数。在终端才能看出效果,现在知道就好

序列化与反序列化模块

str = "[1,2,3,4,5,6]"

# 当我们想要像调用列表一样调用上面的字符串时,我们需要反序列化

# 同理 当我们将比如列表转换为字符串类型就称之为序列化

# json 每个语言都通用的序列化格式。但是能用json转化的数据类型较少

# pickle python中的所有数据类型都可以序列化,但是只有python认识

# shelve 新来的,方便,不完善

json

# 导入模块

import json # 可以转化的有 数字,字符串,列表,字典,元组(转化为列表)

# 序列化

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

print(type(list)) # <class 'list'> 列表类型

str = json.dumps(list)

print(type(str)) # <class 'str'> 此时就转化为了字符串格式

# 反序列化

attr = json.loads(str)

print(type(attr)) # <class 'list'> 列表类型

# 序列化写入文件

f = open('txt','w',encoding = 'utf-8')

json.dump(list,f,ensure_ascii=False) # 把list 序列化写入文件 ensure_ascii=False如果有中文需要加上

f.close()

# 从文件里拿出数据反序列化

f = open('txt','r',encoding = 'utf-8')

txt =json.load(f)

f.close()

print(type(txt)) # list 返回的list

pickle

# 导入模块

import pickle # 可以序列化所有数据类型

# 使用方法也是 dumps,dumps,loads,load

# 不同的是 dumps 返回的是bytes类型 loads之后就正常了。

# 同样的写入文件的时候需要wb,和rb

shelve

# 导入模块

import shelve

# 序列化

# 拿到句柄

ff = shelve.open('text')

# 这样就序列化了

ff['txt'] = [1,2,3,4,5]

ff.close()

# 反序列化

# 拿到句柄

# 这样就反序列化了

ff = shelve.open('text')

txt = ff['txt']

ff.close()

print(txt)

collections模块

当我们想要表示一个点的坐标时

实例:

# 导入模块

from collections import namedtuple

# namedtuple参数一:起的名字,参数二:坐标名

Spot = namedtuple('spot',['x','y'])

# 添加数据

s = Spot(3,4)

# 输出x

print(s.x)

# 输出y

print(s.y)

queue模块# 队列

实例:

# 导入模块

import queue

# 创建一个队列

q = queue.Queue()

q.put(1)

q.put(2)

print(q.get()) # 1

print(q.get()) # 2

print(q.get()) # 发生堵塞,不会报错

# 先进先出

deque # 双端队列

实例:

# 导入模块

from collections import deque

# 创建一个双端队列

de = deque()

# 从前面添加数据

de.appendleft(111)

# 从后面添加数据

de.append(222)

# 在指定位置添加数据

de.insert(1,333)

# 从前面取数据

print(de.popleft())

# 从后面取数据

print(de.pop())

当我们想要一个字典key值有序时

实例:

# 导入模块

from collections import OrderedDict

d = {'q':'1','w':'2','e':'3'}

# 因为字典的key值是无序的,想要变得有序这样既可:

ordict = OrderedDict(d)

给字典设置默认value值。

from collections import defaultdict

dict = defaultdict(list)

print(dict['key1']) # 输出[]

# 参数必须是可以调用的比如list,set,dict,也可以是自己写的函数,随意。

# 为什么设置默认值?因为当不存在value值时,不能调用字典的append方法。

当我们想要统计一个单词某个字母出现的个数时

# 导入模块

from collections import Counter

num = Counter('qweasdqwertdgfdaDSD')

print(num) # 结果:Counter({'q': 4, 'w': 4, 'e': 4})

print(num['q']) # 4

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-11-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 python入门到放弃 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档