6. 使用python将多个Excel文件合并到同一个excel-附代码解析

【目录】

文章目录

  • 6. 使用python将多个Excel文件合并到同一个excel-附代码解析
    • 1. 目标任务
    • 2. 结果展示
    • 3. 代码示例
    • 4. 代码解析
      • 4.1 导入库
      • 4.2 调用库的类、函数、变量语法
      • 4.3 os.listdir-返回目录中的文件名列表
      • 4.4 startswith-用于判断一个字符串是否以指定的前缀开头
      • 4.5 endswith-用于判断一个字符串是否以指定的后缀结束
      • 4.6 列表名.append向列表中增加元素
      • 4.7 pd.read_excel读取Excel文件
      • 4.8 将读取到的Excel数据添加到列表里
      • 4.9 pd.concat合并Pandas数据
      • 4.10 DataFrame.to_excel-将 DataFrame 保存为 excel 文件
      • 4.11 DataFrame.shape-查看 DataFrame 的行数和列数。
    • 5. 总结

【正文】

6. 使用python将多个Excel文件合并到同一个excel-附代码解析

1. 目标任务

某文件夹中有如下5个Excel:

在这里插入图片描述
在这里插入图片描述

销售表-1月.xlsx的内容如下:

在这里插入图片描述

5个Excel仅数据不一致,框架内容相同。

目标任务是将5个Excel合并成一个Excel。

2. 结果展示

在这里插入图片描述

3. 代码示例

源代码文件:6.合并多个Excel.py

import pandas as pd
import os
data_list = []# os.listdir(".")返回目录中的文件名列表
# 用for循环遍历文件名列表中的每个文件名,赋值给变量filename
for filename in os.listdir("."):# 判断文件名是否以"销售表-"开头并且以".xlsx"结尾if filename.startswith("销售表-") and filename.endswith(".xlsx"):# pd.read_excel(filename)读取Excel文件,返回一个DataFrame对象# 列表名.append将DataFrame写入列表data_list.append(pd.read_excel(filename))# concat合并Pandas数据
data_all =pd.concat(data_list)
# 将 DataFrame 保存为 excel 文件
data_all.to_excel("年度销售表.xlsx",index=False)# 查看 DataFrame 的行数和列数。
rows = data_all.shape
print("查看行数与列数:", rows)
print("恭喜你,合并完成!")

【终端输出】

查看行数与列数: (25, 4)
恭喜你,合并完成!

4. 代码解析

4.1 导入库

import pandas as pd

导入pandas库,并将其别名设置为pd

as是一个关键字,用于给导入库指定一个别名。

别名的作用是引用pandas库中的函数和类,不必每次都写完整的pandas,可以用别名pd代替。

import os

导入os库,os库用于操作文件和目录。

data_list = []

创建一个空列表,用于存储后面读取的Excel数据。

4.2 调用库的类、函数、变量语法

  • 调用库的类:库名.类名( ),如 csv.DictReader()
  • 调用库的函数:库名.函数名( ),如 os.mkdir()
  • 调用库的变量:库名.变量名,如 os.name

【总结】

  • 不管调用什么,库名后都需要紧跟一个英文小圆点.
  • 调用类和函数需要加英文圆括号( )
  • 调用变量不用加英文圆括号( ),因为变量没有参数可以传递。

4.3 os.listdir-返回目录中的文件名列表

listdir()是一个Python的内置函数,用于返回指定目录中所有文件和文件夹名称的列表。

【语法】

os.listdir(path)

【参数】

path[pɑːθ]:路径。

path表示路径,指文件和文件夹的目录路径。

path可以是相对路径或绝对路径。

【返回值】

返回的数据类型是列表。

列表中的每个元素都是字符串类型。

如果指定的路径不存在或不是一个目录,则会引发OSError异常

【相对路径】

import os
os.listdir(".")

【终端输出】

['1.ipynb','销售表-1月.xlsx','销售表-2月.xlsx','销售表-3月.xlsx','销售表-4月.xlsx','销售表-5月.xlsx']
  • os是库名。
  • .英文小圆点,库后接一个小圆点表示调用。
  • listdir函数名,作用是返回目录中所有文件和文件夹名称的列表。
  • 英文圆括号( )
  • ".",这里的表示当前工作目录。

【绝对路径】

import os
os.listdir("D:\安迪笔记\Excel合并")

【终端输出】

['1.ipynb','年度销售表.xlsx','销售表-1月.xlsx','销售表-2月.xlsx','销售表-3月.xlsx','销售表-4月.xlsx','销售表-5月.xlsx']

