Python学习打卡:day10

news2024/11/25 2:35:17

day10

笔记来源于:黑马程序员python教程,8天python从入门到精通,学python看这套就够了

目录

  • day10
    • 73、文件的读取操作
      • 文件的操作步骤
      • open()打开函数
      • mode常用的三种基础访问模式
      • 读操作相关方法
        • read()方法
        • readlines()方法
        • readline()方法
        • for循环读取文件行
        • close() 关闭文件对象
        • with open 语法
      • 操作汇总
    • 74、文件读取的课后练习![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/e8198470bd8a4fc29178a1ea67c3c999.png#pic_center)
      • 字符串的 count 方法
      • 字符串的规整操作(去前后指定字符串)
    • 75、文件的写操作
    • 76、文件的追加写入操作
    • 77、文件操作的综合案例
    • 78、了解异常
    • 79、异常的捕获
      • 捕获常规异常
      • 捕获指定异常
      • 捕获多个异常
      • 捕获异常并输出描述信息
      • 捕获所有异常
      • 异常else
      • 异常的finally
    • 80、异常的传递性
    • 81、模块的概念和导入
      • 模块的导入方式
      • import模块名
      • from 模块名 import 功能名
      • from 模块名 import *
      • as 定义别名
    • 82、自定义模块并导入
      • 测试模块
      • \_\_all\_\_

73、文件的读取操作

文件操作主要包括打开、关闭、读、写等操作。

文件的操作步骤

  1. 打开文件
  2. 读写文件
  3. 关闭文件

tips:可以只打开和关闭文件,不进行任何读写

open()打开函数

在Python,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件,语法如下:

open(name, mode, encoding)

name:是要打开的目标文件名的字符串(可以包含文件所在的具体路径)。

mode:设置打开文件的模式(访问模式):只读、写入、追加等。

encoding:编码格式(推荐使用UTF-8)。

示例代码:

# 打开文件
f = open('71_测试.txt', 'r', encoding='UTF-8')
# w 和 a 模式下会自动创建,r 模式下则不能
f = open('/home/yin-roc/71_测试.txt', 'w', encoding='UTF-8')
print(type(f))

# 结果
<class '_io.TextIOWrapper'>

tips:此时的 fopen 函数的文件对象,对象是 Python 中一种特殊的数据类型,拥有属性和方法,可以使用对象属性或对象方法对其进行访问。

mode常用的三种基础访问模式

模式描述
r以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
w打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,原有内容会被删除。 如果该文件不存在,创建新文件。
a打开一个文件用于追加。如果该文件已存在,新的内容将会被写入到已有内容之后。 如果该文件不存在,创建新文件进行写入。

读操作相关方法

read()方法
文件对象.read(num)

num表示要从文件中读取的数据的长度(单位是字节),如果没有传入num,那么就表示读取文件中所有的数据。

示例代码:

# 读取文件 - read()
print(f"读取 10 个字节的结果:{f.read(10)}")

# 连续两次 read,会从上一次读完的结尾开始读。
print(f"read 方法读取全部内容的结果:{f.read()}")

# 结果
读取 10 个字节的结果:1234567890
read 方法读取全部内容的结果:
abcdefg
hijklmn
你好呀
readlines()方法
文件对象.readlines()

readlines可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素。

示例代码:

# 读取文件 - readlines()
lines = f.readlines()
print(f"lines 对象的类型:{type(lines)}")
print(f"lines 对象的内容:{lines}")

# 结果
lines 对象的类型:<class 'list'>
lines 对象的内容:['1234567890\n', 'abcdefg\n', 'hijklmn\n', '你好呀\n']
readline()方法

一次读取一行内容。

# 读取文件 - readline()
line1 = f.readline()
line2 = f.readline()
line3 = f.readline()
print(f"第一行数据是:{line1}")
print(f"第二行数据是:{line2}")
print(f"第三行数据是:{line3}")

# 结果
第一行数据是:1234567890

第二行数据是:abcdefg

第三行数据是:hijklmn

for循环读取文件行
# for 循环读取文件行
for line in f:
    print(f"每一行数据是:{line}")
# 每一个line临时变量,就记录了文件的一行数据

# 结果
每一行数据是:1234567890

每一行数据是:abcdefg

每一行数据是:hijklmn

每一行数据是:你好呀
close() 关闭文件对象
  1. 最后通过 close,关闭文件对象,也就是关闭对文件的占用
  2. 如果不调用 close,同时程序没有停止运行,那么这个文件将一直被 Python 程序占用。
# 文件的关闭
f.close()
time.sleep(5)   # 延时 5 s
with open 语法
  1. 通过在 with open 的语句块中对文件进行操作
  2. 可以在操作完成后自动关闭 close 文件,避免遗忘掉 close 方法
with open('71_测试.txt', 'r', encoding='UTF-8') as f:
    for line in f:
        print(f"每一行数据是: {line}")
time.sleep(5)

操作汇总

操作功能
文件对象 = open(file, mode, encoding)打开文件获得文件对象
文件对象.read(num)读取指定长度字节 不指定num读取文件全部
文件对象.readline()读取一行
文件对象.readlines()读取全部行,得到列表
for line in 文件对象for循环文件行,一次循环得到一行数据
文件对象.close()关闭文件对象
with open() as f通过with open语法打开文件,可以自动关闭

74、文件读取的课后练习在这里插入图片描述

72_word.txt 内容如下:

itheima itcast python
itheima python itcast
beijing shanghai itheima
shenzhen guangzhou itheima
wuhan hangzhou itheima
zhengzhou bigdata itheima

示例代码:

# 自写
f = open("72_word.txt", "r", encoding="UTF-8")
count = 0
for lines in f:
    eachline = lines.replace("\n", "").split(" ")
    i = 0
    print(eachline)
    while i < len(eachline):
        if eachline[i] == "itheima":
            count += 1
        i += 1
print(f"itheima 单词出现的次数:{count}")
f.close()

# 方式1:读取全部内容,以读取模式打开
f = open("72_word.txt", "r", encoding="UTF-8")
content = f.read()
count = content.count("itheima")
print(f"itheima 单词出现的次数:{count}")

# 方式2:读取内容,一行一行读取
count = 0
f = open("72_word.txt", "r", encoding="UTF-8")
for line in f:
    line = line.strip()     # 去除开头和结尾的空格及换行符
    words = line.split(" ")
    
# 判断单词出现次数并累计
for word in words:
    if word == "itheima":
        count += 1
print(f"itheima 单词出现的次数:{count}")
# 关闭文件
f.close()

# 结果
itheima 单词出现的次数:6

tips

这里主要涉及几个方法的使用,简化了代码,比自写的代码要简洁许多:

字符串的 count 方法

统计字符串中某字符串的出现次数

语法:字符串.count(字符串)
在这里插入图片描述

字符串的规整操作(去前后空格及换行符)

语法:字符串.strip()

在这里插入图片描述

字符串的规整操作(去前后指定字符串)

语法:字符串.strip(字符串)
在这里插入图片描述

注意,传入的是“12” 其实就是:”1”和”2”都会移除,是按照单个字符。

75、文件的写操作

基本语法格式:

# 1. 打开文件
f = open('python.txt', 'w')

# 2.文件写入
f.write('hello world')

# 3. 内容刷新
f.flush()

tips

  1. 直接调用 write,内容并未真正写入文件,而是会积攒在程序的内存中,称之为缓冲区
  2. 调用 flush 的时候,内容会真正写入文件
  3. close 方法,内置了 flush 功能
  4. 这样做是避免频繁的操作硬盘,导致效率下降(攒一堆,一次性写磁盘)。

示例代码:

1、打开一个未存在的文件:

"""
演示 对文件的写入
"""
import time

# 打开不存在的文件
f = open("73_test.txt", "w", encoding="UTF-8")
# write 写入
f.write("Hello World")

# flush 刷新
# f.flush()

time.sleep(5)

# close 关闭
f.close()   # close 方法,内置了 flush 功能

2、打开一个已经存在的文件

# 打开一个存在的文件
f = open("73_test.txt", "w", encoding="UTF-8")
# write 写入 flush 刷新
f.write("黑马程序员")
# close关闭
f.close()

tips

  1. 文件如果不存在,使用 “w” 模式,会创建新文件;
  2. 文件如果存在,使用 “w” 模式,会将原有内容清空;
  3. close() 方法,带有 flush() 方法的功能。

76、文件的追加写入操作

基本语法格式:

# 1. 打开文件,通过a模式打开即可
f = open('python.txt', 'a')

# 2.文件写入
f.write('hello world')

# 3. 内容刷新
f.flush()

tips

  1. a模式,文件不存在会创建文件;
  2. a模式,文件存在会在最后,追加写入文件。

示例代码:

1、打开一个不存在的文件:

# 打开不存在的文件
f = open("74_test.txt", "a", encoding="UTF-8")

# write 写入
f.write("黑马程序员")

# flush 刷新
f.flush()

# close 关闭
f.close()

2、打开一个存在的文件:

# 打开一个存在的文件
f = open("74_test.txt", "a", encoding="UTF-8")

# write 写入 flush 刷新
f.write("\n学Python最佳选择")

# close关闭
f.close()

77、文件操作的综合案例

需求:有一份账单文件,记录了消费收入的具体记录,内容如下:

name,date,money,type,remarks
周杰轮,2022-01-01,100000,消费,正式
周杰轮,2022-01-02,300000,收入,正式
周杰轮,2022-01-03,100000,消费,测试
林俊节,2022-01-01,300000,收入,正式
林俊节,2022-01-02,100000,消费,测试
林俊节,2022-01-03,100000,消费,正式
林俊节,2022-01-04,100000,消费,测试
林俊节,2022-01-05,500000,收入,正式
张学油,2022-01-01,100000,消费,正式
张学油,2022-01-02,500000,收入,正式
张学油,2022-01-03,900000,收入,测试
王力鸿,2022-01-01,500000,消费,正式
王力鸿,2022-01-02,300000,消费,测试
王力鸿,2022-01-03,950000,收入,正式
刘德滑,2022-01-01,300000,消费,测试
刘德滑,2022-01-02,100000,消费,正式
刘德滑,2022-01-03,300000,消费,正式

同学们可以将内容复制并保存为 bill.txt文件。

我们现在要做的就是:

  1. 读取文件;
  2. 将文件写出到bill.txt.bak文件作为备份;
  3. 同时,将文件内标记为测试的数据行丢弃。
# 自写
f_r = open("75_bill.txt", "r", encoding="UTF-8")
f_w = open("75_bill.txt.bak", "a", encoding="UTF-8")

for line in f_r:
    str = line.strip().split(",")
    flag = True
    for element in str:
        if element == '测试':
            flag = False
    if flag == True:
        f_w.write(line)

f_r.close()
f_w.close()
# 视频方法:减少了复杂度,但是通用性不是很高
f_r = open("75_bill.txt", "r", encoding="UTF-8")
f_w = open("75_bill.txt.bak", "a", encoding="UTF-8")

for line in f_r:
    line = line.strip()
    if line.strip(",")[4] == "测试":
        continue
    f_w.write(line)
    f_w.write("\n")

f_r.close()
f_w.close()

78、了解异常

当检测到一个错误时,Python解释器就无法继续执行了,反而出现了一些错误的提示,这就是所谓的==“异常”==,也就是我们常说的 BUG

79、异常的捕获

当我们的程序遇到了BUG, 那么接下来有两种情况:

  1. 整个程序因为一个BUG停止运行;
  2. 对BUG进行提醒,整个程序继续运行。

显然在之前的学习中,我们所有的程序遇到 BUG 就会出现1的这种情况,也就是整个程序直接奔溃。

但是在真实工作中,我们肯定不能因为一个小的 BUG 就让整个程序全部奔溃,也就是我们希望的是达到2的这种情况,那这里我们就需要使用到捕获异常

捕获异常的作用在于:提前假设某处会出现异常,做好提前准备,当真的出现异常的时候,可以有后续手段。

捕获常规异常

基本语法:

try:
    可能发生错误的代码
except:
    如果出现异常执行的代码

示例:

# 基本捕获语法
try:
    f = open("76_abc.txt", "r", encoding="UTF-8")
except:
    print("出现异常了,因为文件不存在,我将open的模式,改为w模式去打开")
    f = open("76_abc.txt", "w", encoding="UTF-8")
    
# 结果
出现异常了,因为文件不存在,我将open的模式,改为w模式去打开

捕获指定异常

基本语法:

try:
    print(name)
except NameError as e:
    print("出现了变量未定义的异常")
    print(e)

# 结果
出现了变量未定义的异常
name 'name' is not defined

tips

  1. 如果尝试执行的代码的异常类型和要捕获的异常类型不一致,则无法捕获异常。
  2. 一般try下方只放一行尝试执行的代码。

捕获多个异常

当捕获多个异常时,可以把要捕获的异常类型的名字,放到except 后,并使用元组的方式进行书写。

基本语法:

try:
    print(1/0)
except (NameError, ZeroDivisionError):
    print('ZeroDivision错误...')

示例代码:

# 捕获多个异常
try:
    # 1 / 0
    print(name)
    pass
except(NameError, ZeroDivisionError) as e:
    print("出现了变量未定义 或者 除以 0 的异常错误")
    
# 结果
出现了变量未定义 或者 除以 0 的异常错误

捕获异常并输出描述信息

基本语法:

try:
    print(num)
except (NameError, ZeroDivisionError) as e:
    print(e)

捕获所有异常

基本语法:

try:
    print(name)
except Exception as e:
    print(e)

异常else

else表示的是如果没有异常要执行的代码。

try:
    print(1)
except Exception as e:
    print(e)
else:
    print('我是else,是没有异常的时候执行的代码')

异常的finally

finally表示的是无论是否异常都要执行的代码,例如关闭文件。

try:
    f = open('test.txt', 'r')
except Exception as e:
    f = open('test.txt', 'w')
else:
    print('没有异常,真开心')
finally:
    f.close()

示例代码:

# 捕获所有异常
try:
    f = open("76_abc.txt", "r", encoding="UTF-8")
    # 1/0
    # print(name)

except Exception as e:
    print("出现异常了")
    f = open("76_abc.txt", "w", encoding="UTF-8")
else:
    print("好高兴,没有异常")
finally:
    print("我是finally,有没有异常我都要执行")
    f.close()

80、异常的传递性

异常是具有传递性的

当函数 func01 中发生异常,并且没有捕获处理这个异常的时候,异常会传递到函数func02,当 func02 也没有捕获处理这个异常的时候

main函数会捕获这个异常, 这就是异常的传递性。

提示:当所有函数都没有捕获异常的时候, 程序就会报错

在这里插入图片描述

示例代码:

"""
演示异常的传递性
"""

# 定义一个出现异常的方法
def func1():
    print("func1 开始执行")
    num = 1 / 0   # 肯定有异常,除以 0 的异常
    print("func1 结束执行")

# 定义一个无异常的方法,调用上面的方法
def func2():
    print("func2 开始执行")
    func1()
    print("func2 结束执行")

# 定义一个方法,调用上面的方法
def main():
    try:
        func2()
    except Exception as e:
        print(f"出现异常了,异常信息是:{e}")

main()

81、模块的概念和导入

Python 模块(Module),是一个 Python 文件,以 .py 结尾. 模块能定义函数,类和变量,模块里也能包含可执行的代码.

模块的作用:python中有很多各种不同的模块,每一个模块都可以帮助我们快速的实现一些功能,比如实现和时间相关的功能就可以使用time模块。

我们可以认为一个模块就是一个工具包,每一个工具包中都有各种不同的工具供我们使用进而实现各种不同的功能。

模块的导入方式

基本语法格式:
在这里插入图片描述

常用的组合形式如:

  1. import 模块名;
  2. from 模块名 import 类、变量、方法等;
  3. from 模块名 import *;
  4. import 模块名 as 别名;
  5. from 模块名 import 功能名 as 别名。

import模块名

基本语法格式:

import 模块名
import 模块名1,模块名2

模块名.功能名()

示例代码:

# 使用 python 导入 time 模块使用 sleep 功能(函数)
import time     # 导入 Python 内置的 time 模块 (time.py这个代码文件)

print("你好")
time.sleep(5)   # 通过 "." 就可以使用模块内部的全部功能(类\函数\变量)
print("我好")

from 模块名 import 功能名

基本语法格式:

from 模块名 import 功能名

功能名()

示例代码:

# 使用 from 导入 time 模块,使用 sleep 功能 (函数)
from time import sleep
print("nihao")
sleep(5)
print("wohao")

from 模块名 import *

基本语法格式:

from 模块名 import *

功能名()

示例代码:

# 使用 * 导入 time 模块的全部功能
from time import *      # *:表示全部的意思
print("nihao")
sleep(5)
print("wohao")

as 定义别名

基本语法格式:

# 模块定义别名
import 模块名 as 别名
# 功能定义别名
from 模块名 import 功能 as 别名

示例代码:

# 使用 as 给特定功能加上别名
import time as t
print("你好")
t.sleep(5)
print("我好")
from time import sleep as sl      # *:表示全部的意思
print("nihao")
sl(5)
print("wohao")

82、自定义模块并导入

Python中已经帮我们实现了很多的模块。不过有时候我们需要一些个性化的模块,这里就可以通过自定义模块实现,也就是自己制作一个模块。

案例:新建一个Python文件,命名为my_module1.py,并定义test函数
在这里插入图片描述
在这里插入图片描述

tips: 每个Python文件都可以作为一个模块,模块的名字就是文件的名字。也就是说自定义模块名必须要符合标识符命名规则

测试模块

在实际开发中,当一个开发人员编写完一个模块后,为了让模块能够在项目中达到想要的效果,这个开发人员会自行在py文件中添加一些测试信息,例如,在my_module1.py文件中添加测试代码test(1,1)。

def test(a, b):
    print(a + b)

test(1, 1)

问题:

此时,无论是当前文件,还是其他已经导入了该模块的文件,在运行的时候都会自动执行test 函数的调用。

解决方案:

def test(a, b):
    print(a + b)

# 只在当前文件中调用该函数,其他导入的文件内不符合该条件,则不执行test函数调用
if __name__ == '__main__':
    test (1, 1)

tips

在这里插入图片描述

注意事项:当导入多个模块的时候,且模块内有同名功能. 当调用这个同名功能的时候,调用到的是后面导入的模块的功能

__all__

如果一个模块文件中有 __all__ 变量,当使用 from xxx import * 导入时,只能导入这个列表中的元素。
在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1840117.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大模型微调和RAG的应用场景

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

进入docker容器内部操作mysql数据库

文章目录 1、查询docker容器2、进入mysql容器内部3、连接mysql数据库4、查询mysql所有的数据库5、使用某个数据库6、展示数据库中所有的表7、查询某张表8、断开mysql9、退出mysql容器 1、查询docker容器 [rootlocalhost ~]# docker ps CONTAINER ID IMAGE …

聚观早报 | 苹果AI功能将分批上线;三星Galaxy Z Fold6尺寸数据

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 6月18日消息 苹果AI功能将分批上线 三星Galaxy Z Fold6尺寸数据 华为智慧PC新品AI能力升级 抖音出品《三星堆&am…

Spring MVC学习记录(基础)

目录 1.SpringMVC概述1.1 MVC介绍1.2 Spring MVC介绍1.3 Spring MVC 的核心组件1.4 SpringMVC 工作原理 2.Spring MVC入门2.1 入门案例2.2 总结 3.RequestMapping注解4.controller方法返回值4.1 返回ModelAndView4.2 返回字符串4.2.1 逻辑视图名4.2.2 Redirect重定向4.2.3 forw…

六面体大米装袋机长期稳定运行原因分析

随着现代化农业生产的发展&#xff0c;六面体大米装袋机已成为粮食加工行业不可或缺的重要设备。然而&#xff0c;如何确保这些机器长期稳定运行&#xff0c;提高生产效率&#xff0c;降低维护成本&#xff0c;一直是广大粮食加工企业关注的焦点。星派将为您揭示六面体大米装袋…

如何在前端项目中用字体图标替换图片,方便减小打包体积和统一切换颜色

1.进入阿里妈妈矢量图标图库 地址&#xff1a;阿里妈妈矢量图 2.搜索自己想要的图标 3.添加自己想要的图标 4.把刚才选的图标&#xff0c;添加到自己要下载的项目 5.把项目下载到本地 6.引入iconfont.css 在div上增加对应的类名就可以啦 下载的所有类名都在下面的demo_index…

测速小车模块

1.用途&#xff1a;广泛用于电机转速检测&#xff0c;脉冲计数,位置限位等。 2.有遮挡&#xff0c;输出高电平&#xff1b;无遮挡&#xff0c;输出低电平 接线 VCC 接电源正极3.3-5V GND 接电源负极 DO TTL开关信号输出 AO 此模块不起作用 测试原理和单位换算&#xff1a;…

如何定制Spring的错误json信息

一&#xff0c;前言 相信很多同学都有遇到过这样的spring错误信息。 在我们没有做catch处理时或者做全局的exceptionHandle时&#xff0c;Spring遇到抛出向外的异常时&#xff0c;就会给我们封装返回这么个格式的异常信息。 那么问题来了&#xff0c;我们能否对这个返回增加错…

[Linux] vi编辑器

命令模式&文本模式 命令模式就输入命令然后执行&#xff0c;文本模式就是系统把你的输入都当成写进文件里的字符 切换模式&#xff1a; 刚进入默认是命令模式&#xff0c;按: i I a A o O 进入文本模式&#xff0c; 通过他们进入文本模式有什么不同&#xff1f; 然后按esc进…

PLC模拟量和数字量到底有什么区别?

PLC模拟量和数字量的区别 在工业自动化领域&#xff0c;可编程逻辑控制器&#xff08;PLC&#xff09;是控制各种机械设备和生产过程的核心组件。PLC通过处理模拟量和数字量来实现对工业过程的精确控制。了解模拟量和数字量的区别对于设计高效、可靠的自动化系统至关重要。 1. …

vue3+ts 使用vue3-ace-editor实现Json编辑器

1、效果图 输入代码&#xff0c;点击格式化就出现以上效果&#xff0c;再点击压缩&#xff0c;是以下效果2、安装 npm i vue3-ace-editor 3、使用 新建aceConfig.js文件 // ace配置&#xff0c;使用动态加载来避免第一次加载开销 import ace from ace-builds// 导入不同的主…

查看服务器接口各行代码耗时的 linux 命令

如何通过命令来查看接口具体位置的耗时情况 首先然后找到需要执行查看耗时的方法执行查询命令 trace 首先 使用这个命令 curl -O https://arthas.aliyun.com/arthas-boot.jar java -jar arthas-boot.jar然后找到需要执行查看耗时的方法 复制出来的 是 com.a.tms.api.service.…

昇思MindSpore全场景深度学习框架总结

昇思MindSpore介绍 MindSpore是一个全场景深度学习框架&#xff0c;旨在实现易开发、高效执行、全场景统一部署三大目标&#xff0c;具体包括API友好、调试难度低、计算效率、数据预处理效率和分布式训练效率高以及支持云、边缘和端侧场景。 昇思MindSpore的各个扩展功能模块&…

基于JSP的高校毕业生就业满意度调查统计系统

开头语&#xff1a; 你好呀&#xff0c;我是计算机学长猫哥&#xff01;如果有相关需求&#xff0c;文末可以找到我的联系方式。 开发语言&#xff1a;JSP 数据库&#xff1a;MySQL 技术&#xff1a;JSP技术 工具&#xff1a;MyEclipse、Tomcat、MySQL 系统展示 首页 用…

SPI协议——读取外部SPI Flash ID

简介&#xff1a; 单片机型号&#xff1a;stm32l431rct6 SPI Flash型号&#xff1a;W25Q32JVSSIQ 使用软件&#xff1a;CubeIDE 1. W25Q32JVSSIQ简介 我们通过SPI协议来读取 SPI Flash的厂商ID和芯片独一无二的ID&#xff0c;查数据的芯片手册可以看到如下重要点&#xff1a; …

pandas中的loc和iloc

loc和iloc的比较 .loc 和 .iloc 是 pandas 提供的两种不同的索引方法&#xff0c;它们的主要区别在于索引数据的依据&#xff1a; .loc&#xff1a; 基于标签的索引&#xff0c;使用 DataFrame 或 Series 的索引标签&#xff08;即行名和列名&#xff09;来获取数据。可以使用…

# 消息中间件 RocketMQ 高级功能和源码分析(五)

消息中间件 RocketMQ 高级功能和源码分析&#xff08;五&#xff09; 一、 消息中间件 RocketMQ 源码分析&#xff1a;NameServer 路由元数据 1、消息中间件 RocketMQ 中&#xff0c;NameServer 路由管理 NameServer 的主要作用是为消息的生产者和消息消费者提供关于主题 To…

AI口语练习APP的技术难点

AI口语练习APP旨在帮助用户练习口语&#xff0c;因此其核心功能是语音识别和语音评测。以下是一些AI口语练习APP的主要技术难点。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1. 语音识别 语音识别是将语音信号转换为文本的过程。…

怎么移除pdf文件编辑限制,有哪些方法?

PDF是我们在学习或工作中常常应用到的一种文件格式&#xff0c;因为它的跨平台性和文档保真度而备受欢迎。但是&#xff0c;有时我们会遇到PDF编辑权限被限制了&#xff0c;那么pdf解除编辑限制可以用什么方法呢&#xff1f;别急&#xff0c;接下来&#xff0c;本文将深入探讨如…

hadoop Yarn资源调度器

概述 Yarn是一个资源调度平台&#xff0c;负责为运算程序提供服务器资源&#xff0c;相当于一个分布式的操作系统平台&#xff0c;而MapReduce等运算程序相当于操作系统之上的应用程序 Yarn基本架构 YARN 主要由ResourceManager、NodeManager、ApplicationMaster、Container …