news 2026/10/9 14:43:05

Python批量提取视频创建时间并筛选标注Excel删除清单

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python批量提取视频创建时间并筛选标注Excel删除清单

做短视频素材管理的朋友,应该都遇到过这种噩梦:硬盘里堆了几万条视频,运营突然丢过来一句"把三个月前创建的那批直播录像找出来,准备清掉",你打开文件夹一看,根本没法用肉眼判断哪条视频是什么时候创建的,更别提还要在Excel里一条条标出来哪些要删。我最近处理的这个"857"号需求,就是典型的批量视频创建时间筛查任务——把指定区间内创建的视频全部提取出来,在Excel里标注清楚哪些属于待删除文件。这篇文章就手把手拆解整个流程,从文件时间戳的原理到Python脚本实现,再到Excel标注和删除安全策略,一次性讲透。

这个方案不只适用于视频文件。凡是需要按创建时间筛选批量文件的场景,不管是清理监控录像、整理课程切片、归档项目素材,还是审核导出文件的时效性,思路完全一样。

1. 先想清楚:这个需求背后真正要解决的是什么

1.1 标题里的三段需求逐条拆解

把"857-批量视频创建时间在指定区间修改-提取创建时间并在excel中标注需要删除文件"这个标题拆开看,实际包含三个动作:

第一,批量。这不是三五个文件,而是成百上千甚至几万条视频。手动右键看属性再一条条登记,在数量大时完全不现实。第二,创建时间在指定区间。这是筛选条件,比如"2024-01-01到2024-03-31之间创建的文件",时间里藏着业务决策的依据。第三,提取创建时间并在Excel中标注需要删除的文件。这一步是交付物,要让不懂技术的人也能打开Excel就能看懂哪些该删、哪些保留。

仔细读这个标题会发现"指定区间修改"这个表述有点歧义。它可能是指"修改创建时间为指定区间",也可能是指"在指定区间内修改/筛选文件"。结合后半句"提取创建时间并标注需要删除文件"来看,实际场景更接近后者——你并不需要真的去篡改文件时间,而是要把落在指定时间区间内的视频挑出来,标记为待删除。真正的"批量修改创建时间"是另一个完全不同的需求,一般要用专门的工具改NTFS元数据,不在这次讨论范围内。

1.2 为什么不能靠手工硬扛

我见过很多人面对这类需求的第一反应是:打开文件夹,排个序,CTRL+C复制文件列表到Excel,再挨个查属性。小批量几十个文件确实能这样干,但一旦超过500个文件,这种操作就是灾难。

手工操作至少有三个痛点:一是效率极低,每个文件要右键属性、切到详细信息、看创建时间,一个文件十几秒,1000个文件就是三个多小时;二是容易出错,漏看、填错、排错是常态,尤其在文件名相似的时候;三是无法留痕,做完之后没有一份可复核的清单,万一领导问"这批删除的判断依据是什么",你拿不出可回溯的证据。

所以这个项目的核心价值,不只是"把活干完",更是产出一份结构化的、可复核的数据清单。这份Excel本身就是交付物和管理依据,后续审计、复盘都要靠它。

1.3 技术路线怎么选:Python、批处理脚本还是现成软件

做这类批量文件筛查,主流的路线有三条,我直接给结论。

第一条是Python脚本。这是最推荐的方式,尤其是装上pandas和openpyxl之后,遍历文件、提取时间、写Excel一条龙搞定。Python处理几千个文件的元数据库,耗时基本在几秒到十几秒之间,体验远优于手动操作。第二条是PowerShell或批处理。好处是Windows自带的PowerShell不需要装任何环境,直接用Get-ChildItem加Export-Csv也能导出文件列表。缺点是代码可读性差,时间筛选和Excel标注逻辑写起来不如Python顺手,复杂条件一多就容易绕晕。第三条是现成的文件管理软件,比如某些重复文件清理工具或者资源管理器增强插件。这类工具可视化好,但灵活性差——你没法自定义"创建时间区间+Excel标注"这种组合逻辑,也很难把结果合并进自己的工作流。