上述代码中的.也可以换成绝对路径"D:\安迪笔记\Excel合并"

"D:\安迪笔记\Excel合并"是我表格文件的存储路径,你需要换成你的路径。

os库的相关知识可参考下面的链接:

72. import 导入标准模块(os模块)

路径的相关知识可参考下面的链接:

67. Python的绝对路径

68. Python的相对路径

for filename in os.listdir("."):print(filename)

【终端输出】

1.ipynb
年度销售表.xlsx
销售表-1月.xlsx
销售表-2月.xlsx
销售表-3月.xlsx
销售表-4月.xlsx
销售表-5月.xlsx
  • os.listdir(".")得到的是一个文件名列表。
  • 用for循环遍历文件名列表中的每个文件名,赋值给变量filename
  • filename的数据类型为字符串类型。
filename = '1.ipynb'
filename = '销售表-1月.xlsx'
filename = '销售表-2月.xlsx'
filename = '销售表-3月.xlsx'
filename = '销售表-4月.xlsx'
filename = '销售表-5月.xlsx'

4.4 startswith-用于判断一个字符串是否以指定的前缀开头

startswith() 是 Python 字符串方法之一,用于判断一个字符串是否以指定的前缀开头

【语法】

string.startswith(prefix, start, end)

string表示一个具体的字符串。

startswith是方法名。

【参数】

  • prefix:必需参数,表示要检查的前缀,可以是一个字符或一个字符串。
  • start:可选参数,指定开始检查的起始位置,默认为 0。
  • end:可选参数,指定结束检查的位置,默认为字符串的长度。

【返回值】

返回一个布尔值,表示字符串是否以指定的前缀开始。

如果字符串以指定的前缀开始,则返回 True;否则返回 False。

【代码示例】

string = "安迪python学习笔记"# 判断字符串是否以安迪开头
# 是输出 True
print(string.startswith("安迪")) # 字符串索引从0开始编号
# 索引2对应字符串的第3个字符
# 从字符串索引为2的位置开始检查
# 判断字符串第3位(包含)之后是否为python
# 是,输出 True
print(string.startswith("python", 2))  # 检查范围为字符串索引2到索引8
print(string.startswith("Python", 2, 8))  # 这里是大写,输出False
print(string.startswith("python", 2, 8))  # 输出 True

【终端输出】

True
True
False
True

【实操练习】

filename = '销售表-1月.xlsx'
print(filename.startswith("销售表-")) 

【终端输出】

True

filename是变量名,数据类型是字符串。

返回True表示字符串以销售表-开头。

filename = '1.ipynb'
print(filename.startswith("销售表-"))

【终端输出】

False

返回False表示字符串不是以销售表-开头。

for filename in os.listdir("."):print(filename.startswith("销售表-"))

【终端输出】

False
True
True
True
True
True

4.5 endswith-用于判断一个字符串是否以指定的后缀结束

【语法】

string.endswith(suffix, start, end)

【参数】

  • suffix:必需参数,表示要检查的后缀,可以是字符串或元组类型。如果是元组,则会依次检查后缀是否包含在元组中的任意一个。
  • start:可选参数,指定开始检查的索引位置,默认为 0,表示从字符串的开头开始。
  • end:可选参数,指定结束检查的索引位置,默认为字符串的长度,表示一直检查到字符串的末尾。

【返回值】

返回一个布尔值,表示字符串是否以指定的后缀结束。

如果字符串以指定的后缀结束,则返回 True;否则返回 False。

【实操练习】

filename = '销售表-1月.xlsx'
print(filename.endswith(".xlsx"))

【终端输出】

True

返回True表示字符串以.xlsx结束。

filename = '1.ipynb'
print(filename.endswith(".xlsx"))

【终端输出】

False

返回False表示字符串不是以.xlsx结束。

for filename in os.listdir("."):print(filename.endswith(".xlsx"))

【终端输出】

False
True
True
True
True
True
if filename.startswith("销售表-") and filename.endswith(".xlsx"):

filenamee.startswith("销售表-")检查文件名是否以销售表-开头。
filename.endswith(".xlsx") 检查文件名是否以.xlsx结尾。
如果文件名符合上述两个条件,则执行以下代码块。

判断文件名是否以"销售表-“开头并且以”.xlsx"结尾

data_list.append(pd.read_excel(filename))

4.6 列表名.append向列表中增加元素

append函数用于在列表的末尾添加一个元素。

【语法】

