Python
文件读写
XML
import xml.etree.ElementTree as ET对象获取
# 解析XML文件
xml_obj = ET.parse(file_path)
# 解析XML字符串
xml_string = '<root><element>Value</element></root>'元素查找
# 获取XML文档的根元素
xml_root = xml_obj.getroot()
# 查找具有指定标签的第一个子元素
xml_element = xml_root.find('element')
# 查找具有指定标签的所有子元素
xml_elements = xml_root.findall('element')
# 获取元素的名称
element_tag = xml_element.tag
# 获取元素文本内容
element_text = xml_element.text
# 获取元素的所有属性值
element_attr = xml_element.attrib
# 获取元素的指定属性值
element_attribute = xml_element.get('value')元素修改
# 修改节点名称
xml_element.tag = "new_tag"
# 修改节点文本
xml_element.text = "new_text"
# 修改节点文本属性
xml_element.attrib = {}
xml_element.attrib["attribute"] = ""
# 保存文件
xml_obj.write(file_path)元素增加
# 申请一个新的element对象
xml_element = ET.Element('new_xml_element')
# 设置文本名称
xml_element.text = "new_xml_tag"
# 设置属性值
xml_element.set('attribute', 'value')
# 加入节点中
root.append(xml_elements)元素删除
# 删除节点
root.remove(xml_elements)其他
doc = xml.dom.minidom.parse(file_path)
print(doc.getElementsByTagName("title")[0].firstChild.data)
print(doc.getElementsByTagName("original_filename")[0].firstChild.data)NII
!pip install nibabel
import nibabel as nib对象获取
# 导入path路径的nii文件
nii_obj = nib.load(file_path)
# 取得浮点图像数据
nii_data = nii_obj.get_fdata()
# 获得仿射的轴方向代码
nii_orientation = nib.aff2axcodes(nii_affine)
# 应用
import matplotlib.pyplot as plt
def show_slices(slices):
""" 显示一行图像切片 """
fig, axes = plt.subplots(1, len(slices))
for i, slice in enumerate(slices):
axes[i].imshow(slice.T, cmap="gray", origin="lower")
# 获得三个维度的切片
slice_0 = brain_tumor_img_data[(int)(brain_tumor_img_data.shape[0]/2), :, :]
slice_1 = brain_tumor_img_data[:, (int)(brain_tumor_img_data.shape[1]/2), :]
slice_2 = brain_tumor_img_data[:, :, (int)(brain_tumor_img_data.shape[2]/2)]
show_slices([slice_0, slice_1, slice_2])
plt.suptitle("Center slices for brain tumor image")元素修改
# 将SpatialImage实例img保存到文件brain_tumour.nii
nib.save(brain_tumor_img, "brain_tumour.nii")XLSX
import openpyxl对象获取
# 获取xlsx对象
xlsx_obj = openpyxl.load_workbook(file_path)元素查找
# 获取文件页名列表
xlsx_obj_sheet_name = xlsx_obj.sheetnames
# 获取第1页对象
xlsx_obj_sheet = xlsx_obj[xlsx_obj_sheet_name[0]]
# 得到页对象最大行数
xlsx_obj_sheet_row = xlsx_obj_sheet.max_row
# 得到页对象最大页数
xlsx_obj_sheet_col = xlsx_obj_sheet.max_column
# 得到页指定行列的数据(下标从1开始)
xlsx_obj_sheet.cell(1, 1).value元素修改
# 重命名页对象名字
xlsx_obj_sheet.title = new_name_for_sheet
# 页对象指定行列的值
xlsx_obj_sheet.cell(1, 1).value
# 保存xlsx对象
xlsx_obj.save(file_path)元素增加
# 创建一个xlsx对象
save_obj = openpyxl.Workbook()
# 创建一个页对象
save_sheet = save_obj.create_sheet(sheet_name, sheet_idx)ZIP
import zipfile对象获取
# 获取zip文件对象
zip_obj = zipfile.ZipFile(file_path, 'r')
# 关闭zip文件对象
zip_obj.close()元素查找
# 查看zip文件中文件信息
zip_obj.infolist()
# 查看zip文件中文件名称
zip_obj.namelist()
# 通过文件名获取该文件信息
zip_obj.getinfo(filename)元素解压
# 解压zip文件中单个文件
zip_obj.extract(filename, extract_path)
# 解压zip文件中所有文件
zip_obj.extractall(extract_path)
# 以二进制读取zip文件中指定文件
zip_obj.read(filename)元素增加
# 创建zip对象
zip_obj = zipfile.ZipFile(file_path, 'w')
# 将要压缩文件加入zip对象中
zip_obj.write(ori_filepath,
new_filepath,
zipfile.ZIP_STORED(仅存储不压缩)/ZIP_DEFLATED(zip算法)/ZIP_LZMA(lzma))
# 设置文件编码方式(不全???typora特有的写入失败)
zip_obj.comment=st爬虫接口
# 导入模拟报文库
import requests
# 随机响应头
from fake_useragent import UserAgent报文设置
## 要访问网页链接
set_url = "https://"
# 常用UserAgent
User_Agent = [
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11",
"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11",
"Mozilla/5.0 (Linux; Android 10; SM-G981B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.162 Mobile Safari/537.36",
"Mozilla/5.0 (Linux; U; Android 2.2.1; zh-cn; HTC_Wildfire_A3333 Build/FRG83D) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
"Mozilla/5.0 (Linux; U; Android 2.3.7; en-us; Nexus One Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 UBrowser/4.0.3214.0 Safari/537.36",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 UBrowser/6.2.4094.1 Safari/537.36",
"Mozilla/5.0 (Linux; Android 10; SM-G981B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.162 Mobile Safari/537.36",
]
# cookie设置, 可使用str或dict格式
cookie = "MUID=27D...; _EDGE_V=1; SRCHD=AF=NOFORM; SRCHUID=V=2&GUID=8E8...&dmnchg=1; MUIDB=27D...; MicrosoftApplicationsTelemetryDeviceId=59d..."
cookies = {
"MUID": "27D...",
"_EDGE_V": "1",
}
## 设置报文头防止被发现为爬虫
headers = {
# User-Agent: 定义一个真实浏览器的代理名称, 表明自己的身份(是哪种浏览器)
"User-Agent": "Mozilla/5.0 (Linux; Android 10; SM-G981B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.162 Mobile Safari/537.36",
# "User-Agent": UserAgent()., # 🐎的, 逆天typora
"User-Agent": User_Agent[0],
# Accept: 告诉WEB服务器自己接受什么介质类型, */* 表示任何类型
"Accept": "*/*",
# Referer: 浏览器向WEB服务器表明自己是从哪个网页URL获得点击当前请求中的网址/URL
"Referer": "https://www.baidu.com...",
# Connection: 表示是否需要持久连接
# Accept-Language: 浏览器申明自己接收的语言
"Accept-Language": "en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7,zh-TW;q=0.6",
# Accept-Encoding: 浏览器申明自己接收的编码方法,通常指定压缩方法,是否支持压缩,支持什么压缩方法(gzip, deflate)
"Accept-Encoding": "gzip, deflate",
# 附带cookie
'Cookie': cookie
}
## 代理, 尚不清楚原理
proxies = {
"http": "http://127.0.0.1:7890",
"https": "http://127.0.0.1:7890", # https -> http
}
## http附带的参数
params = {
'q' : 'test',
'qs' : 'ds',
'form': 'QBRE',
}
## 实例化session,通过session来发起请求会自动保持会话状态
session = requests.session()
# 构建表单数据
data = {
'username': 'root',
'password': 'FHGOxkHBOH4kOlQ',
}quote&unquote
from urllib.parse import quote, unquote中文转字符
word = '原神'
result = quote(word) # %E5%8E%9F%E7%A5%9E
word = result
result = unquote(word) # 原神报文发送
# 模拟访问, 返回结果为回复报文, 失败则捕获socket报错
try:
response = requests.get(
url, headers=headers, stream=True, verify=False, proxies=proxies, params=params
)
except socket.error as e:
print(e.args.__str__())
# 传入data进行请求
response = session.post(url, headers=headers, data=data)报文解析
# 将回复报文转为字典格式
json_str = json.loads(response.text)| response属性 | 属性含义 |
|---|---|
| response.text | 响应体 str类型 |
| response.content | 响应体 bytes类型 |
| response.status_code | 响应 状态码 |
| response.request.\_cookies | 响应 请求cookie |
| response.cookies | 响应 cookie(经过了set-cookie动作) |
| response.headers | 响应头 |
| response.request.headers | 响应对应的请求头 |
soup模块
# 导入解析回复报文的库
from bs4 import BeautifulSoup报文解析
# 解析回复报文
soup = BeautifulSoup(response.text, "html.parser")内容查找
# 查找特定元素, 返回值为一个列表
item = soup.findAll("div", # 标签名
attrs={"class": "title"} # 具有特定属性的标签
)
# 取得标签对象的内容
item[0].string
item[0].text
# 取得标签对象的属性值
item[0]['id']关闭连接
# 关闭连接?不太清楚用途
requests.session().keep_alive = False
# 关闭多余连接?不清楚
sess = requests.Session()
sess.mount('http://', HTTPAdapter(max_retries=3))
sess.mount('https://', HTTPAdapter(max_retries=3))
sess.keep_alive = False GUI控制
import pyautogui
import pyperclip
import psutil进程操作
# 获取所有正在运行进程的pid
allpids = psutil.pids()
# 根据pid查询进程名称
programe_name = psutil.Process(pid).name()
# 通过给出的程序执行文件地址打开程序
os.startfile(program_dir)System info
| 参数 | 含义 |
|---|---|
| psutil.users() | 查看当前登录的用户信息<br/>name: 用户名<br/>terminal: 终端<br/>host: 主机地址<br/>started: 登录时间<br/>pid: 进程id |
| psutil.boot_time() | 查看系统的启动时间 |
| psutil.test() | 模拟 ps 命令 |
CPU info
| 参数 | 含义 |
|---|---|
| psutil.cpu_count() | CPU的逻辑核心数量 |
| psutil.cpu_count(logical=False) | CPU的物理核心数量 |
| psutil.cpu_times() | 统计 CPU 的用户/系统/空闲时间 |
| psutil.cpu_times_percent() | 统计 CPU 的用户/系统/空闲时间(百分比) |
| psutil.cpu_percent(interval=0.5, percpu=True) | interval: 表示每隔0.5s刷新一次<br/>percpu: 表示查看所有的cpu使用率 |
| psutil.cpu_stats() | 查看 CPU 的统计信息, 包括上下文切换、中断、软中断,以及系统调用次数等等 |
| psutil.cpu_freq() | 查看 CPU 的频率 |
Memory info
| 参数 | 含义 |
|---|---|
| psutil.virtual_memory() | 查看内存使用情况<br/>total: 总内存<br/>available: 可用内存<br/>percent: 内存使用率<br/>used: 已使用的内存 |
| psutil.swap_memory() | 查看交换内存信息 |
Disk info
| 参数 | 含义 |
|---|---|
| psutil.disk_partitions() | 查看磁盘分区、磁盘使用率和磁盘 IO 信息 |
| psutil.disk_usage("C:\") | 查看某个磁盘使用情况 |
| psutil.disk_io_counters() | 查看磁盘 IO 统计信息<br/>read_count: 读次数<br/>write_count: 写次数<br/>read_bytes: 读的字节数<br/>write_bytes: 写的字节数<br/>read_time: 读时间<br/>write_time: 写时间 |
| psutil.disk_io_counters(perdisk=True) | 查看物理磁盘 IO 统计信息 |
Network info
| 参数 | 含义 |
|---|---|
| psutil.net_io_counters() | 查看网卡的网络 IO 统计信息<br/>bytes_sent: 发送的字节数<br/>bytes_recv: 接收的字节数<br/>packets_sent: 发送的包数据量<br/>packets_recv: 接收的包数据量<br/>errin: 接收包时, 出错的次数<br/>errout: 发送包时, 出错的次数<br/>dropin: 接收包时, 丢弃的次数<br/>dropout: 发送包时, 丢弃的次数 |
| psutil.net_io_counters(pernic=True) | 列出所有网卡的信息 |
| psutil.net_if_addrs() | 以字典的形式返回网卡的配置信息, 包括 IP 地址、Mac地址、子网掩码、广播地址等等 |
| psutil.net_if_stats() | 返回网卡的详细信息, 包括是否启动、通信类型、传输速度、mtu |
| psutil.net_connections() | 查看当前机器的网络连接<br/>以列表的形式返回每个网络连接的详细信息<br/>里面接受一个参数, 默认是 "inet", 当然我们也可以指定为其它, 比如 "tcp" |
Program info
| 参数 | 含义 |
|---|---|
| psutil.pid_exists(22333) | 查看某个进程是否存在 |
| psutil.process_iter() | 返回所有进程(Process)对象组成的迭代器 |
| psutil.Process(pid=0) | 根据 pid 获取一个进程对应的 Process 对象 |
| process.name() | 进程名称 |
| process.exe() | 进程的exe路径 |
| process.cwd() | 进程的工作目录 |
| process.cmdline() | 进程启动的命令行 |
| process.pid() | 进程id |
| process.ppid() | 父进程id |
| process.parent() | 父进程 |
| process.children() | 子进程列表 |
| process.status() | 进程状态 |
| process.username() | 进程用户名 |
| process.create_time() | 进程创建时间 |
| process.cpu_times() | 进程使用cpu时间 |
| process.memory_info() | 进程所使用的的内存 |
| process.open_files() | 进程打开的文件 |
| process.connections() | 进程相关的网络连接 |
| process.num_threads() | 进程内的线程数量 |
| process.threads() | 进程内的所有线程信息 |
| process.environ() | 进程的环境变量 |
| process.terminal() | 结束进程, 返回 None |
鼠标操作
# 获取鼠标当前位置
pyautogui.position()
# 点击事件
pyautogui.click(sizex, # 绝对位置x坐标
sizey, # 绝对位置y坐标
duration = 0.5, # 鼠标移动延迟
button='right', # 点击键
clicks = 3, # 点击次数
interval=0.1, # 点击间隔
)
# 鼠标按下
pyautogui.mouseDown(sizex, # 绝对位置x坐标
sizey, # 绝对位置y坐标
button='right', # 按下鼠标右键
)
# 鼠标移动
pyautogui.moveTo(sizex, # 绝对位置x坐标
sizey, # 绝对位置y坐标
)
# 鼠标松开
pyautogui.mouseUp()键盘操作
# 依次按下键
pyautogui.hotkey('ctrl', 'v')复制粘贴
# 将字符串存至剪切板, 粘贴可用pyautogui的键盘操作
pyperclip.copy(copy_str)