综合下来,凡是想把这事做成可复用流程的,我都建议走Python路线。哪怕你不太会写代码,照着下面第三节的脚本抄一遍,改几个路径参数就能跑通。

2. 关键前置知识:文件时间戳里藏着哪些坑

2.1 创建时间、修改时间、访问时间,先分清

很多新手在提取"创建时间"的时候会踩坑,因为操作系统里时间不只一个。Windows文件属性里能看到"创建时间"、"修改时间"、"访问时间"三个独立字段。

创建时间:文件在当前磁盘分区上被创建的时间。这是筛选"哪批文件是哪个时间段产生的"最直接的依据。修改时间:文件内容最后一次被写入更改的时间。常用于判断文件是否被改动过。访问时间:文件最后一次被打开读取的时间。这个值在不同系统下更新策略不同,Windows对NTFS分区一般延迟更新,所以可靠性相对差。

用Python取时间戳时,三个字段的接口分别是:

  • os.path.getctime(path) —— 创建时间,对应Windows的CreationTime
  • os.path.getmtime(path) —— 修改时间,对应LastWriteTime
  • os.path.getatime(path) —— 访问时间,对应LastAccessTime

请注意,getctime在Linux和macOS上返回的是"文件状态变更时间",不是创建时间。这是跨平台使用时最容易误解的地方。如果你只在Windows上跑脚本,那没问题;但如果你在macOS上跑同样的代码,结果是错的。所以我在实际项目中,都会在脚本开头加个系统判断,非Windows环境就提示用户改用修改时间逻辑。

2.2 复制与移动会让创建时间"失真"

这一条是实战中的大坑。同一个视频文件,从相机存储卡复制到电脑硬盘,再用U盘拷到另一台电脑,创建时间很可能会变成"复制行为发生的时间",而不是拍摄时间。

具体来说,在Windows资源管理器里用Ctrl+C和Ctrl+V复制文件,系统会给目标位置生成一个新的创建时间,记录的是"复制动作完成的那一刻"。这意味着你可能明明筛的是"三个月前拍的视频",结果创建时间全是"今天"。

怎么判断手里的视频时间可不可信?几个经验值:

  • 用读卡器直接把素材导入电脑,创建时间基本等于拍摄时间(前提是相机文件系统支持时间元数据);
  • 通过网盘、微信、邮件下载的文件,创建时间大概率是下载时间;
  • 用FastCopy、Total Commander等支持保留时间戳的工具复制,可以尽量保住原始时间。

所以在我们项目开工前,我先确认了这批视频是从监控设备直接导出来的,没有二次复制过。如果你不确定自己的文件是否被复制过,建议先小范围抽查几个文件,右键对比属性里的创建时间和拍摄画面水印,再决定用创建时间还是修改时间作为筛选依据。

2.3 指定区间筛选的两种实现思路

明确了时间语义之后,筛选逻辑本身有两种做法。

第一种是先提取全部时间,再在Excel中按区间筛选。这种方式的好处是保留了全量数据,Excel里你想切什么区间都行,不用反复改脚本重新跑。第二种是在Python代码里写死时间区间,只导出区间内的文件。好处是结果文件简洁,但每次换区间都得改代码,不够灵活。

我的建议是先用第一种做一版全量清单,把"视频名、创建时间、修改时间、文件大小、完整路径"全部导出。之后在Excel里用自动筛选或者条件格式来圈定任何时间段。这相当于一次采集,终身复用。后续如果要交付固定格式的报告,再写个轻量脚本从全量Excel里按条件抽数据即可。

3. 整体方案设计与Python实现

3.1 五步流程总览