列表名.append(要添加的元素)

【代码示例1】

data_list  = []
data_list.append("张三")
print(data_list)

【终端输出】

['张三']

【代码示例2】

data_list  = []
for i in range(3):data_list.append(i)
print(data_list)

【终端输出】

[0, 1, 2]

4.7 pd.read_excel读取Excel文件

read_excel是pandas 库中一个方法。

作用是读取 Excel 文件中的数据。

【语法】

pandas.read_excel(io)

read_excel方法提供了许多参数,这里仅介绍一个路径参数。

【参数】

io:要读取的Excel文件的路径(字符串类型)。

【返回值】

返回一个DataFrame对象。

【代码示例】

pd.read_excel('销售表-1月.xlsx')

【终端输出】

日期员工编号员工姓名销售额
0449273001刘一1000
1449283002陈二2000
2449293003张三3000
3449303004李四4000
4449313005王五5000
  • pd库名。
  • .英文小圆点,作用是调用库的方法。
  • read_excel方法名,作用是读取Excel文件。
  • 参数'销售表-1月.xlsx',表示要读取的Excel文件的路径。
print(type(pd.read_excel('销售表-1月.xlsx')))

【终端输出】

<class 'pandas.core.frame.DataFrame'>

返回的是DataFrame对象。

【思路解析】

通过4.5代码我们知道我当前的文件夹里有6个文件,如下所示:

filename = '1.ipynb'
filename = '销售表-1月.xlsx'
filename = '销售表-2月.xlsx'
filename = '销售表-3月.xlsx'
filename = '销售表-4月.xlsx'
filename = '销售表-5月.xlsx'

我的目标任务是要汇总5个Excel表格,因此我用了一个if条件判断语句选取了要汇总的文件路径,排除了不需要汇总的文件路径。

if filename.startswith("销售表-") and filename.endswith(".xlsx"):

filename = '1.ipynb'时,if条件判断语句的结果为False,它不会执行后面的读取Excel代码。

filename = '销售表-1月.xlsx'时,if条件判断语句的结果为True,执行后面的读取Excel代码。

【实操练习】

for filename in os.listdir("."):if filename.startswith("销售表-") and filename.endswith(".xlsx"):data = pd.read_excel(filename)print(data)

【终端输出】

      日期  员工编号 员工姓名   销售额
0  44927  3001   刘一  1000
1  44928  3002   陈二  2000
2  44929  3003   张三  3000
3  44930  3004   李四  4000
4  44931  3005   王五  5000日期  员工编号 员工姓名   销售额
0  44958  3001   刘一  1000
1  44959  3002   陈二  2000
2  44960  3003   张三  3000
3  44961  3004   李四  4000
4  44962  3005   王五  5000日期  员工编号 员工姓名   销售额
0  44986  3001   刘一  1000
1  44987  3002   陈二  2000
2  44988  3003   张三  3000
3  44989  3004   李四  4000
4  44990  3005   王五  5000日期  员工编号 员工姓名   销售额
0  45017  3001   刘一  1000
1  45018  3002   陈二  2000
2  45019  3003   张三  3000
3  45020  3004   李四  4000
4  45021  3005   王五  5000日期  员工编号 员工姓名   销售额
0  45047  3001   刘一  1000
1  45048  3002   陈二  2000
2  45049  3003   张三  3000
3  45050  3004   李四  4000
4  45051  3005   王五  5000

通过pd.read_excel(filename)读取到的数据如上所示。

data = pd.read_excel(filename)
  • data变量名,数据类型为DataFrame
  • pd库名。
  • .英文小圆点,作用是调用库的方法。
  • read_excel方法名,作用是读取Excel文件。
  • 参数filename,表示要读取的Excel文件的路径。

4.8 将读取到的Excel数据添加到列表里

data_list = []
for filename in os.listdir("."):if filename.startswith("销售表-") and filename.endswith(".xlsx"):data_list.append(pd.read_excel(filename))
print(data_list)

【终端输出】

