# 模块

## 内置模块

### 和编译器相关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