我实际跑通的流程分五步:

  1. 指定要扫描的视频文件夹路径,支持递归遍历所有子目录;
  2. 用os.walk遍历目录,筛选出视频扩展名(.mp4、.mov、.avi、.mkv、.flv等);
  3. 对每个文件调用os.path.getctime提取创建时间,转成可读的"YYYY-MM-DD HH:MM:SS"格式;
  4. 把全部信息写进pandas的DataFrame,再导出到Excel,同时自动生成"是否删除"的标注逻辑;
  5. 生成一份待删除清单Sheet,并给行标色,便于人工复核。

这五步每一步都不复杂,但组合起来就是一个完整的小工具。以后你手里再来新视频,只要改一下路径参数,重新跑一遍,就能刷新清单。

3.2 环境准备与依赖安装

你需要一个Python 3.8以上的环境,推荐3.10或3.11。如果电脑上还没装Python,建议去官网下载安装包,装的时候勾选"Add Python to PATH",省得后面在命令行找不到命令。

装完Python之后,打开命令行(Windows是CMD或PowerShell,macOS/Linux是终端),运行下面这行命令安装依赖:

pip install openpyxl send2trash

这里openpyxl负责读写Excel,send2trash负责把文件删除到回收站而不是直接抹掉数据,后面删除安全策略会用到。

如果你习惯用pandas,也可以一起装上:

pip install pandas

不过说句实话,这个场景用纯Python的标准库加openpyxl就够了,pandas只是让代码更简洁。我下面给的示例会用pandas,因为处理几千行的DataFrame和导出Excel确实方便,你也更好理解。

3.3 核心代码:遍历目录并提取创建时间

先上一段最核心的文件扫描代码,这个脚本会遍历指定目录,提取视频文件的各项时间信息,并把结果打印出来。

import os import time from datetime import datetime # 要扫描的文件夹,改成你自己的路径 TARGET_DIR = r"D:\video_archive" # 需要过滤的视频扩展名,按需增删 VIDEO_EXTS = {".mp4", ".mov", ".avi", ".mkv", ".flv", ".wmv", ".ts"} records = [] for root, dirs, files in os.walk(TARGET_DIR): for name in files: ext = os.path.splitext(name)[1].lower() if ext not in VIDEO_EXTS: continue full_path = os.path.join(root, name) try: # 获取创建时间戳(Windows下是真正的创建时间) ctime = os.path.getctime(full_path) # 获取修改时间戳 mtime = os.path.getmtime(full_path) except OSError as e: # 部分文件可能权限异常或已被占用 print(f"跳过无法访问的文件: {full_path},错误: {e}") continue # 把时间戳转成可读字符串 create_str = datetime.fromtimestamp(ctime).strftime("%Y-%m-%d %H:%M:%S") modify_str = datetime.fromtimestamp(mtime).strftime("%Y-%m-%d %H:%M:%S") file_size = os.path.getsize(full_path) records.append({ "文件名": name, "完整路径": full_path, "创建时间": create_str, "修改时间": modify_str, "大小MB": round(file_size / (1024 * 1024), 2) }) print(f"扫描完成,共找到 {len(records)} 个视频文件。")

这段代码有几个细节值得解释:

os.walk会递归遍历所有子目录,所以不管你的视频是散落在根目录还是分门别类放在子文件夹里,都能扫到。os.path.splitext(name)[1].lower()把扩展名转成小写再比对,防止出现".MP4"和".mp4"混用导致漏筛的情况。每个文件的访问做了try/except兜底,因为实际文件夹里总会遇到某些文件名格式怪癖或者被其他进程占用的文件,不能让一个异常中断整个扫描。

3.4 区间筛选与Excel标注:完整示例

扫描出全量信息之后,接下来的重点就是筛选和标注。我直接把完整脚本写出来,你复制后改两个参数就能用。