[      日期  员工编号 员工姓名   销售额
0  44927  3001   刘一  1000
1  44928  3002   陈二  2000
2  44929  3003   张三  3000
3  44930  3004   李四  4000
4  44931  3005   王五  5000,       日期  员工编号 员工姓名   销售额
0  44958  3001   刘一  1000
1  44959  3002   陈二  2000
2  44960  3003   张三  3000
3  44961  3004   李四  4000
4  44962  3005   王五  5000,       日期  员工编号 员工姓名   销售额
0  44986  3001   刘一  1000
1  44987  3002   陈二  2000
2  44988  3003   张三  3000
3  44989  3004   李四  4000
4  44990  3005   王五  5000,       日期  员工编号 员工姓名   销售额
0  45017  3001   刘一  1000
1  45018  3002   陈二  2000
2  45019  3003   张三  3000
3  45020  3004   李四  4000
4  45021  3005   王五  5000,       日期  员工编号 员工姓名   销售额
0  45047  3001   刘一  1000
1  45048  3002   陈二  2000
2  45049  3003   张三  3000
3  45050  3004   李四  4000
4  45051  3005   王五  5000]

观察输出结果,注意输出的列表中包含5个列名:日期 员工编号 员工姓名 销售额

data_list.append(pd.read_excel(filename))
  • data_list列表名。

  • .英文小圆点。

  • append函数名,作用是向列表增加元素。

  • pd是库名。

  • read_excel读取 Excel 文件中的数据。

  • filename文件路径。

  • pd.read_excel(filename)得到的是一个DataFrame对象。

4.9 pd.concat合并Pandas数据

concat ()方法用于连接两个或多个数组。

【语法】

pandas.concat(objs, axis=0, join='outer', ignore_index=False)

【参数】

objs:要合并的 Pandas 数据结构,可以是 Series、DataFrame 或者 Panel 对象的列表或字典。
axis:指定合并的轴向,默认为 0,表示按行进行合并;如果设置为 1,表示按列进行合并。
join:指定合并的方式,默认为 ‘outer’,表示按照索引的并集进行合并;如果设置为 ‘inner’,表示按照索引的交集进行合并。
ignore_index:是否忽略原始对象的索引,默认为 False。如果设置为 True,则会创建一个新的整数索引。

【代码示例】

import pandas as pd# 创建两个 DataFrame 对象
df1 = pd.DataFrame({'姓名': ['张三', '李四', '王五'], '性别': ['男', '男', '女']})
df2 = pd.DataFrame({'姓名': ['赵六', '孙七', '周八'], '性别': ['男', '男', '女']})# 按行合并两个 DataFrame
result = pd.concat([df1, df2], axis=0, ignore_index=True)
print(result)

【终端输出】

   姓名 性别
0  张三  男
1  李四  男
2  王五  女
3  赵六  男
4  孙七  男
5  周八  女

上述代码要合并的是DataFrame对象。

【实操练习】

data_all =pd.concat(data_list)
print(data_all)
print(type(data_all))

【终端输出】

      日期  员工编号 员工姓名   销售额
0  44927  3001   刘一  1000
1  44928  3002   陈二  2000
2  44929  3003   张三  3000
3  44930  3004   李四  4000
4  44931  3005   王五  5000
0  44958  3001   刘一  1000
1  44959  3002   陈二  2000
2  44960  3003   张三  3000
3  44961  3004   李四  4000
4  44962  3005   王五  5000
0  44986  3001   刘一  1000
1  44987  3002   陈二  2000
2  44988  3003   张三  3000
3  44989  3004   李四  4000
4  44990  3005   王五  5000
0  45017  3001   刘一  1000
1  45018  3002   陈二  2000
2  45019  3003   张三  3000
3  45020  3004   李四  4000
4  45021  3005   王五  5000
0  45047  3001   刘一  1000
1  45048  3002   陈二  2000
2  45049  3003   张三  3000
3  45050  3004   李四  4000
4  45051  3005   王五  5000
<class 'pandas.core.frame.DataFrame'>

观察输出结果,注意输出的列表中仅包含1个列名:日期 员工编号 员工姓名 销售额

data_all =pd.concat(data_list)

  • data_all变量名,DataFrame对象,存储合并后的数据。
  • pd库名。
  • .英文小圆点。
  • concat方法名,作用是合并Pandas数据。
  • data_list要合并的数据。

4.10 DataFrame.to_excel-将 DataFrame 保存为 excel 文件

【语法】

DataFrame.to_excel(path, index=False)

DataFrame.to_excel将 DataFrame 保存为 excel 文件。

【参数】

path路径参数,将DataFrame保存到指定的路径下。

index可选参数。

index=True,保存索引列。

index=False,不保存索引列。

【实操练习】

data_all.to_excel("年度销售表.xlsx",index=False)
  • data_all变量名,DataFrame对象,存储了合并后的数据。
  • .英文小圆点。
  • to_excel方法名,作用是将 DataFrame 保存为 excel 文件。
  • "年度销售表.xlsx"路径参数,即汇总后Excel文件名。
  • index=False不保存索引列。

