Python内置模块:sysosrerandomfilehashlibbase64gzip
Posted 风流 少年
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python内置模块:sysosrerandomfilehashlibbase64gzip相关的知识,希望对你有一定的参考价值。
一:sys
函数/变量 | 描述 |
---|---|
argv | 返回python命令执行脚本的参数列表 |
exit(arg) | 退出当前程序,可通过可选参数指定返回值或错误信息 |
platform | 操作系统标识,win32,darwin等 |
path | moudle搜索路径 |
getsizeof(obj) | 查看对象占用的字节数 |
python test.py a b c
# ['/Users/mengday/pythonProject/aaa.py', 'a', 'b', 'c']
print(sys.argv)
# ['a', 'b', 'c']
print(sys.argv[1:])
# Process finished with exit code 0
# status默认为0,也可以自定义
sys.exit()
sys.exit(100
# win32
print(sys.platform))
Python import导入的模块必须位于搜索路径下面,因为搜索路径包含我们的Python3.10、虚拟环境venv、已经当前的项目,所以这写目录下的模块都可以被导入进来。可以使用函数sys.path.append(other) 来临时增加搜索其它路径。
['/Users/mengday/PycharmProjects/demo',
'/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10',
'/Users/mengday/PycharmProjects/demo/venv/lib/python3.10/site-packages'
]
print(sys.path)
# 临时导入
sys.path.append("/Users/mengday/modules")
二:os
函数/变量 | 描述 |
---|---|
os.getcwd() | 获取项目的根目录 |
os.listdir(path) | 获取当前路径或者指定路径下的文件和目录列表 |
os.path.exists(path) | 判断指定路径下的目录是否存在。存在返回True,否则返回False |
os.mkdir(path) | 传入一个path路径,创建单层(单个)文件夹。注意:如果文件夹已经存在,就会报错。因此创建文件夹之前,需要使用os.path.exists(path)函数判断文件夹是否存在; |
os.makedirs(path) | 递归创建文件夹;注意:如果文件夹存在,就会报错。因此创建文件夹之前,需要使用os.path.exists(path)函数判断文件夹是否存在; |
os.rmdir(path) | 删除指定路径下的文件夹;注意:该方法只能删除空文件夹,删除非空文件夹会报错 |
os.path.join(path1,path2) | 将路径拼接起来,形成一个新的完整路径 |
os.path.split(path) | 传入一个完整的path路径,将其拆分为绝对路径和文件名2部分; |
os.path.dirname(path) | 获取某个绝对路径文件的父目录 |
os.path.basename(path) | 获取绝对路径文件的文件名 |
os.path.isdir(path) | 判断一个绝对路径是否为目录 |
os.path.isfile(path) | 判断一个绝对路径是否为文件 |
os.path.sep | 获取当前系统的路径分隔符 |
os.path.getsize(path) | 返回绝对路径的文件的大小 |
import os
# 获取当前文件所在的目录
os.path.dirname(__file__)
# 目录拼接
os.path.join(os.path.dirname(__file__), 'config/config.ini')
os.getcwd()
# 获取当前路径或指定路径下的所有文件和目录
os.listdir()
os.listdir(os.getcwd())
三:re正则表达式
正则表达式可以用来查找、替换等操作。
说明: 如果需要匹配的字符是正则表达式中的特殊字符,那么可以使用\\进行转义处理,例如想匹配小数点可以写成\\.就可以了,因为直接写.会匹配任意字符;同理,想匹配圆括号必须写成\\(和\\),否则圆括号被视为正则表达式中的分组。
Python对正则表达式的支持
函数 | 说明 |
---|---|
compile(pattern, flags=0) | 编译正则表达式返回正则表达式对象 |
match(pattern, string, flags=0) | 用正则表达式匹配字符串 成功返回匹配对象 否则返回None |
search(pattern, string, flags=0) | 搜索字符串中第一次出现正则表达式的模式 成功返回匹配对象 否则返回None |
split(pattern, string, maxsplit=0, flags=0) | 用正则表达式指定的模式分隔符拆分字符串 返回列表 |
sub(pattern, repl, string, count=0, flags=0) | 用指定的字符串替换原字符串中与正则表达式匹配的模式 可以用count指定替换的次数 |
fullmatch(pattern, string, flags=0) | match函数的完全匹配(从字符串开头到结尾)版本 |
findall(pattern, string, flags=0) | 查找字符串所有与正则表达式匹配的模式 返回字符串的列表 |
finditer(pattern, string, flags=0) | 查找字符串所有与正则表达式匹配的模式 返回一个迭代器 |
purge() | 清除隐式编译的正则表达式的缓存 |
re.I / re.IGNORECASE | 忽略大小写匹配标记 |
re.M / re.MULTILINE | 多行匹配标记 |
说明: 上面提到的re模块中的这些函数,实际开发中也可以用正则表达式对象的方法替代对这些函数的使用,如果一个正则表达式需要重复的使用,那么先通过compile函数编译正则表达式并创建出正则表达式对象无疑是更为明智的选择。
re.match(匹配规则,被匹配字符串)
从被匹配的字符串卡头进行匹配,匹配成功返回被匹配的对象(包含匹配的信息),匹配不成功返回空。
import re
regex = r'[\\u4e00-\\u9fa5]+'
# <re.Match object; span=(0, 2), match='汉字'>
match = re.match(regex, '汉字')
print(match)
if match:
print(True)
else:
print(False)
re.search(匹配规则,被匹配字符串)
搜索整个字符串,从前向后找出第一个匹配并停止搜索。
re.findall(匹配规则,被匹配字符串)
搜索整个字符串,找出所有匹配项。
关键字替换。
import re
# 将关键字替换成*,多个关键字可以使用|分割
result = re.sub('谣言|草', '*', '我感觉你像谣言,上海外滩长草了', flags=re.IGNORECASE)
# 我感觉你像*,上海外滩长*了
print(result)
多个分割符分割。
import re
items = re.split(";", 'ab;cd;ef')
# ['ab', 'cd', 'ef']
print(items)
# 按照指定顺序分割, 多个分割符放在[]中
lst = re.split(r'[;。,]', 'you see see you, one day day。 just only eat eat;you see see you fat')
# ['you see see you', ' one day day', ' just only eat eat', 'you see see you fat']
print(lst)
四:随机数random
# 在1~100之间产生一个随机数(包含1和100)
randint = random.randint(1, 100)
五:文件
5.1 文件读写模式
- r:以读方式打开文件,文件的指针将会放在文件的开头,默认模式。
- w:打开一个文件只用于写,如果文件不存在自动创建,从第一行开始写,如果文件存在则先清空再从第一行写。
- a:打开一个文件用于追加,如果文件已存在则将会在文件的末尾处写入新数据,如果不存在则自动创建,可以使用\\n来标识换行。
- b:表示二进制,在读图片或者写图片等通常使用
rb
或者wb
模式。 - +: 更新(既可以读也可以写)
5.2 常用API
# 打开文件, type(f) = <class '_io.TextIOWrapper'>
f = open('文件名', mode='w', encoding='UTF-8')
# 写内容
f.write('Hello22222')
# 一次写多行内容
f.writelines(["第一行内容","第二行内容"])
# 将内存中的数据刷新到磁盘
f.flush()
# 关闭文件占用,会自动调用flush()
f.close()
#读几个字符
f.read(2)
#光标移动到第5个索引后面
f.seek(5)
#读取光标所在的行
f.readline()
#读取剩下的所有行,每一行都作为list的元素,readlines会读取到每行结尾的换行符\\n
f.readlines()
#一次读取剩下所有内容
f.read()
5.3 示例
type(f) = <class '_io.TextIOWrapper'>
该类实现了迭代器,所以可以通过for循环来使用,每次读一行数据。with as
语法相当于自动在finally中执行了f.close(),保证异常情况下也能关闭文件。with as
相当于jdk8中的try ()
语法。
# f在try里面算是全局变量,所以在finally中还可以使用,这如果是其它语言还要把f单独作为一行代码写在外边,有点不优雅
try:
f = open('a.txt', mode='r', encoding='UTF-8')
finally:
f.close()
with open('a.txt', mode='r', encoding='UTF-8') as f:
for line in f:
print(line)
将字典写入文件中。
import json
user_dict =
'username': '虚竹',
'age': 30
with open('data.json', 'w', encoding='utf-8') as f:
json.dump(user_dict, f, ensure_ascii=False)
六:hashlib
import hashlib
# e10adc3949ba59abbe56e057f20f883e
hashlib.md5('123456'.encode('UTF-8')).hexdigest()
七:base64
方法 | 描述 |
---|---|
encode、decode | 专门用来编码和解码文件的,也可以对StringIO里的数据做编解码 |
encodebytes,decodebytes | 用来编码和解码字符串 |
b64encode,b64decode | 用来编码和解码字符串 |
urlsafe_b64encode,urlsafe_b64decode | 用来对url进行base64编解码的 |
import base64
# b'python'
encodestr = base64.encodebytes('python'.encode())
# b'cHl0aG9u\\n'
decodebytes = base64.decodebytes(encodestr)
byte = 'python'.encode()
# b'cHl0aG9u'
encode = base64.b64encode(byte)
# b'python'
value = base64.b64decode(encode)
# 由于标准的Base64编码后可能出现字符+和/,在URL中就不能直接作为参数,所以又有一种"url safe"的base64编码,其实就是把字符+和/分别变成-和_
baidu = 'https://www.baidu.com'.encode('utf-8')
# b'aHR0cHM6Ly93d3cuYmFpZHUuY29t'
baiduencode = base64.urlsafe_b64encode(baidu)
# print(baiduencode)
decode = base64.urlsafe_b64decode(baiduencode)
print(decode)
# encode和decode函数的参数也可以是文件对象
f1 = open("1.txt", "r")
f2 = open("2.txt", "w")
base64.encode(f1, f2)
f1.close()
f2.close()
# 图片转base64
with open('xxx.png', 'rb') as f:
b_encode = base64.b64encode(f.read())
八:gzip
gzip模块能够直接压缩和解压缩bytes-like
类型的数据,同时也能实现对应格式文件的压缩与解压缩。
-
gzip.compress(data, compresslevel)
:压缩文本- data:需要压缩的bytes-like类型数据。
- compresslevel:压缩级别(0-9),默认最高压缩级别9,0表示不压缩。
-
gzip.decompress(data)
:解压缩文本。 -
gzip.open(filename, mode)
:打开文件,打开后可以使用如read、readline、readlines、write、writelines操作,mode可以是rb 或者 wb。
8.1 文本压缩和解压
import json
data_bytes = bytes(json.dumps('k1': 'v2', 'k2': 'v2'), 'utf-8')
zip_bytes = gzip.compress(data_bytes)
# b'\\x1f\\x8b\\x08\\x00\\xcaQWc\\x02\\xff\\xabV\\xca6T\\xb2RP*3R\\xd2QP\\xca6\\x82\\xb2k\\x01\\xba\\x02\\xad6\\x18\\x00\\x00\\x00'
print(zip_bytes)
raw_value_bytes = gzip.decompress(zip_bytes)
# b'"k1": "v2", "k2": "v2"'
print(raw_value_bytes)
8.2 文件压缩和解压
import gzip
with open('test.txt', 'rb') as f:
with gzip.open('test.tgz', 'wb') as gzf:
gzf.writelines(f)
with gzip.open('test.tgz', 'rb') as gzf:
with open('text2.txt', 'wb') as f:
f.writelines(gzf)
以上是关于Python内置模块:sysosrerandomfilehashlibbase64gzip的主要内容,如果未能解决你的问题,请参考以下文章