# 模块
## 内置模块
### 和编译器相关sys
- 获取变量使用了几次sys.getrefcount(a)
import sys
a = [1,2,3]
print(sys.getrefcount(a)) #变量引用了几次
#结果:2
- 获取编译后面的参数sys..argv,实际返回是一个列表,列表第一个是脚本路径,接着是输入的变量参数,可以在终端运行脚本后面增加参数,然后脚本里面获取后作相应的操作,常用在运维,只能在DOS下运行,sys.argv()是非阻塞的,可以在DOS下运行后面输入要输入的内容在用来替代input输入
脚本内代码如下,脚本名字00.py:
import sys
result = sys.argv
print(result[:])
结果:
在终端中输入:python 00.py a,b,"林明均" 后,输出:列表[00.py,a,b,"林明均"]
- sys.path.append()把文件路径添加到环境变量中
- 结束程序sys.exit()
### copy对变量深浅拷贝,指针对可变类型有用,一般应用于列表拷贝
- copy.copy()
- 对变量浅拷贝
#浅拷贝只拷贝外层
import copy
x1 = [1,2,"林明均",[2,3,"林明聪"]]
x2 = copy.copy(x1)
print(x1)
print(x2)
print(id(x1),id(x2),id(x1[3]),id(x2[3])) #只有外层内存地址不一样,内层列表内层地址相同
结果:
[1, 2, '林明均', [2, 3, '林明聪']]
[1, 2, '林明均', [2, 3, '林明聪']]
3888200 167017096 3887688 3887688
- copy.deepcopy()
- 对变量的深拷贝
#深度拷贝是把外壳和内壳都拷贝一份,所以地址内外层的内存地址都不一样,注意拷贝只针对可变类型,像字符串,整形内存地址都不变
import copy
x1 = [1,2,"林明均",[2,3,"林明聪"]]
x2 = copy.deepcopy(x1)
print(x1)
print(x2)
print(id(x1),id(x2),id(x1[3]),id(x2[3])) #列表内外层内存地址都不一样
结果:
[1, 2, '林明均', [2, 3, '林明聪']]
[1, 2, '林明均', [2, 3, '林明聪']]
4084808 167016776 4084296 41201160
### 和系统相关os
- os.stat("文件路径")
- os.stat("文件路径").st_size
- 获取文件大小,以字节为单位
x1 = os.stat("1.pdf").st_size
print(x1)
结果:2007858
- os.stat("文件路径").st_ctime
- 获取文件创建时间,时间是国际时间格式,需要转换成我们识别的时间格式
import os
from datetime import datetime
import time
x1 = os.stat("zzh.zip").st_ctime
print(x1)
x2 = datetime.fromtimestamp(x1)
print(x2,type(x2))
x3 = x2.strftime("%Y-%m-%d %H:%M:%S")
print(x3,type(x3))
结果:
1611842935.9120927
2021-01-28 22:08:55.912093 <class 'datetime.datetime'>
2021-01-28 22:08:55 <class 'str'>
- os.stat("文件路径").st_mtime
- 获取文件修改时间,时间是国际时间格式,需要转换成我们识别的时间格式
- os.stat("文件路径").st_atime
- 获取文件最后访问时间,时间是国际时间格式,需要转换成我们识别的时间格式
- os.makedirs("文件路径")
- 创建文件夹或者文件,可以多层创建,如果已存在会报错,创建前先检查是否已存在
import os
file_path = r"E:\aaa\bbb\ccc\ddd\1.txt" #r是路径的转义
folder_path = os.path.dirname(file_path)
if os.path.exists(folder_path): #判断文件夹是否存在
print("文件夹已存在")
else:
os.makedirs(folder_path)
print("创建成功")
with open(file_path,mode="w",encoding="utf-8") as f1:
f1.write("我叫林明均,喜欢编程")
结果:当没有文件夹时候创建文件夹,并提示创建成功,如果有就提示文件夹已存在
- os.renames(src,dst)
- 更改文件夹名称
import os
import shutil
folder_oldpath = r"E:\a"
folder_newpath = r"E:\h"
os.renames(folder_oldpath,folder_newpath)
- os.remove()
- 删除文件,没有文件报错
import os
os.remove(r"E:\1\aaa\bbb\1.pdf")
结果:把1.pdf文件删除
- os.removedirs()
- 删除目录,文件夹必须空才能删除,一般用shutil模块
- os.path.abspath()
- 获取文件的绝对路径
path = os.path.abspath("1.png")
print(path)
结果:
D:\projects\增加打开PDF文件和鼠标操作\增加数据库处理\1.png
- os.path.dirname()
- 获取上级目录
import os
file_path = r"D:\projects\增加打开PDF文件和鼠标操作\增加数据库处理\PyQt5\1.png"
folder_path = os.path.dirname(file_path)
print(folder_path)
结果:
D:\projects\增加打开PDF文件和鼠标操作\增加数据库处理\PyQt5
- os.listdir()
- 获取文件夹下当前所有文件和文件夹,返回列表
import os
file_path = r"D:\projects\增加打开PDF文件和鼠标操作\增加数据库处理\PyQt5"
folder_path = os.listdir(file_path)
print(folder_path)
结果:['.git', '.idea', '1.png', '1.txt', '111.py', '1pdf.pdf', '1tu.png', '2.jpg', '225d32d1e7a556c700a9930378afb93c.jpg']
- os.walk()
- 获取文件夹下面所有文件路径,递归路径下的所有文件夹
import os
folder_path = r"D:\projects\增加打开PDF文件和鼠标操作\增加数据库处理\PyQt5"
folder = os.walk(folder_path)
print(folder)
for a,b,c in folder:
for item in c:
file_path = os.path.join(a,item)
print(file_path)
结果:
打印所有文件路径
D:\projects\增加打开PDF文件和鼠标操作\增加数据库处理\PyQt5\wordtest8.docx
D:\projects\增加打开PDF文件和鼠标操作\增加数据库处理\PyQt5\信息.xlsx
D:\projects\增加打开PDF文件和鼠标操作\增加数据库处理\PyQt5\零死角玩转STM32—F103霸道.pdf
D:\projects\增加打开PDF文件和鼠标操作\增加数据库处理\PyQt5\.git\COMMIT_EDITMSG
D:\projects\增加打开PDF文件和鼠标操作\增加数据库处理\PyQt5\.git\config
- os.path.join()
- 拼接文件路径,文件路径可以用r转义路径,或者路径用双斜杠\\,注意Linux的路径的斜杠//和windows是相反的
import os
path = os.path.join("a","b","c")
print(path)
结果:a\b\c
例2:
获取文件夹下所有文件,包括整个文件夹
import os
folder_path = r"D:\projects\增加打开PDF文件和鼠标操作\增加数据库处理\PyQt5"
file_list = os.listdir(folder_path)
for item in file_list:
file_path = os.path.join(folder_path, item)
print(file_path)
结果:
D:\projects\增加打开PDF文件和鼠标操作\增加数据库处理\PyQt5\.git
D:\projects\增加打开PDF文件和鼠标操作\增加数据库处理\PyQt5\.idea
D:\projects\增加打开PDF文件和鼠标操作\增加数据库处理\PyQt5\1.png
D:\projects\增加打开PDF文件和鼠标操作\增加数据库处理\PyQt5\1.txt
- os.path.isdir()
- 判断路径是一个文件夹
- os.path.isfile()
- 判断路径是一个文件
- os.path.basename()
- 获取文件路径的文件名称
file_path = r"E:\test\stm32.pdf"
file_name = os.path.basename(file_path)
print(file_name)
结果:
SMT32.pdf