运行上面的代码后,当前文件夹下会生成一个名为年度销售表.xlsx文件。

在这里插入图片描述

4.11 DataFrame.shape-查看 DataFrame 的行数和列数。

shape 是 Pandas 库中的 DataFrame 对象的属性。

调用DataFrame.shape 会返回一个元组。

该元组包含两个整数值,分别表示 DataFrame 的行数和列数。

【代码示例】

import pandas as pddata = {'姓名': ['张三', '李四', '王五'],'年龄': [25, 30, 35]}df = pd.DataFrame(data)
print(df)
print(df.shape)  # 输出 (3, 3)

【终端输出】

   姓名  年龄
0  张三  25
1  李四  30
2  王五  35
(3, 2)

元组的3表示DataFrame对象有3行。
元组的2表示DataFrame对象有2列。

注意不包含列索引和行索引。

在这里插入图片描述

【实操练习】

rows = data_all.shape
print("查看行数与列数:", rows)

【终端输出】

查看行数与列数: (25, 4)

【备注】

联系作者回复【6.合并多个Excel】领取源文件和表格。

5. 总结

在这里插入图片描述

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

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

相关文章

React 使用 useRef() 获取循环中所有子组件实例

目录 背景思考实现完整代码&#xff1a;成功运行后的界面如下&#xff1a; 知识点总结uesRef() 作对象处理useImperativeHandle() 父组件操作引入子组件的内部方法最后 背景 之前项目中使用了antd pro 中的 可编辑表格 (EditableProTable)&#xff0c;在页面中表格要经过多层遍…

vue实现表格的动态高度

需求:表格能够根据窗口的大小自动适配页面高度 防抖和节流函数的使用场景是当需要对频繁触发的事件进行限制时,例如: 防抖函数常用于限制用户在短时间内多次触发某一事件,例如搜索框输入并搜索,当用户一直在输入时,我们可以使用防抖函数来避免多次请求搜索结果,减轻服…

【UniApp开发小程序】私聊功能后端实现 (买家、卖家 沟通商品信息)【后端基于若依管理系统开发】

声明 本文提炼于个人练手项目&#xff0c;其中的实现逻辑不一定标准&#xff0c;实现思路没有参考权威的文档和教程&#xff0c;仅为个人思考得出&#xff0c;因此可能存在较多本人未考虑到的情况和漏洞&#xff0c;因此仅供参考&#xff0c;如果大家觉得有问题&#xff0c;恳…

【Flutter】Flutter 使用 infinite_scroll_pagination 实现无限滚动分页

【Flutter】Flutter 使用 infinite_scroll_pagination 实现无限滚动分页 文章目录 一、前言二、安装和基本使用1. 添加依赖2. 基础配置和初始化 三、实际业务中的用法1. 与 API 集成2. 错误处理 四、完整示例1. 创建一个无限滚动列表2. 使用在你的应用中3. 完整代码示例 五、总…

VSCode如何为远程安装预设(固定)扩展

背景 在使用VSCode进行远程开发时&#xff08;python开发之远程开发工具选择_CodingInCV的博客-CSDN博客&#xff09;&#xff0c;特别是远程的机器经常变化时&#xff08;如机器来源于动态分配&#xff09;&#xff0c;每次连接新的远程时&#xff0c;都不得不手动安装一些开…

Unity - MenuItem特性

MenuItem(string itemName, bool isValidateFunction, int priority) 参数1&#xff1a;菜单名 参数2&#xff1a;是否使用自定义条件控制菜单项是否可点击&#xff0c;默认为false&#xff0c;一般不赋值&#xff0c;需要用的话需要定义两个MenuItem MenuItem 1 : 自定义条件…

Springboot_Redis

Springboot默认使用lettuce操作redis,底层是netty jdeis并发差些 Redis的Template 分为两种, 一种是StringRedisTemplate&#xff0c;另一种是RedisTemplate 根据不同的数据类型&#xff0c;大致的操作也分为这5种&#xff0c;以StringRedisTemplate为例 stringRedisTempla…

软件设计师学习笔记5-流水线技术

目录 1.流水线的概念 2.流水线计算 2.1流水线周期及执行时间 2.2流水线吞吐量 1.流水线的概念 考点&#xff1a;相关参数计算&#xff1a;流水线执行时间计算、流水线吞吐率、流水线加速比、流水线效率(后两者的计算中级不考) 流水线是指在程序执行时多条指令重叠进行操作…

