Python_Base_6

Python基础第六天


常用模块

os

系统交互模块,用python执行cmd命令,对操作系统进行访问
os.system()    主要用来写cmd指令
import os
os.system("echo hello,world")    # hello world
print(os.getcwd())     # 获取当前python工作目录
os.mkdir("XX")     # 在当前目录下创建名为XX的文件夹
os.rmdir("XX")     # 删除名为XX的文件夹(只能删除空的文件夹)
os.remove('base_1.py')    # 删除名为base_1的文件
os.rename('base_2.py','base_1.py')  # 重命名文件,左边是原名,右边是新名
print(os.path.exists(path='base_6.py'))   # 判断文件是否存在
print(os.path.isfile(path='base_6.py'))   # 判断是否为文件


time

import time
print(time.time())   # 时间戳(1970年1月1日00:00:00到现在的秒数)
print(time.localtime())   # 返回一个时间元组
print(time.sleep(1))   # 休眠一秒钟。放慢程序进程,看起来更直观
print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))                     # 2024-01-14 09:51:20,可以标识一个格式

%Y --> 年   %H --> 时
%m --> 月   %M --> 分
%d --> 日   %S --> 秒


random

import random
a = random.random()
print(a)     # 0.4083126885775591,随机生成一个0到1的随机数
b = random.randint(1,10)
print(b)     # 10,在此范围内随机生成一个整数(左闭右闭区间)
c = random.choice(['剪刀','石头','布'])
print(c)     # 布,随机生成列表中一个值
c = random.choices(['剪刀','石头','布'],k=2)
print(c)    # ['布', '剪刀'] 随机生成列表中两个值
d = random.uniform(1,10)
print(d)    # 1.2652817321978196
li = [1, 2, 3, 4]
random.shuffle(li)   # 打乱序列类型的顺序(字符串和元组就不可以打乱了,因为他们是不可变类型)
print(li)   # [2, 3, 4, 1]

设计一个四位数随机验证码的函数
def yz():
    yzm = ''
    for i in range(4):
        yzm += str(random.randint(0,9))
    return yzm
print(yz())


json

文件的存储格式,跨语言,跨平台

序列化和反序列化

序列数据:机器码(0和1)

反序列数据:人们看的代码

import json
json_data = json.dumps([1, 2, 'XX','你好'])
print(json_data)    # [1, 2, "XX", "\u4f60\u597d"]
print(type(json_data))   # <class 'str'>
data = json.loads(json_data)   # 反序列化
print(data)    # [1, 2, 'XX', '你好']
print(type(data))    # <class 'list'>,反序列化解码后


re正则表达式

普通字符和元字符构成的字符串,描述一类字符串规则。

import re
s1 = 'abcd'
par = 'ab'
res = re.match(par,s1)
print(res.group())       # ab,匹配出的结果
print(re.findall(par,s1))     # ['ab'],放到列表里面

元字符

匹配单字符
表示任意一个字符,除了\n
print(re.match('.','hello'))      # match='h'
print(re.match('.','@hello'))     # match='@'
print(re.match('..','hello'))     # match='he'
print(re.match('.','\nhello'))    # None

\d 表示0-9之间的任意一个数字
print(re.match('\d','0hello'))     # match='0'
print(re.match('\d','h2ello'))     # None

\D 表示非数字
print(re.match('\D','\nhello'))      # match='\n'
print(re.match('\D','@hello'))      # match='@'
print(re.match('\D','0hello'))      # None

\s 表示空白字符串
print(re.match('\s',' hello'))     # match=' '
print(re.match('\s','\n'))       # match='\n'
print(re.match('\s','\t'))       # match='\t'

\S 表示非空白字符
print(re.match('\S','\t'))      # None
print(re.match('\S','\\'))      # match='\\'  (\\相当于\)

\w 表示英文字母、数字、下划线
print(re.match('\w','\\'))      # None
print(re.match('\w','hello'))     # match='h'

\W 表示非英文字母、数字、下划线
print(re.match('\W','\\'))      # match='\\'
print(re.match('\W','hello'))      # None

字符集 用中括号来表示字符范围来匹配单个字符
print(re.match('[abcd]','acdb'))   # match='a'
print(re.findall('[abcd]','abz'))   # ['a', 'b']

表示一个范围内
print(re.findall('[a-z]','abz'))    # ['a', 'b', 'z']
print(re.findall('[a-zA-Z]','AabzB'))   # ['A', 'a', 'b', 'z', 'B']
print(re.findall('[A-z]','AabzB'))   # ['A', 'a', 'b', 'z', 'B']
print(re.findall('[0-9A-z]','5AabzB'))   # ['5', 'A', 'a', 'b', 'z', 'B']

表示取反、间接号
[^a-e]  # 取a-e之外的
print(re.match('[^a-e]','z'))    # match='z'