import os from datetime import datetime from openpyxl import Workbook from openpyxl.styles import PatternFill from openpyxl.utils import get_column_letter # ========== 配置区 ========== TARGET_DIR = r"D:\video_archive" # 你要关注的开始时间和结束时间,格式必须严格按 YYYY-MM-DD HH:MM:SS START_TIME = "2024-01-01 00:00:00" END_TIME = "2024-12-31 23:59:59" EXCEL_PATH = r"D:\video_archive\视频清单.xlsx" VIDEO_EXTS = {".mp4", ".mov", ".avi", ".mkv", ".flv", ".wmv", ".ts"} # ============================ def parse_time_str(time_str): return datetime.strptime(time_str, "%Y-%m-%d %H:%M:%S") start_dt = parse_time_str(START_TIME) end_dt = parse_time_str(END_TIME) records = [] for root, dirs, files in os.walk(TARGET_DIR): for name in files: ext = os.path.splitext(name)[1].lower() if ext not in VIDEO_EXTS: continue full_path = os.path.join(root, name) try: ctime = os.path.getctime(full_path) mtime = os.path.getmtime(full_path) except OSError: continue create_dt = datetime.fromtimestamp(ctime) create_str = create_dt.strftime("%Y-%m-%d %H:%M:%S") modify_str = datetime.fromtimestamp(mtime).strftime("%Y-%m-%d %H:%M:%S") size_mb = round(os.path.getsize(full_path) / (1024 * 1024), 2) # 判断是否落在指定区间 in_range = start_dt <= create_dt <= end_dt records.append({ "文件名": name, "创建时间": create_str, "修改时间": modify_str, "大小MB": size_mb, "完整路径": full_path, "是否在时间区间内": "是" if in_range else "否", "是否建议删除": "是" if in_range else "否", }) # 按创建时间排序 records.sort(key=lambda x: x["创建时间"]) # 写入Excel wb = Workbook() ws = wb.active ws.title = "全部视频清单" headers = ["文件名", "创建时间", "修改时间", "大小MB", "完整路径", "是否在时间区间内", "是否建议删除"] ws.append(headers) # 表头加粗 from openpyxl.styles import Font header_font = Font(bold=True) for col in range(1, len(headers) + 1): ws.cell(row=1, column=col).font = header_font # 待删除标记行用黄色填充 yellow_fill = PatternFill(start_color="FFFF00", end_color="FFFF00", fill_type="solid") for record in records: row_idx = ws.max_row + 1 ws.append([ record["文件名"], record["创建时间"], record["修改时间"], record["大小MB"], record["完整路径"], record["是否在时间区间内"], record["是否建议删除"], ]) # 如果在区间内,整行标黄 if record["是否建议删除"] == "是": for col in range(1, len(headers) + 1): ws.cell(row=row_idx, column=col).fill = yellow_fill # 生成单独的待删除清单Sheet ws2 = wb.create_sheet(title="待删除清单") ws2.append(headers) for col in range(1, len(headers) + 1): ws2.cell(row=1, column=col).font = header_font for record in records: if record["是否建议删除"] == "是": ws2.append([ record["文件名"], record["创建时间"], record["修改时间"], record["大小MB"], record["完整路径"], record["是否在时间区间内"], record["是否建议删除"], ]) # 调整列宽,避免文件名或路径显示不全 col_widths = [30, 20, 20, 12, 50, 18, 18] for i, width in enumerate(col_widths, start=1): ws.column_dimensions[get_column_letter(i)].width = width ws2.column_dimensions[get_column_letter(i)].width = width wb.save(EXCEL_PATH) print(f"完成!Excel已保存到 {EXCEL_PATH}") print(f"视频总数: {len(records)}") print(f"区间内建议删除: {sum(1 for r in records if r['是否建议删除'] == '是')}")

运行完这个脚本,你会得到一个包含两个Sheet的Excel文件。第一个Sheet是全量视频清单,区间内的行已经被自动填充了黄色;第二个Sheet是干净利落的待删除清单,只保留需要处理的项目。

3.5 关键逻辑解释:为什么整行标黄而不是加一列

我在做Excel标注的时候,选的是整行标黄加单独清单Sheet的双保险策略。你可能会问,既然已经在"是否建议删除"列写了"是",为什么还要费劲去填充背景色?