聚类分析 | MATLAB实现基于LP拉普拉斯映射的聚类可视化

聚类分析 | MATLAB实现基于LP拉普拉斯映射的聚类可视化 目录 聚类分析 | MATLAB实现基于LP拉普拉斯映射的聚类可视化效果一览基本介绍程序设计参考资料 效果一览 基本介绍 聚类分析 | MATLAB实现基于LP拉普拉斯映射的聚类可视化&#xff0c;聚类结果可视化&#xff0c;MATLAB程…

Maven的超级POM

对于我们创建的一个maven工程&#xff0c;即便我们自己的pom.xm文件中没有明确指定一个父工程&#xff08;父POM&#xff09;&#xff0c;其实也默认继承了超级POM&#xff0c;就好比JAVA类继承Object类一样。 maven官网关于超级POM的介绍&#xff1a; https://maven.apache.o…

MyBatis plus 多数据源实现

1. 项目背景 最近写文章发布到【笑小枫】小程序和我的个人网站上&#xff0c;因为个人网站用的是halo框架搭建&#xff0c;两边数据结构不一致&#xff0c;导致我每次维护文章都需要两边维护&#xff0c;这就很烦~ 于是&#xff0c;本文就诞生了。通过项目连接这两个数据库&a…

左偏树\可并堆

https://www.luogu.com.cn/problem/P3377 作用&#xff1a;可并堆 形态&#xff1a;堆满二叉树 即左节点最小深度大于等于右节点最小深度 合并过程&#xff1a;

Scikit-learn降维与度量学习代码批注及相关练习

一、代码批注 代码来自&#xff1a;https://scikit-learn.org/stable/auto_examples/decomposition/plot_pca_iris.html#sphx-glr-auto-examples-decomposition-plot-pca-iris-py import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes…

idea连接linux远程docker详细教程操作

1&#xff1a;修改docker配置文件docker.service vi /usr/lib/systemd/system/docker.service2&#xff1a;找到 ExecStart&#xff0c;在最后面添加 -H tcp://0.0.0.0:2375 # for containers run by docker ExecStart/usr/bin/dockerd -H fd:// --containerd/run/containerd/…

F5负载均衡器参与的Kubernetes架构选项介绍

F5负载均衡器在业内有着很高的知名度&#xff0c;因为它不仅是F5的代表作&#xff0c;负载均衡&#xff08;Load Balance&#xff09;这一词汇正是由F5发明并引入国内的。当前&#xff0c;F5的能力不断拓展&#xff0c;从早期聚焦F5负载均衡器到现在的分布式云应用架构&#xf…

Ae 效果:CC Jaws

过渡/CC Jaws Transition/CC Jaws CC Jaws&#xff08;CC 锯齿&#xff09;效果为视频或图像创造独特的锯齿状过渡效果。它允许用户控制中心点、方向、高度、宽度和形状&#xff0c;从而提供多种独特的过渡样式。 ◆ ◆ ◆ 效果属性说明 Completion 完成度 控制过渡效果的完成…

从0到1学会Git(第一部分):Git的下载和初始化配置

1.Git是什么: 首先我们看一下百度百科的介绍:Git&#xff08;读音为/gɪt/&#xff09;是一个开源的分布式版本控制系统&#xff0c;可以有效、高速地处理从很小到非常大的项目版本管理。 也是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。 …

Azure - AzCopy学习

使用 AzCopy 将本地数据迁移到云存储空间 azcopy login 创建存储账号 ./azcopy login --tenant-id 40242385-c249-4746-95dc-4a0b64d49dc5这里的—tenant-id 在下面的地方查看&#xff1a;目录 ID&#xff1b;需要拥有Storage Blob Data Owner 的权限账号下可能会有很多目录&am…

nginx生成自定义证书

1、创建key文件夹 [rootlocalhost centos]# mkdir key 进入key文件夹 [rootlocalhost centos]# cd key/ 2、生成私钥文件 [rootlocalhost key]# openssl genrsa -des3 -out ssl.key 4096 输入这个key文件的密码。不推荐输入&#xff0c;因为以后要给nginx使用。每次reload ngin…

帆软报表系统SSRF

有子曰&#xff1a;“信近于义&#xff0c;言可复也。恭近礼&#xff0c;远耻辱也。因不失其亲&#xff0c;亦可宗也。” SSRF 构造payload&#xff0c;访问漏洞url&#xff1a; /ReportServer?opresource&resourcehttp://x.x.x漏洞证明&#xff1a; 文笔生疏&#xf…