Python数据分析必备知识(1)_python数据分析掌握什么
liuian 2025-08-31 03:57 30 浏览
1.重定向终端输出内容
使生成的结果移动到其他位置
# 重定向, 使生成的结果移动到其他位置
import sys
sys.stderr = sys.stdout
print(dir(sys)) # ,,,,,'__stderr__', '__stdin__', '__stdout__',,,,,,
# 使用场景:脚本上线时,想要把输出结果和错误记录保存成log,方便查看。
"""
stdout用于print()和状态表达式的结果输出,及input()的瞬时输出
"""
import sys
# 将当前默认输出路径保存为__str
__stout__ = sys.stdout
# 将后续print输出结果直接写入在对应的文件
sys.stdout = open('log_test.txt','a')
print('输出结果到log_test.txt文件里')
"""
stderr与stdout一样,用于重定向错误至某个文件
"""
# 将当前的错误输出结果错误为__stderr__
__stderr = sys.stderr
# 将后续的报错信息写入对应的文件中
sys.stderr = open('errorlog.txt','a')
import traceback
try:
10/0
except:
traceback.print_exc()示图
2. 获取当前文件夹的方法
"""
获取当前文件夹的方法
"""
import os
# 获取当前文件所在位置的方法
print(os.path.abspath(__file__))
# 获取当前文件所在文件夹的方法
print(os.path.dirname(os.path.abspath(__file__)))
# 拼接路径,在当前文件所在文件夹位置下再加一个test文件夹
print(os.path.join(os.path.dirname(os.path.abspath(__file__)),'test'))
# 拼接路径,在当前文件所在文件夹位置下再加一个test.py文件
print(os.path.join(os.path.dirname(os.path.abspath(__file__)),'test.py'))
# 获取当前文件名
# 获取当前文件的文件名
print(os.path.basename(os.path.abspath(__file__)))
# 获取当前文件所在的文件夹的文件名
print(os.path.basename(os.path.dirname(os.path.abspath(__file__))))
# 创建递归文件夹 exist_ok =True 存在就不创建
# 在当前文件路径下创建和此脚本平行的文件夹B
os.makedirs('C',exist_ok=True)
# 获取当前文件路径和文件所在的文件夹名
folder_path,file_name = os.path.split(os.path.abspath(__file__))
# 当前文件夹路径
print(folder_path)
# 当前文件名
print(file_name)示图
3.判断LIST为空的简便方法
"""
判断list为空的简便方法
"""
list1 = [1]
list2 = []
if list1:
print('list1有数据')
if list2:
pass
else:
print('list2没数据')示图
4.如何用一套脚本执行两套逻辑
"""
如何用一套脚本执行两套逻辑
"""
# 如果isONE为True,执行逻辑一;如果isONE为False,执行逻辑二
isONE = True
try:
if isONE:
print('执行逻辑一')
else:
print('执行逻辑二')
except:
print('启动失败')示例:
5.如何用PANDAS修改EXCEL表里面某一列的值
"""
如何修改pandas某一列的值
"""
import pandas as pd
# 此次需要安装pandas和xlrd,openpyxk模块,尤其注意高版本的xlrd模块依旧支持读取.xls文件。
# 安装pandas包 pip install pandas # 用0.25.3版本演示
# 网上推荐1.2.0版本 pip install xlrd ==1.2.0 执行此命令安装不上时,可以尝试用conda环境
# openpyxl安装 pip install openpyxl
file_path = r'./demo5.xlsx'
table = pd.read_excel(file_path)
#
# # 方式一
table['测试3'] = '5'
print(table)
print(table['测试3'].dtype) # object
# 方法二
for i in range(len(table['测试4'])):
table['测试4'][i] = '6'
print(table['测试4'].dtype) # int64
# 或者
# for i in range(table.shape[0]):
# table['测试4'][i] = '6'
# 方法二适合里面有不同情况,加if时用
file_path = r'demo5.1.xlsx'
table.to_excel(file_path,index=False)示图
6. DATAFRAME数组里面时间列有0的逻辑转换
"""
调整pandas里面是列的时间
"""
import os
import datetime
import pandas as pd
file_path = r'./demo6.xlsx'
a = pd.read_excel(file_path)
print(a) # 可以看到生产日期这一列有三种格式
print(a['生产日期'].dtype) # object
for i in range(len(a['生产日期'])):
# 如果为0,修改为19000101
if a['生产日期'][i]== 0:
a['生产日期'][i] = datetime.datetime.strptime('19000101','%Y%m%d')
# 如果是8位,转成时间格式
elif len(str(a['生产日期'][i])) == 8:
temp = datetime.datetime.strptime(str(a['生产日期'][i]),'%Y%m%d')
a['生产日期'][i] = pd.Timestamp(temp)
# 本来就是%y-%m-%d %h:%m:%s'的,不做处理
else:
pass
file_path = r'./demo6.1.xlsx'
if (os.path.exists(file_path)):
os.remove(file_path)
a.to_excel(file_path,index=False)
print(a['生产日期'].dtype) # object示图
7.DATAFRAME里面的时间转换
"""
时间转换脚本
strptime 按照特点时间格式将字符串转换(解析)为时间类型
strftime 将时间格式化,转字符串
parser.parse 字符串转成时间格式
"""
import pandas as pd
import datetime
from dateutil import parser
# 打印当前时间
print('打印当前时间:',datetime.datetime.now())
print('打印当前时间类型:',type(datetime.datetime.now()))
# 将当前时间转成字符串
print('当前时间转成字符串:',datetime.datetime.now().strftime('%Y%m%d'))
print('查看当前时间转成字符串后的类型',type(datetime.datetime.now().strftime('%Y%m%d')))
# 字符串转时间
a = '2022/12/30'
print('a:',a)
print('a的类型',a)
b = parser.parse(a)
print('b:',b)
print('查看b的类型',type(b))
print('用时间戳转a',pd.Timestamp(a))
c = '19000101'
print('用strptime转成时间类型',datetime.datetime.strptime(c,'%Y%m%d'))
print('获取当前时间的年月日',datetime.datetime.now().date())
print('获取当前时间的年',datetime.datetime.now().year)
print('获取当前时间的月',datetime.datetime.now().month)示图
8. 日期的取整逻辑
"""
日期取整的方式
python timedela() 和 relativedelta()的区别
在挖掘特征时,往往需要按照说几句段来统计特征,例如最近一个月、最近三个月、最近半年、最近一年 某用户的行为数据,那么如何计算筛选这些时间点
1.timedelta() 函数仅支持days和weeks参数
2.relativedelta() 函数可以支持年、月、日、周、时、分、秒参数
"""
import datetime
import pandas as pd
from dateutil.relativedelta import relativedelta
# 当前时间
print(datetime.datetime.now())
# 当前时间加2个月
print(datetime.datetime.now() + relativedelta(months=2))
print('当前时间的字符串形式',datetime.datetime.now().strftime('%Y%m%d'))
# 获取2022年1月1日到2023年3月1日的时间
start_time = '20220101'
end_time = '20230301'
print(datetime.datetime.strptime(start_time,'%Y%m%d') - datetime.datetime.strptime(end_time,'%Y%m%d'))
# 获取开始到结束的间隔月份
print(datetime.datetime.strptime(end_time,'%Y%m%d').date() - datetime.datetime.strptime(start_time,'%Y%m%d').date())
# 方法一
start_time = pd.Timestamp(start_time)
for i in range(5):
start_time = start_time + relativedelta(days=90)
print('for循环的时间的范围',start_time)
# 重点:这个5如何确定呢
start_time = '20220101'
start_time_year = datetime.datetime.strptime(start_time,'%Y%m%d').year
start_time_month = datetime.datetime.strptime(start_time,'%Y%m%d').month
end_time = datetime.datetime.strptime(end_time,'%Y%m%d').date()
end_time_year = end_time.year
end_time_month = end_time.month
print(start_time_year,start_time_month,end_time_year,end_time_month)
intermonth = 3
# // 和 / 和 % 均表示的做除法运算
"""
5 / 2 ------> 2.5 正常除
5 // 2 ------> 2 取整
5 % 2 ------> 1 取余
"""
print('取','3//2',3//2,'2//2',2//2,'1//2',1//2)
if start_time_year == end_time_year:
number = (end_time_month - start_time_month) // intermonth
print('同年间隔',number)
else:
interyear = end_time_year - start_time_year
number = (interyear * 12 + (end_time_month - start_time_month)) // intermonth
print('跨年间隔',number)
# 方法二
start_time = '20220101'
start_time = pd.Timestamp(start_time)
while True:
start_time = start_time + relativedelta(days=90)
print('while的时间范围',start_time)
if start_time > pd.Timestamp(end_time):
break示图
9.解压当前压缩包下所有文件
"""
压缩问题
shutil.copyfilreobj() 将源文件file-like对象的内容复制到目标file-like对象的方法
"""
import os
import shutil
from zipfile import ZipFile
print('获取当前文件路径',os.path.abspath(__file__))
# 获取当前文件路径 E:\data_analysis\date_analysis_commbat_code\demo9\demo9.py
print('获取当前文件的文件夹名',os.path.dirname(os.path.abspath(__file__)))
# 获取当前文件的文件夹名 E:\data_analysis\date_analysis_commbat_code\demo9
# encode() 原文件转二进制
# decode() 二进制转原文本
def deep_unzip(zip_file):
"""
递归解压缩并去除目录层级(平铺)
:param zip_file:
:return:
"""
with ZipFile(zip_file) as f_zip:
for zip_file in f_zip.namelist():
try:
zip_path_cn = zip_file.encode('cp437').decode('gbk')
except UnicodeError:
zip_path_cn = zip_file.encode('utf-8').decode('utf-8')
filename = os.path.basename(zip_path_cn)
if not filename:
continue
try:
if filename.endswith('.zip'):
deep_unzip(f_zip.open(zip_file))
else:
with open(os.path.join(os.path.dirname(os.path.abspath(__file__)),filename),'wb') as f:
shutil.copyfileobj(f_zip.open(zip_file),f)
except:
pass
zip_file= r'E:\data_analysis\date_analysis_commbat_code\demo9\testfolder.zip'
deep_unzip(zip_file)示图
10.在PYTHON中定义函数限定格式有用吗
"""
Python 定义函数演示限定格式有用吗?
会标黄
不会影响输出,但是日常习惯得培养,如果继承关系多了,很难调试
"""
def test(a:str,b:dict):
print(type(a),type(b))
test(1,2)
test('张三','李四')
test(True,True)
test('1',{})示图
11.PYTHON的传参技巧
"""
传参部分
多个参数时,只想改变个别参数时,可以把其他字段设为默认值,当你传入新值时,替换掉默认值
"""
def test1(a,b,c,d):
print(a)
# test1(5) ypeError: test1() missing 3 required positional arguments: 'b', 'c', and 'd'
def test2(a=None,b=None,c=None,d=2):
print(a)
test2(5) # 512.DATAFRAME生成新表的两种方式(行读和列替换)
"""
pandas的常见操作(一)
excel分析有两种方法,一种是行读,逐行读取生成新表;另一种是列读,更换列名即可。
"""
import pandas as pd
table_a = pd.DataFrame([['111','222','3333','4444']]*3,columns=['A','B','C','D'])
print('table_a表为')
print(table_a)
# 张三的数据来源于A的前两位,李四的数据来源于C的前三位,王五的数据来源于D列的前四位
table_b = pd.DataFrame(columns=['A','B','C'],dtype=object)
# 因为pandas版本问题,可能报AttributeError: type object 'object' has no attribute 'dtype'故加 dtype=object
# 行替换
for i in range(table_a.shape[0]):
table_b.loc[i] = {'A':table_a['A'][i][:2],
'B':table_a['B'][i],
'C':table_a['C'][i]}
print('table_b为')
print(table_b)
# 列替换
# 方式一
table_a.rename(columns={'A':'替换a列','B':'替换b列','D':'替换d列'},inplace=True)
print('列替换方式一')
print(table_a)
# 方式二
table_c = table_a.rename(columns={'A':'替换a列','C':'替换c列','D':'替换d列'})
print('列替换方式二')
table_c = table_c[['替换a列','替换c列','替换d列']]
print(table_c)
# 方式三
# 批量列替换
table_a.columns = table_a.columns.str.replace('替换a列','AAA')
print('列替换方式三')
print(table_a)示图
13.必会的时间转换函数PARSER
"""
pandas异常时间处理函数parser
"""
from dateutil import parser
a_time = '19991231'
print('a_time',parser.parse(a_time))
print('a_time的类型',type(parser.parse(a_time)))
b_time = '1999/12/1'
print('b_time',parser.parse(b_time))
print('b_time的类型',type(parser.parse(b_time)))
c_time = '1999-12-1'
print('c_time',parser.parse(c_time))
print('c_time的类型',type(parser.parse(c_time)))
# 再调用datatime进行加工
from datetime import datetime
a_time1=parser.parse(a_time)
print('对a_time1进行格式化',a_time1.strftime('%Y/%m/%d'))
print('对a_time1进行格式化',a_time1.strftime('%Y/%m/%d %H:%M:%S'))
print('对a_time1进行格式化类型',type(a_time1.strftime('%Y/%m/%d %H:%M:%S')))
b_time1=parser.parse(b_time)
print('对b_time1进行格式化',datetime.strftime(b_time1,'%Y/%m/%d'))
print('对b_time1进行格式化',datetime.strftime(b_time1,'%Y/%m/%d %H:%M:%S'))示图
14.必会的批量处理函数APPLY
"""
pandas的apply()方法是用来调用一个函数,让此函数对数据对象进行批量处理
apply可以调用pandas的很多对象,如Datafrma,Series,分组对象,各种时间序列等等。
apply()使用时,通常放入匿名函数lambda的函数表达式,或一个含作为操作运算。
"""
import numpy as np
import pandas as pd
df1 = pd.DataFrame([[4,9]]*3,columns=['第一列','第二列'])
print('df1')
print(df1)
df2 = df1.apply(np.sum,axis=1)
print('df2,行统计')
print(df2)
# 等价于
df3 = df1.apply(lambda x:np.sum(x),axis=1)
print('df3等价于df2')
print(df3)
df4 = df1.apply(np.sum)
print('df4,默认列统计')
print(df4)
# 等价于
df5 = df1.apply(lambda x:np.sum(x))
print('df5等价于df4')
print(df5)示图
15.当一列数据中,既有时间类型,又有其他类型,如何转成统一的时间类型?
# 经典案例:某一列中既有时间类型,又有object类型时,如何处理
import pandas as pd
from dateutil import parser
file_path = r'demo15.xlsx'
table = pd.read_excel('demo15.xlsx')
print(table)
print(table['生产日期'].dtypes)
# 编写一个函数 若为时间格式,不做处理;否则,变成时间格式
def datefortmat(x):
try:
# 判断是否为int类型,如果是,转成str
if isinstance(x,int):
x= str(x)
result = parser.parse(x)
except:
pass
result = x
return result
table['生产日期'] = table['生产日期'].apply(datefortmat)
print(table)
print(table['生产日期'].dtypes)示图
16.获取最新的文件名并重命名
"""
获取最新的文件名并重命名
"""
import os
folder_path = r'E:\data_analysis\date_analysis_commbat_code\demo16'
print(os.listdir(folder_path))
"""
os。path.getmtime() 获取文件最后修改时间
os.path.getctime() 获取文件最后创建时间
"""
file_path = r'E:\data_analysis\date_analysis_commbat_code\demo16\test1'
print(os.path.getmtime(file_path))
file_path = r'E:\data_analysis\date_analysis_commbat_code\demo16\test2'
print(os.path.getctime(file_path))
# 获取当前文件夹的路径
a = os.path.dirname(os.path.abspath(__file__))
print(a)
# 遍历该目录下的文件夹
for i in os.listdir(a):
print(i)
# 遍历该文件夹下的每个文件
find_file = [a + '\\' + i for i in os.listdir(a)]
# 获取该目录下最后创建文件的时间
print(find_file)
for i in find_file:
print(os.path.getctime(i))
# 选出这四个个文件中最早创建的文件
pioneer = max(find_file,key=os.path.getctime)
print(pioneer)
# 选出这四个个文件中最晚创建的文件
later = min(find_file,key=os.path.getctime)
print(later)
# 获取最新修改的文件
print(max(find_file,key=os.path.getmtime))
# 获取最后修改的文件
print(min(find_file,key=os.path.getmtime))
# 把最新修改的文件换个名字demo_test16.py
need_file = max([a + '\\' + i for i in os.listdir(a)],key=os.path.getmtime)
print('最新修改的文件',need_file)
print(a)
new_file = os.path.join(a,'test_demo16.py')
os.rename(need_file,new_file)
print(os.listdir(a))示例
17 代码中常见的R和F。(书写文件路径的三种方式)
"""
r和f
"""
# r 主要用在路径上,保证路径读取时不能漏读
import os
file_path = r'E:\data_analysis\date_analysis_commbat_code\demo16\test17.py'
print(file_path)
# 不加r时还可以两种方式表示路径
# 方式一
file_path1 = 'E:\\data_analysis\\date_analysis_commbat_code\\demo16\\test17.py'
print(file_path1)
# 方式二
file_path2 = 'E:/data_analysis/date_analysis_commbat_code/demo16/test17.py'
print(file_path2)
print(os.path.dirname(file_path2))
# f'xxx'的含义:在字符串前加f是把字符串格式化,使可以在字符串中直接使用变量
a = 'Python'
print(f'测试 {a}')示图
18.捕获异常RAISE。(断言)
"""
捕获异常raise
常用的方式
1.单独raise,该语句引发当前上下文中捕获的异常,或默认引发RuntimeError异常
2. raise + 异常类名称: 表示依法执行类型的异常
3.raise + 异常类名称+ (描述信息):在引发指定类型的异常的同时,附带异常的描述信息
"""
try:
a = input('请输入一个数字:')
# S.isdigit()返回的是布尔值:True False
# S中至少有一个字符且如果S中的所有字符都是数字,那么返回结果就是True;否则,就返回False
# isalpha() 用于判断字符串的类型
if (not a.isdigit()):
print('不是数字')
raise ValueError('a 必须是数字')
except ValueError as e:
# 除了字符串类型外,使用str还是repr转换没有什么区别。
# 对于字符串类型,repr转换后外层会多一对引号,这一特性有时候在eval操作时有用。
# 命令行下直接输出对象调用的是对象的repr方法,而print输出调用的是str方法
print('引发异常',repr(e))
class PrintError(Exception):
pass
try:
a = input('请输入一个数字:')
b = a + '11'
if b != 15:
raise PrintError('请重新输入')
except Exception as e:
print(e)示例
19.常见的NOT、AND、OR的优先级问题
"""
not 、and 、or 的优先级问题
优先级:not>and>or
"""
a = True
b = False
c = False
if a and not b and a or b:
print('为真')
if a or b and c:
print('为真')
if a and not b:
print('为真')
# 测试带括号有效果吗 ----有
if not a and b or c :
print('为真')
else:
print('为假')
print('&'*30)
if not (a and b) or c :
print('为真')
else:
print('为假')示图
20.删除文件下所有文件
"""
删除文件夹下所有文件
"""
import os
# 获取需要删除的文件夹
print(os.path.join(os.path.dirname(os.path.abspath(__file__)),'test'))
floder_path =os.path.join(os.path.dirname(os.path.abspath(__file__)),'test')
def del_file(path):
ls = os.listdir(path)
for i in ls:
c_path = os.path.join(path,i)
if os.path.isdir(c_path): # 如果是文件夹,递归调用
del_file(c_path)
else:
os.remove(c_path) # 如果是文件,直接删除
return
del_file(floder_path)示图
相关推荐
-
- 驱动网卡(怎么从新驱动网卡)
-
网卡一般是指为电脑主机提供有线无线网络功能的适配器。而网卡驱动指的就是电脑连接识别这些网卡型号的桥梁。网卡只有打上了网卡驱动才能正常使用。并不是说所有的网卡一插到电脑上面就能进行数据传输了,他都需要里面芯片组的驱动文件才能支持他进行数据传输...
-
2026-01-30 00:37 liuian
- win10更新助手装系统(微软win10更新助手)
-
1、点击首页“系统升级”的按钮,给出弹框,告诉用户需要上传IMEI码才能使用升级服务。同时给出同意和取消按钮。华为手机助手2、点击同意,则进入到“系统升级”功能华为手机助手华为手机助手3、在检测界面,...
- windows11专业版密钥最新(windows11专业版激活码永久)
-
Windows11专业版的正版密钥,我们是对windows的激活所必备的工具。该密钥我们可以通过微软商城或者通过计算机的硬件供应商去购买获得。获得了windows11专业版的正版密钥后,我...
-
- 手机删过的软件恢复(手机删除过的软件怎么恢复)
-
操作步骤:1、首先,我们需要先打开手机。然后在许多图标中找到带有[文件管理]文本的图标,然后单击“文件管理”进入页面。2、进入页面后,我们将在顶部看到一行文本:手机,最新信息,文档,视频,图片,音乐,收藏,最后是我们正在寻找的[更多],单击...
-
2026-01-29 23:55 liuian
- 一键ghost手动备份系统步骤(一键ghost 备份)
-
步骤1、首先把装有一键GHOST装系统的U盘插在电脑上,然后打开电脑马上按F2或DEL键入BIOS界面,然后就选择BOOT打USDHDD模式选择好,然后按F10键保存,电脑就会马上重启。 步骤...
- 怎么创建局域网(怎么创建局域网打游戏)
-
1、购买路由器一台。进入路由器把dhcp功能打开 2、购买一台交换机。从路由器lan端口拉出一条网线查到交换机的任意一个端口上。 3、两台以上电脑。从交换机任意端口拉出网线插到电脑上(电脑设置...
- 精灵驱动器官方下载(精灵驱动手机版下载)
-
是的。驱动精灵是一款集驱动管理和硬件检测于一体的、专业级的驱动管理和维护工具。驱动精灵为用户提供驱动备份、恢复、安装、删除、在线更新等实用功能。1、全新驱动精灵2012引擎,大幅提升硬件和驱动辨识能力...
- 一键还原系统步骤(一键还原系统有哪些)
-
1、首先需要下载安装一下Windows一键还原程序,在安装程序窗口中,点击“下一步”,弹出“用户许可协议”窗口,选择“我同意该许可协议的条款”,并点击“下一步”。 2、在弹出的“准备安装”窗口中,可...
- 电脑加速器哪个好(电脑加速器哪款好)
-
我认为pp加速器最好用,飞速土豆太懒,急速酷六根本不工作。pp加速器什么网页都加速,太任劳任怨了!以上是个人观点,具体性能请自己试。ps:我家电脑性能很好。迅游加速盒子是可以加速电脑的。因为有过之...
- 任何u盘都可以做启动盘吗(u盘必须做成启动盘才能装系统吗)
-
是的,需要注意,U盘的大小要在4G以上,最好是8G以上,因为启动盘里面需要装系统,内存小的话,不能用来安装系统。内存卡或者U盘或者移动硬盘都可以用来做启动盘安装系统。普通的U盘就可以,不过最好U盘...
- u盘怎么恢复文件(u盘文件恢复的方法)
-
开360安全卫士,点击上面的“功能大全”。点击文件恢复然后点击“数据”下的“文件恢复”功能。选择驱动接着选择需要恢复的驱动,选择接入的U盘。点击开始扫描选好就点击中间的“开始扫描”,开始扫描U盘数据。...
- 系统虚拟内存太低怎么办(系统虚拟内存占用过高什么原因)
-
1.检查系统虚拟内存使用情况,如果发现有大量的空闲内存,可以尝试释放一些不必要的进程,以释放内存空间。2.如果系统虚拟内存使用率较高,可以尝试增加系统虚拟内存的大小,以便更多的应用程序可以使用更多...
-
- 剪贴板权限设置方法(剪贴板访问权限)
-
1、首先打开iphone手机,触碰并按住单词或图像直到显示选择选项。2、其次,然后选取“拷贝”或“剪贴板”。3、勾选需要的“权限”,最后选择开启,即可完成苹果剪贴板权限设置。仅参考1.打开苹果手机设置按钮,点击【通用】。2.点击【键盘】,再...
-
2026-01-29 21:37 liuian
- 平板系统重装大师(平板重装win系统)
-
如果你的平板开不了机,但可以连接上电脑,那就能好办,楼主下载安装个平板刷机王到你的个人电脑上,然后连接你的平板,平板刷机王会自动识别你的平板,平板刷机王上有你平板的我刷机包,楼主点击下载一个,下载完成...
- 联想官网售后服务网点(联想官网售后服务热线)
-
联想3c服务中心是联想旗下的官方售后,是基于互联网O2O模式开发的全新服务平台。可以为终端用户提供多品牌手机、电脑以及其他3C类产品的维修、保养和保险服务。根据客户需求层次,联想服务针对个人及家庭客户...
- 一周热门
- 最近发表
- 标签列表
-
- python判断字典是否为空 (50)
- crontab每周一执行 (48)
- aes和des区别 (43)
- bash脚本和shell脚本的区别 (35)
- canvas库 (33)
- dataframe筛选满足条件的行 (35)
- gitlab日志 (33)
- lua xpcall (36)
- blob转json (33)
- python判断是否在列表中 (34)
- python html转pdf (36)
- 安装指定版本npm (37)
- idea搜索jar包内容 (33)
- css鼠标悬停出现隐藏的文字 (34)
- linux nacos启动命令 (33)
- gitlab 日志 (36)
- adb pull (37)
- python判断元素在不在列表里 (34)
- python 字典删除元素 (34)
- vscode切换git分支 (35)
- python bytes转16进制 (35)
- grep前后几行 (34)
- hashmap转list (35)
- c++ 字符串查找 (35)
- mysql刷新权限 (34)