因为人眼对颜色的敏感度远高于对文字的敏感度。几千条数据摆在那里,你让操作人员一条条看文字判断是"是"还是"否",他们很容易疲劳出错。整行标黄之后,待删除项在视觉上被自动分组,往下一扫就能锁定区域。

另外,单独生成一个"待删除清单"Sheet也不是冗余。实际交付的时候,操作人员只需要打开这个Sheet,看到的全部都是要处理的视频。不需要在几千行里面筛选来筛选去,也不需要懂Excel筛选功能。这大大降低了使用门槛,对方只需要按图索骥即可。

还有个小细节:我把列宽设置了固定值,文件名和完整路径两列给了足够的宽度。因为Excel默认列宽在遇到超长路径时会显示成"######",打印和查看都困难。这个问题在真实项目里经常被人忽略,等到交付的时候才发现表格没法看。

4. 实际运行中的常见问题与排查技巧

4.1 扫描慢、内存占用高怎么办

第一次跑这个脚本的时候,如果视频文件夹里有几万条文件,你可能会发现程序要跑好几分钟。这通常不是代码逻辑问题,而是文件数量导致磁盘I/O和元数据读取密集。

几个优化技巧:

如果目录层级极深且文件数极多,可以在不需要全量清单的情况下,把扫描范围缩小到特定的子文件夹。在TARGET_DIR上直接指向更精确的路径即可。如果确认所有视频都在第一层目录里,可以把os.walk换成os.listdir,只扫当前层。速度提升非常大,但代价是无法覆盖子目录。开一个进度日志,每处理1000个文件打印一次耗时和当前进度。这样跑批任务的时候心里不慌,也能判断是否有文件导致卡死。

常规量级的上千个文件,其实用Python扫反而很快,真正耗时大户是把Excel写盘的过程。如果数据量在5万行以上,建议把openpyxl换成pandas的to_excel直接输出,速度能快一个数量级。

4.2 Excel文件被占用导致保存失败

这是使用openpyxl时最经典的坑:你运行脚本,脚本执行到wb.save(EXCEL_PATH)时报PermissionError,原因几乎一定是目标Excel文件正被打开着。

Windows默认禁止对正在打开的文件进行写入操作。解决办法有两个:第一个最简单,保存前确保Excel完全关闭,包括关闭后台预览窗口;第二个更稳妥,脚本里加一个异常捕获,如果保存失败,就自动换一个带时间戳的文件名重新保存。这样即使Excel文件被占用,脚本也能完成数据输出,不会中断任务。

实现方式是这样:

import datetime try: wb.save(EXCEL_PATH) except PermissionError: alt_path = EXCEL_PATH.replace(".xlsx", f"_backup_{datetime.datetime.now().strftime('%Y%m%d_%H%M%S')}.xlsx") wb.save(alt_path) print(f"原文件被占用,已保存到: {alt_path}")

这样处理后,哪怕用户忘记关Excel,脚本也不会白跑一趟。

4.3 按天、按时段精确筛选的参数写法

很多实际需求不是从"2024-01-01 00:00:00"到"2024-12-31 23:59:59"这么整年的区间,而是比如"3月20号凌晨2点到3月21号凌晨1点"这样的精确时段。

这时候你就需要理解时间字符串格式的拼接规则。脚本里我用的是"%Y-%m-%d %H:%M:%S"格式,24小时制。如果你的时间跨度是某一天,直接写成"2024-03-20 00:00:00"到"2024-03-20 23:59:59"即可。

有读者可能会问:只写日期不带时间行不行?比如START_TIME写成"2024-03-20"。答案是不行,因为strptime解析时要求字符串格式必须和模板完全匹配。如果你确实想省事,可以把parse_time_str改成:

def parse_time_str(time_str): for fmt in ("%Y-%m-%d %H:%M:%S", "%Y-%m-%d"): try: return datetime.strptime(time_str, fmt) except ValueError: continue raise ValueError(f"无法解析的时间格式: {time_str}")

