目录
1.2 Th开发环境、ESP32-python固件、官方文档
一、 MicroPython
1.1 所用开发板
1.2 Th开发环境、ESP32-python固件、官方文档
Thonny, Python IDE for beginners
MicroPython - Python for microcontrollers
Overview — MicroPython latest documentation
micropython: micropython官方库 https://github.com/micropython/micropython.git
GitHub - micropython/micropython-lib: Core Python libraries ported to MicroPython
1.3 代码
1.3.0 点灯
//点灯from machine import Pin //导入GIPO库Pin2 = Pin(2,Pin.OUT) //设置pin2口pin2.on()pin2.off()//读取电平设置电平pin2.value()//读pin2.value(1)//设置//Python库的函数粗延时from machine import Pinimport timepin2 = Pin(2,Pin.OUT)while True: pin2.on() time.sleep_ms(50) pin2.off() time.sleep_ms(50)
1.3.1 定时器
#def 定义#period 时期#PERIODIC 周期模式#callback 回调#lambda 入/闭包就是匿名函数,没有名字的函数,属于函数式编程概念from machine import Pin,Timerled = Pin(2,Pin.OUT)def led_get(Tim): print(led.value()) led.on()Tim = Timer(0)Tim.init(period = 1000 ,mode = Timer.PERIODIC,callback = led_get)Tim = Timer(1)Tim.init(period = 2000 ,mode = Timer.PERIODIC,callback = lambda t:led.off())
1.3.2 PWM
from machine import Pin,PWMimport time pwm = PWM(Pin(2))pwm.freq(1000)def pwm_set(): while True: for i in range(0,1024,1): pwm.duty(i) time.sleep_ms(1) for i in range(1023,0,-1): pwm.duty(i) time.sleep_ms(1)pwm_set()
1.3.2 PWM 控制舵机
from machine import Pin,PWMimport timemotor = PWM(Pin(2),freq = 50 ,duty = 0)def motor_test(): while True: for i in range(0,181,1): motor.duty(int((i/90+0.5)/20*1023)) time.sleep_ms(1) for i in range(180,-1,-1): motor.duty(int((i/90+0.5)/20*1023)) time.sleep_ms(1)motor_test()
1.3.3 TCP\UDP通信
TCP
import networK //导入库wlan = network.WLAN(network.STA_IF) //创建waln对象,STA_IF从机模式 ESP32用的是2.4Gwlan.active(True) //是否启动WIFIwlan.scan() //扫描附近WiFiwlan.isconnected() //是否连接过网络wlan.connect('HIKVISION_6CA780','yhnokn..123') //连接WiFiwlan.config('mac') //查看ESP32设备MACwlan.ifconfig() //查看路由器给设备分配的IP
from socket import * //导入库tcp_socket = socket(AF_INET,SOCK_STREAM)serve_ip = "192.168.0.196"serve_port = 8080tcp_socket.connect((serve_ip,serve_port)) //连接本地的网络调试助手服务器,参数是元组形式send_data = "this is a message" //发送数据tcp_socket.send(send_data.encode("utf-8"))from_serve_msg = tcp_socket.recv(1024) //接收数据print(from_serve_msg.decode("utf-8"))
UDP
from socket import *udp_socket = socket(AF_INET,SOCK_DGRAM)dest_addr = ("192.168.0.196",8080)send_data = "this is a message"udp_socket.sendto(send_data.encode('utf-8'),dest_addr)
UDP 联网点亮LED
from machine import Pinfrom socket import *import networkimport time#网络配置def do_connect(): wlan = network.WLAN(network.STA_IF)#创建WLAN对象 wlan.active(True)#激活WLAN if not wlan.isconnected(): print('connecting to network...') wlan.connect('HIKVISION_6CA780','yhnokn..123') while not wlan.isconnected(): pass print('network config',wlan.ifconfig())#创建网络连接def create_network_socket(): udp_socket = socket(AF_INET,SOCK_DGRAM)#创建UDP套接字 udp_socket.bind(("192.168.0.188",8080))#绑定端口 return udp_socket#接收数据函数def udp_RXT_data(): do_connect() udp_socket = create_network_socket() led = Pin(2,Pin.OUT) while True: #接收的数据 #发送者地址 #接收字节的长度 recv_data,sendr_info = udp_socket.recvfrom(1024) #解码接收到的数据以便打印出中文 recv_data_srt = recv_data.decode("utf8") print("数据内容:{} 数据地址:{}".format(recv_data_srt,sendr_info)) if recv_data_srt == "开灯": led.value(1) elif recv_data_srt == "关灯": led.value(0) def main(): udp_RXT_data()if __name__ == "__main__": main()
TCP 联网点亮LED
from machine import Pinfrom socket import *import networkimport time#网络配置def do_connect(): wlan = network.WLAN(network.STA_IF)#创建WLAN对象 wlan.active(True)#激活WLAN if not wlan.isconnected(): print('connecting to network...') wlan.connect('HIKVISION_6CA780','yhnokn..123') while not wlan.isconnected(): pass print('network config',wlan.ifconfig())#创建网络连接def create_network_socket(): tcp_socket = socket(AF_INET,SOCK_STREAM)#创建套接字 serve_ip = "192.168.0.196"#需要连接服务器地址 serve_port = 8080 #需要连接的端口 tcp_socket.connect((serve_ip,serve_port)) return tcp_socket#接收数据函数def tcp_RXT_data(): do_connect() tcp_socket = create_network_socket() led = Pin(2,Pin.OUT) while True: #接收的数据 recv_data = (tcp_socket.recv(1024).decode("utf-8")) print("{}".format(recv_data)) if recv_data == "开灯": led.value(1) elif recv_data == "关灯": led.value(0) def main(): tcp_RXT_data()if __name__ == "__main__": main()
『if __name__ == "__main__"』到底啥意思❓
1.3.4 LCD1602
导入所所需要的库: lcd_api.py 和 machine_i2c_lcd.py
下载地址 GitHub - dhylands/python_lcd: Python based library for talking to character based LCDs.
from machine import SoftI2C,Pinfrom machine_i2c_lcd import I2cLcdimport timelcd_addr = 0x27I2C = SoftI2C(scl = Pin(16),sda = Pin(4),freq = 100000)lcd = I2cLcd(I2C,lcd_addr,2,16)def main(): while True: for i in range(0,10): lcd.clear() lcd.putchar("{}".format(i)) time.sleep_ms(1000) if __name__ == "__main__": main()
1.3.5 数码管
(列表、字典知识点)
from machine import Pinimport time gnd = Pin(0,Pin.OUT)a = Pin(12,Pin.OUT)b = Pin(14,Pin.OUT)c = Pin(27,Pin.OUT)d = Pin(26,Pin.OUT)e = Pin(25,Pin.OUT)f = Pin(33,Pin.OUT)g = Pin(32,Pin.OUT)dp = Pin(2,Pin.OUT) #列表(数组)smg_pin = [a,b,c,d,e,f,g,dp]#字典smg_code = { 0:"11111100",#键:值 (效果一样)"11111100":0 1:"01100000", 2:"11011000", 3:"11110010", 4:"01100110", 5:"11100110", 6:"10111110", 7:"11100000", 8:"11111110", 9:"11110110", }def smg_disply(num): gnd.value(0) if smg_code.get(num): #判断传入值是否在字典中 i = 0; for count in smg_code.get(num):#在字典中则将键值按位赋值给count if count == "1": #字符型的比较 smg_pin[i].value(1) else: smg_pin[i].value(0) i+=1; def main(): smg_disply(0) time.sleep(1) while True: passif __name__ == "__main__": main()
1.3.6 SSD1306
SSD1306官方驱动库:SSD1306
SPI方式驱动(用到的OLED为带字库的接线方式有所不同)用到CLK、MOSI、DC、CS1
from machine import Pin,SoftSPI from ssd1306 import SSD1306_SPIimport time dc = Pin(2,Pin.OUT)res = Pin(15,Pin.OUT)cs = Pin(4,Pin.OUT)spi = SoftSPI(baudrate=100000, polarity=1, phase=0, sck=Pin(18), mosi=Pin(23), miso=Pin(19)) oled = SSD1306_SPI(128,64,spi,dc,res,cs)def main(): oled.text("littleone",24,28,1) while True: for i in range(100): oled.fill(0) oled.text("littleone:%d"%i,24,28,1) oled.invert(i) oled.rotate(i) oled.contrast(i) oled.show() time.sleep(1) if __name__ == "__main__": main()
1.3.7 DS18B20
(一线通信接口)
from machine import Pinimport onewire,ds18x20,time#创建单总线对象ONEWIRE = onewire.OneWire(Pin(2))#创建ds18b20对象DS18B20 = ds18x20.DS18X20(ONEWIRE)def dis18b20_read_Temp(): roms =DS18B20.scan() #扫描ds18b20地址 DS18B20.convert_temp() #开始温度转换 time.sleep(1)#12位精度延迟750ms这里延时1s for rom in roms:#把读取到的器件地址循环写入 temp = DS18B20.read_temp(rom)#读取温度写入器件地址 return temp #将温度值返回 def main(): dis18b20_read_Temp() while True: print("temp = %.2f ℃"%dis18b20_read_Temp())if __name__ == "__main__": main()
1.3.8 WS2812b
2^24 = 16,777,216
from machine import Pinimport neopixel,timepin = Pin(2,Pin.OUT)#1:引脚 2:灯珠数 3:颜色格式(3为RGB) 4:频率 0=400K 1=800Knp = neopixel.NeoPixel(pin,n=12,bpp=3,timing=3)def main(): while True: for i in range (0,12,1): np[i] = (24,89,i*8) np.write() time.sleep_ms(50) np.fill((0,0,0)) np.write() if __name__ == "__main__": main()
1.3.9 74HC595数码管
from machine import Pinimport timeds = Pin(15,Pin.OUT) #DIO数据RCLK = Pin(0,Pin.OUT) #存储寄存器时钟SCLK = Pin(2,Pin.OUT) #移位寄存器时钟def ch595_write_Byte(duan,wei):#段选,位选 for i in range(8): if duan & 0x80: #0x80=1000 0000 ds.value(1) else: ds.value(0) SCLK.value(0) SCLK.value(1) duan <<= 1 for i in range(8): if wei & 0x80: #0x80=1000 0000 ds.value(1) else: ds.value(0) SCLK.value(0) SCLK.value(1) wei <<= 1 RCLK.value(0) RCLK.value(1) def ch595_dispy_numberr(num,show_point): #0-9 共阴 我所用的是共阳所以把每一个数字按位取反 ~0x00为清屏不显示 number = [~0x3f,~0x06,~0x5b,~0x4f,~0x66,~0x6d,~0x7d,~0x07,~0x7f,~0x6f,~0x00] point = [0x1,0x1<<1,0x1<<2,0x1<<3,0x1<<4,0x1<<5,0x1<<6,0x1<<7] ch595_write_Byte(number[num],point[show_point]) def main(): while True: for i in range (8): ch595_dispy_numberr(i,i) time.sleep_ms(100) ch595_dispy_numberr(10,i) if __name__ == "__main__": main()
1.3.10 MAX7219数码管
from machine import Pin,SPIimport timeclk = Pin(14,Pin.OUT)cs = Pin(12,Pin.OUT)dio = Pin(13,Pin.OUT)#自己写"""def MAX7219_Write(addr,data): cs.value(0) for i in range (8): clk.value(0) dio.value(1 if((addr<
点阵管
from machine import Pin,SPIimport Max7219,timecs = Pin(12,Pin.OUT)spi = SPI(1,1000000,sck=Pin(14),mosi=Pin(13),miso=Pin(19))MAX = Max7219.Matrix8x8(spi,cs,1)MAX.init()def main(): MAX.brightness(7) MAX.fill(0) while True: for i in range(9): MAX.rect(8-i,8-i,i,i,1) MAX.show() time.sleep_ms(50) MAX.fill(0) if __name__ == "__main__": main()
1.3.11 IIC-OLED
Soft/Hard-IIC
from machine import SoftI2C,Pin,I2Cfrom ssd1306 import SSD1306_I2Cimport timeclass chinese: chinese = [ # 晓(0) 小(1) 謏(2) 0x00,0xFC,0x84,0x84,0xFC,0x00,0x88,0x88,0x4F,0x58,0x24,0x54,0x84,0xE4,0x00,0x00, 0x00,0x3F,0x10,0x10,0x3F,0x80,0x42,0x32,0x0E,0x02,0x02,0x3E,0x42,0x42,0x72,0x00, 0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x20,0x40,0x80,0x00,0x00, 0x08,0x04,0x03,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x01,0x0E,0x00, 0x08,0xA8,0xA9,0xAE,0xA8,0xA8,0x00,0xFE,0x91,0x80,0xFF,0x80,0x92,0xFE,0x00,0x00, 0x00,0x7E,0x22,0x22,0x22,0x7E,0x80,0x82,0x46,0x2A,0x13,0x2A,0x46,0x82,0x80,0x00, ]i2c = SoftI2C(scl = Pin(0),sda = Pin(2),freq = 100000)#软件IICI2C = I2C(0,scl = Pin(22),sda =Pin(21),freq = 400000)#硬件IICaddr = 0x3coled = SSD1306_I2C(128,64,I2C,addr)#显示中文def ByteOpera(num,dat): byte = [0x01,0x02,0x04,0x8,0x10,0x20,0x40,0x80] if dat&byte[num]: return 1 else: return 0def LcdShowCh_16x16(n,x_axis,y_axis): for i in range(2): for a in range(16): for b in range(8): if(ByteOpera(b,chinese.chinese[n*32+i*16+a])): oled.pixel(x_axis+a,y_axis+i*8+b,1) else: oled.pixel(x_axis+a,y_axis+i*8+b,0)def main(): oled.fill(0) for i in range (100): oled.text("littleone:%d"%i,24,28,1) LcdShowCh_16x16(0,16,0) LcdShowCh_16x16(1,2*16,0) LcdShowCh_16x16(2,3*16,0) # oled.text("little one",24,28) # oled.text("{}".format(i),110,28) oled.show() time.sleep_ms(50); oled.fill(0) while True: passif __name__ == "__main__": main()
1.3.12 GY-30光照传感器
from machine import Pin,I2Cfrom ssd1306 import SSD1306_I2Cimport timei2c = I2C(0,scl = Pin(22),sda = Pin(21),freq =4_00_000)gy20_addr = int(i2c.scan()[0])oled_addr = int(i2c.scan()[1])oled = SSD1306_I2C(128,64,i2c,oled_addr)# print(hex(i2c.scan()[0]),hex(i2c.scan()[1]))def Gy_30_Init(): i2c.writeto(gy20_addr,b'\x01')#通电运行 i2c.writeto(gy20_addr,b'\x07')#复位 i2c.writeto(gy20_addr,b'\x10')#高分辨率连续读取 1lx(1流明分辨率) 120ms(测量间隔) def Gy_30_Show(): gy = i2c.readfrom(gy20_addr,2)#读两个字节16位对应GY30的分辨率 gy30 = float(gy[0] << 8 | gy[1])/1.2#对读回的两个列表项进行合并 time.sleep_ms(200) return gy30def main(): Gy_30_Init() oled.contrast(255) while True: oled.fill(0) oled.text("gy-30 = %.2fLx"%Gy_30_Show(),0,28) oled.show() print("%.2fLx"%Gy_30_Show())if __name__ == "__main__": main()
1.3.13 AHT10
import timefrom machine import Pin, I2Cimport ahtx0I2C = I2C(0,scl = Pin(22),sda =Pin(21),freq = 400000)#硬件IICaddr = int(I2C.scan()[0])sensor = ahtx0.AHT10(I2C,addr)# Create the sensor object using I2C# sensor = ahtx0.AHT10(I2C)while True: print("\nTemperature: %0.2f C" % sensor.temperature) print("Humidity: %0.2f %%" % sensor.relative_humidity) time.sleep_ms(500)
1.3.13 DHT11
from machine import Pinimport dhtimport timedef DHT11(): dht11 = dht.DHT11(Pin(4)) dht11.measure() print("temp:%.1f"% dht11.temperature()) print("hum:%.1f"% dht11.humidity()) print("\n") def main(): while True: DHT11() time.sleep_ms(10)if __name__ == "__main__": main()
1.3.14 HCSR04
1.3.15 获取网络时间
编写ntpTime库
from machine import Pin,I2C,RTCfrom ssd1306 import SSD1306_I2Cimport ntptime,time,networkI2C = I2C(0,scl = Pin(22),sda =Pin(21),freq = 400000)#硬件IICaddr = 0x3coled = SSD1306_I2C(128,64,I2C,addr) def do_connect(): wlan = network.WLAN(network.STA_IF) wlan.active(True) if not wlan.isconnected(): oled.text("connect net...",0,0,1) oled.show() wlan.connect('HIKVISION_6CA780','yhnokn..123') while not wlan.isconnected(): pass oled.fill(0) oled.text("connect succeed",0,0,1) oled.text("ip:%s"%wlan.ifconfig()[0],0,16,1) oled.text("MSK:%s"%wlan.ifconfig()[1],0,32,1) oled.text("GW:%s"%wlan.ifconfig()[2],0,48,1) oled.text("DNS:%s"%wlan.ifconfig()[3],0,64,1) oled.show() print('network config:', wlan.ifconfig()) def syne_ntp(): week = ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday'] rtc = RTC() ntptime.NTP_DELTA = 3155644800 ntptime.host = "ntp.aliyun.com" #ntptime.host = "pool.ntp.org" #time.sleep(1) oled.fill(0) try: #异常处理模块 rtc.datetime() #获取本地时间 ntptime.settime() #同步本地时间 oled.text("succeed",0,0,1) except : #出现异常处理 oled.text("erro ",0,0,1) times = rtc.datetime() oled.text("%d-%.2d-%.2d"%(times[0],times[1],times[2]),0,16,1) oled.text("%.2d-%.2d-%.2d"%(times[4],times[5],times[6]),0,32,1) oled.text("%s"%(week[times[3]]),0,48,1) oled.show() #time.sleep(1) def main(): do_connect() while True: syne_ntp() if __name__ == "__main__": main()
main中调用
from ntpTime import do_connect,syne_ntpimport timedef main(): do_connect() time.sleep(1) while True: syne_ntp() if __name__ == "__main__": main()
1.3.16 获取心知天气
①:注册心知天气获取秘钥
②:导入urequests库 库地址
③:心知的接口免费用户每分钟限制获取20次信息超过就或获取失败所以要加合适的延迟时间
import ntptime,time,network,urequestsimport ujsondef get_weather(): get = urequests.get("https://api.seniverse.com/v3/weather/now.json?key=S0uI5uodKzB8Ytdqk&location=fujianfuzhou&language=zh-Hans&unit=c") decode = ujson.loads(get.text) Cit_Name = decode["results"][0]["location"]["name"] Cit_weather = decode["results"][0]["now"]["text"] Cit_Temp = decode["results"][0]["now"]["temperature"] #最近一次更新的时间 Cit_time = decode["results"][0]["last_update"] print(Cit_Name,Cit_weather,Cit_Temp,Cit_time)def main(): while True: get_weather() time.sleep(20) if __name__ == "__main__": main()
decode = ujson.loads(get.text) 的解释
Cit_Name = decode["results"][0]["location"]["name"] 的理解
decode = ujson.loads(get.text) 是将原本的Response类转换成dict字典
数据原本是这样的
{"results":[{"location":{"id":"WSSU6EXX52RE","name":"福州","country":"CN","path":"福州,福州,福建,中国","timezone":"Asia/Shanghai","timezone_offset":"+08:00"},"now":{"text":"多云","code":"4","temperature":"27"},"last_update":"2023-05-31T21:52:49+08:00"}]}
转化完了就是一个字典嵌套一个列表(这个列表只有一个元素(对应[0])这个元素是一个嵌套了字典的字典)列表里面有嵌套字典的结构
["results"][0]["location"]["name"] 就是说获取字典中"results"对应的列表中的第一个元素中字典"location"中的字典"name"对应的内容
1.3.17 I2S播放WAV
使用Micropython开发ESP32开发板之通过MAX98357 I2S音频模块播放音乐_魔都飘雪的博客-CSDN博客
本地文件的读写操作只能打开下载到板子中的文件。
1.4 参考资料
(66条消息) 1.2 ESP32-MicroPython基础操作_micropython查看内存大小_向往生的博客-CSDN博客
二 、 Pyhon
1.1 语法
1.1.0
【Python】input()函数用法小结_python input_Darknight: :的博客-CSDN博客
Python 二进制中1的个数 &0xffffffff是什么意思
在 python 中,类型属于对象,对象有不同类型的区分,变量是没有类型的:
eg:
a=[1,2,3] a="Runoob"
以上代码中, [1,2,3] 是 List 类型, "Runoob" 是 String 类型,而变量 a 是没有类型,她仅仅是一个对象的引用(一个指针),可以是指向 List 类型对象,也可以是指向 String 类型对象。
可更改(mutable)与不可更改(immutable)对象
在 python 中,strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象。
不可变类型:变量赋值 a=5 后再赋值 a=10,这里实际是新生成一个 int 值对象 10,再让 a 指向它,而 5 被丢弃,不是改变 a 的值,相当于新生成了 a。
可变类型:变量赋值 la=[1,2,3,4] 后再赋值 la[2]=5 则是将 list la 的第三个元素值更改,本身la没有动,只是其内部的一部分值被修改了。
python 函数的参数传递:
不可变类型:类似 C++ 的值传递,如整数、字符串、元组。如 fun(a),传递的只是 a 的值,没有影响 a 对象本身。如果在 fun(a) 内部修改 a 的值,则是新生成一个 a 的对象。
可变类型:类似 C++ 的引用传递,如 列表,字典。如 fun(la),则是将 la 真正的传过去,修改后 fun 外部的 la 也会受影响
python 中一切都是对象,严格意义我们不能说值传递还是引用传递,我们应该说传不可变对象和传可变对象。
匿名函数
Python 使用 lambda 来创建匿名函数。
所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。
lambda 只是一个表达式,函数体比 def 简单很多。
lambda 的主体是一个表达式,而不是一个代码块。仅仅能在 lambda 表达式中封装有限的逻辑进去。
lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
虽然 lambda 函数看起来只能写一行,却不等同于 C 或 C++ 的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
1.1.1 语法糖
语法糖是编程中的某些特殊写法
①:交换量变量的值
a=1; b=2; a,b = b,a(实现交换)
②:判断变量是否落在某个范围内
if 90<=a<=100 print("优秀") 判断啊是否在90-100的范围内
③:快速构造字符串
print('-'*20) 打印出20个-
④:列表拼接
a = [1,2,3] b = [4,5,6] c= a+b
⑤:列表切片
a = [1,2,3,4,5,6,7,8,9] b = a[3:-2] = [4,5,6,7]
⑥:打包与解包
a = (1,2,3) x,y,z = a python会把a解包然后按左边变量的顺序分别赋值给x,y,z
b = (x,y,z) 把xyz的值打包给b
⑦:with语句
正常读取文件分三步
打开文件 f = open('test.txt','r') 读取文件 data = f.read( ) 关闭文件 f.colse() 最后一步关闭文件相当于‘擦屁股’的操作如果不小心忘了或者忽略可能会导致很多麻烦,pyhton用with语句很好的解决了这个问题
用with 没有用关闭文件的语句,但是他能够自动的关闭打开的文件对象自动处理异常
with oprn('test.txt','r') as f:
data = f.read()
⑧:列表推导式
eg:给列表中的元素每个加233
普通的做法:a = [1,2,3] b[] for e in a: b.append(e+233)
推导式: a = [1,2,3] b = [e+233 for e in a]
⑨:数字分割符
a = 10_0000_0000
1.2 例子
1.2.0 Python爬取Bing图片
引例:(6条消息) Python3爬取Bing每日图片,并设置为电脑桌面_python爬取bing每日一图保存_非常的硬朗的博客-CSDN博客
(6条消息) Python实用案例,Python脚本,Python实现每日更换“必应图片”为“桌面壁纸”_千寻编程的博客-CSDN博客
安装各种库的方法:(6条消息) python中import requests报错:No module named ‘requests’_Nancy-sn的博客-CSDN博客
(6条消息) Python3安装Pillow与PIL的方法_pillow资源-CSDN文库
(6条消息) 关于文件路径中/ \ // \\的使用以及绝对相对路径的问题_路径\\_csdndg的博客-CSDN博客
1.2.1 批量修改文件名
用到的是 os 模块中的 listdir 方法和 rename 方法
import ospath = "c:\\Users\\Heone\\Desktop\\python\\TEST\\"fileList = os.listdir(path)n = 0 for i in fileList: old = path+ os.sep + fileList[n] # os.sep添加系统分隔符 new = path+ os.sep + 'B' + str(n+1) +'.txt' os.rename(old,new) n +=1
来源地址:https://blog.csdn.net/qq_45803449/article/details/129763368