字符集的多字符匹配
print(re.match('[0-9][0-9]','25'))                      # match='25'
print(re.match('\d\w','2a'))     # match='2a'
print(re.findall('[\w\W]','@c2\n'))   # ['@', 'c', '2', '\n']

数量规则

import re
可以匹配多个字符
print(re.match('\d*','123456'))   # match='123456'  (贪婪模式)
只能匹配1次以上,不能匹配0次
print(re.match('\d+','a123456'))  # None    
print(re.match('\d*','a123456'))  # match=''
匹配一个字符出现0次或者1次
print(re.match('\d?',''))      # match=''
print(re.match('\d?','123'))   # match='1'
 

次数匹配
{m}    匹配前m个字符
{m,}     至少匹配m次以上
{m,n}    匹配m次以上,n次以下
print(re.match('\d{5}','123456'))                      # match='12345'
print(re.match('\d{3,}','1234a56'))                  # match='1234'
print(re.match('\d{3,6}','12a3456'))  # None

边界处理

^ 表示开始
$ 表示结束
print(re.match('^1[456][2-7]\d{8}'  ,'15211012138'))  # match='15211012138'

分组匹配

匹配日期
01 02 03 04 05 06 07 08 09 10 11 12
| 表示或者
t = '2022-12-21'
print(re.match('\d{4}-(0[0-9]|1[0-2])-\d{2}', t))                       # match='2022-12-21'
print(re.match('(\d{4}-(0[0-9]|1[0-2])-\d{2})', t).group(1))       # 2022-12-21

r 规避\,防转义
context = '<title>hello</title>'
print(re.match(r'<title>([\w\W]*)</title>', context))      # match='<title>hello</title>'>
\1 表示第一个分组中的内容
print(re.match(r'<(\w+)>([\w\W]*)</\1>', context))       # match='<title>hello</title>'>
print(re.match(r'<(\w+)>([\w\W]*)</\1>', context).group(1))         # title

分组取别名       ?P<别名>
print(re.match(r'<(?P<tag>\w+)>([\w\W]*)</(?P=tag)>',context).group())                        # <title>hello</title>


文件操作

操作文件的步骤:

  1. 打开文件
  2. 对文件进行操作,保存
  3. 关闭文件

打开

filename = 'demo.txt'         # 复制绝对路径:右击文件按住Ctrl+Shift+C
demo = open(filename)    # 只要没报错就是打开的
print(demo)   # 假如和本程序不在同一个目录下就要在上面复制绝对路径
..表示上一级/
filename = r'../base_6/demo.text'
# 对于写路径的时候可以在前面加r来规避\
content = demo.read()
print(content)
print(type(content))
demo.close()

with open()...as 可以自动关闭
with open(filename) as f:
    print(f.read())
print(f.read())    # 会报错,with执行结束后就会关闭

读取

文件分类:

  1. 1.纯文本文件(使用utf-8等编码编写的文本文件)
  2. 2.二进制文件(音乐、图片、视频)

filename = 'demo.txt'
with open(filename, encoding='utf-8') as f:
    content = f.read(4)
    content = f.read(4)
    content = f.read(4)   # 如果读取完了还继续读会返回空字符串
    print(content)

读取一个大文件的规范写法:
filename = 'demo.txt'
with open(filename, encoding='utf-8') as f:
    all_content = ''    # 定义一个空字符串用来保存数据
    while True:
        content = f.read(5)
        if content == '':
            break
        all_content += content
print(all_content)    # 拿到读取的数据

对一行进行读取:
filename = 'demo.txt'
with open(filename, encoding='utf-8') as f:
    print(f.readline(), end="")                             # 阻止print自带的换行
    print(f.readline(), end="")
    print(f.readline())
readlines():
filename = 'demo.txt'
with open(filename, encoding='utf-8') as f:
    l = f.readlines()    # 对每一行都进行了读取
    print(l[1:3])    # 进行切片操作

写入

write()
open(file,mode='r')
r : 可读
w : 可写,会覆盖文件。如果文件不存在就会创建文件
a : 追加,文件不存在也会覆盖
b : 读取二进制文件
filename = 'demo1.txt'
with open(filename, 'w', encoding='utf-8') as f:
    f.write('hello,world')

filename = 'demo1.txt'
with open(filename, 'a', encoding='utf-8') as f:
    f.write('\n你好,世界')

二进制文件

filename = r'C:\Users\Lenovo\Desktop\联想截图_20230821221458.png'
with open(filename,'rb') as f:
    new_path = 'qq.png'
    with open(new_path,'wb') as new_f:
        # 定义每次读取的大小
        c = 1024*100  # 二进制模式基本单位是字节
        while True:
            content = f.read(c)
            # 如果字节没有了就退出
            if not content:
                break
            # 将读取的数据写入到新的对象中
            new_f.write(content)
运行完之后会发现文件夹里多了的一个png就是这个图片

  

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值