这样"2024-03-20"会自动补成当天的"2024-03-20 00:00:00","2024-03-20 23:59:59"则按完整格式解析。注意"2024-03-20"作为结束时间时,缺省补的是零点,所以如果你希望包含整个20号,结束时间要写成"2024-03-21"或"2024-03-20 23:59:59",这个逻辑要想清楚,否则会漏掉当天的尾部数据。

4.4 常见报错与解决速查表

我把实际运行中比较高频的问题整理成了表格,方便你对照排查。

问题现象可能原因解决办法
扫描结果为0个文件扩展名大小写问题或路径不存在确认TARGET_DIR路径存在;检查扩展名是否在VIDEO_EXTS里,比如".MP4"需要写成".mp4"也行,代码里已经做了小写转换
时间全是1970年或者固定值在Linux或macOS上跑os.path.getctime,或者文件系统不支持创建时间确认系统类型;改用os.path.getmtime获取修改时间
PermissionError保存失败目标Excel文件被打开关闭Excel后重跑,或用上面讲到的自动备用文件名方案
文件路径包含中文乱码控制台编码问题在脚本开头加import sys; sys.stdout.reconfigure(encoding='utf-8'),或输出路径时直接写入Excel,不做print
文件太多导致内存不足几万条数据全放内存的records列表改用sqlite3暂存数据,或分批处理,每处理5000条写入一次临时文件
删除视频后重新运行,Excel仍有旧记录脚本重新扫描时没有清空原来的输出文件脚本每次运行前用os.remove删除旧的EXCEL_PATH,再重新生成,保证结果新鲜

5. 从"标注"到"删除":这一环节千万别图省事

5.1 我为什么不建议脚本直接删除文件

文章标题里有"需要删除文件"这几个字,但整个自动化流程跑到生成Excel标注就足够了。我不建议把删除动作直接写进脚本里,更不建议在标注完的瞬间就执行删除操作。

原因很简单:文件删除是一个不可逆的高风险操作。尤其是视频素材,一旦删错,可能意味着几个T的项目文件、原始素材、未归档的创作纪录全部丢失。哪怕你有回收站兜底,大量文件同时进回收站也会导致后续恢复困难。

我在实际项目里的做法是:脚本只负责标记和生成清单,删除动作全部由人工在确认清单之后执行。而且即使用脚本执行删除,也坚决不直接用os.remove,而是用send2trash.send2trash(),这个函数会把文件放进系统回收站,给后续误删留一条后悔药。

5.2 合理的复核流程怎么设计

一份好的交付流程应该是这样的:

  1. 跑脚本生成Excel,区间内的视频被标黄并汇总到待删除清单Sheet;
  2. 人工在Excel里抽查待删除清单中的文件,重点验证"创建时间是否可信""有没有可能被误删的近期剪辑素材";
  3. 将待删除清单里的文件移动到专门设置的to_delete临时文件夹,而不是立即删除;
  4. 临时文件夹保留至少一到两周,确认业务方无异议后再清空回收站。

这个"两步走"的策略在团队协作中尤其管用。你硬要说"这些视频已经标了删除,直接删了吧",业务方一定会心虚,但你先移动到一个临时隔离文件夹,再给业务方一个恢复窗口,对方的接受度就会高很多。

5.3 从筛选到分档:更大的扩展方向

这次做的是"指定区间创建时间+是否删除"的二元标注,但类似逻辑完全可以扩展成更复杂的分档策略。比如:

  • 按视频时长分档:用ffprobe读取视频时长,把超过10分钟的标记为"长视频待压缩",小于30秒的标记为"废弃片段待清理";
  • 按文件大小分档:超过500MB的标为"大文件需转码",低于50MB的标为"可能不完整";
  • 按路径分档:根目录散落的临时文件标为"待归档",特定项目文件夹内的标为"保留"。

这些本质上都是"元数据提取 + 条件判断 + Excel标注"的排列组合。你这次掌握了创建时间的玩法,后面要加分辨率、时长、码率、拍摄机型等信息,只要对应调用专业工具取元数据,流程完全复用。

我个人在实际操作中的体会是:这类批量文件管理任务,最容踩的坑不是代码写不出来,而是没想清楚"我要以哪个时间字段为准""删除动作的安全边界在哪里"就开始写代码。先把业务逻辑定死,把复核路径留好,脚本只是把脏活累活自动化而已。

最后再分享一个实际操作中的小技巧:生成Excel后,顺手在表格最上方加一行说明,写上筛选的时间区间和生成时间。比如"本清单由自动脚本生成,筛选区间:2024-01-01至2024-12-31,生成时间:2025-01-15 20:11:23"。这份Excel如果传到别人手里,对方可以立即理解数据口径,避免反复追问。等以后文件数量上百G、面临磁盘空间告急的时候,你翻到这份清单,也能快速回想出当时的决策背景。这批文件的最终归属,在Excel里分析并通过脚本把存疑内容标黄之后,其实只差最后的人工点头。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/9 14:40:21

text-to-cad 实战:从文本解析到 STEP/STL/GLB 导出全链路

1. 从一段文字到三维实体&#xff1a;text-to-cad 到底在解决什么问题第一次听到 "text-to-cad" 这个词&#xff0c;很多人脑子里浮现的画面大概是&#xff1a;对着电脑敲一句"给我画一个法兰盘"&#xff0c;然后屏幕上就自动长出一个三维模型。这个想象不…

作者头像 李华
网站建设 2026/10/9 14:35:30

纯Java零依赖手写TopoJSON生成器:从GeoJSON到拓扑压缩

最近我在整理一批地图数据时发现了一个老问题&#xff1a;GeoJSON 格式虽然解析简单、生态成熟&#xff0c;但相邻多边形的公共边界会被重复存储两遍&#xff0c;数据量一上来体积就非常难看。每次做数据下发或者 Web 可视化&#xff0c;光地理数据就要吃掉大量带宽。痛定思痛&…

作者头像 李华
网站建设 2026/10/9 14:35:29

JSP教务管理系统源码还原实战:从.class反编译到可运行工程

简介&#xff1a;这份JSP源码实现了一套完整的教务管理系统&#xff0c;面向Java Web初学者、课程设计学生及需要练手项目的开发者&#xff0c;帮助理解JSP、Servlet与MySQL如何协同构建真实Web应用。压缩包共530个文件&#xff0c;约9.32MB&#xff0c;以412个gif与32个jpg页面…

作者头像 李华
网站建设 2026/10/9 14:35:27

若依微服务多数据源实战:MySQL与达梦数据库双源配置指南

最近在做一个国产化适配的项目&#xff0c;正好踩到了“若依微服务 MySQL 达梦双数据源”这个组合。需求其实很常见&#xff1a;老系统数据还在 MySQL&#xff0c;新系统要求兼容国产数据库&#xff0c;于是要在若依微服务框架里同时连 MySQL 和 DM 数据库&#xff0c;做一套…

作者头像 李华
网站建设 2026/10/9 14:35:02

Stata实现PLS-SEM完整教程:从模型设定到商业洞察

做定量研究的人&#xff0c;应该都听过PLS-SEM这个名字。但坦白说&#xff0c;真正能把PLS-SEM跑出来、再把结果讲清楚的人&#xff0c;比想象中少得多。Stata从17版本开始就内置了plssem命令&#xff0c;不再是只能依赖外部软件的局面&#xff0c;但很多人打开结果窗口后还是不…

作者头像 李华
网站建设 2026/10/9 14:33:54

CnOpenData中国地震震相表解析:从数据清洗到地震定位

先说说我为什么会对这份数据上心。做地震学研究的人都知道&#xff0c;震相表是绕不开的基础数据之一。大到地震定位、走时层析成像&#xff0c;小到一次课程设计里的震相到时拾取&#xff0c;都要和“某个台站在某时某刻记录到了某个震相”这种记录打交道。但现实是&#xff0…

作者头像 李华