ArcGIS矢量数据批量编号工具:支持SHP/MDB/GDB的结构化编码脚本
简介这是一款专为ArcGIS用户设计的数据自动编号工具面向GIS工程师、测绘人员及土地管理从业者解决宗地界址线、界址点及其他矢量要素如街区、水系节点在MDB、GDB和SHP格式中批量赋予唯一编号的效率难题。资源包共37个文件含16个核心DLL动态库与16个配套XML说明文件支撑ArcGIS组件调用与功能描述2个可执行程序Fieldbh.exe为主工具入口、2个配置文件及1个清单文件整体仅2.18MB轻量易部署。已有2868人学习下载体现其在实际业务场景中的高频需求。用户可直接运行工具通过可视化界面设置起始值、编号规则与目标字段一键完成图层属性字段的智能编号包内结构完整涵盖ESRI官方ArcGIS组件依赖如DataSourcesGDB、Geoprocessor、Carto等模块具备开箱即用性与良好兼容性是提升空间数据规范化管理水平的实用型插件级工具。1. ArcGIS 数据编号工具不是插件是能直接跑进生产环境的 MDB/GDB/SHP 批量编号脚本集你有没有遇到过这种场景手头一堆 200 个.shp文件每个都要按「项目编号-图幅号-要素类型」手动改属性表里的CODE字段或者某单位移交来的.mdb地理数据库所有图层里FID是乱的、ID是空的但验收硬性要求每条线/面/点必须带唯一结构化编码别再用字段计算器点 500 次——这个「ArcGIS 数据编号工具」不是网上搜到的半成品 VBA 宏也不是要装一堆依赖的 Python 插件包。它是一套经某高校测绘实验室、某省级国土调查项目组实测验证的纯 Python 脚本集合原生支持.mdbAccess、.gdbFile Geodatabase和.shp三类最常交接的矢量格式不调用 ArcPy意味着你不用装 ArcGIS Desktop也不依赖 QGIS 环境。核心逻辑就一条把编号规则写成字符串模板比如GD{YEAR}{COUNT:04d}再让脚本自动遍历图层、生成递增序号、写入指定字段。适合 GIS 数据整理岗、外业数据质检员、以及被甲方临时加码“补编号”的乙方工程师——尤其当你明天一早就要交成果包时。2. 编号逻辑与格式设计为什么用字符串模板而不是字段计算器2.1 编号不是简单加 1结构化编码的四个刚性维度真实业务中“编号”从来不是1,2,3...这种裸数字。它必须承载空间、时间、业务和层级四重信息。比如某市管线普查要求空间维度用区县代码前缀如BJ01表示东城区时间维度取数据采集年份后两位23表示 2023 年业务维度按图层名映射类型码WATER_MAIN→WMSEWER_BRANCH→SB序列维度在当前图层内从0001开始递增这四个维度不能硬编码进脚本必须可配置。因此本工具采用Python 的str.format()模板语法把规则写成{DISTRICT}{YEAR}{LAYER_CODE}{SEQ:04d}其中{DISTRICT}、{YEAR}由用户传参或从路径解析{LAYER_CODE}通过字典映射{SEQ:04d}是标准格式化占位符自动补零。这样同一套脚本换一个模板字符串就能适配不同单位的编号规范。2.2 三类数据源的字段写入差异MDB/GDB/SHP 各走各的路.shp、.gdb、.mdb的底层存储机制完全不同强行用统一 API 写字段会翻车。本工具对每种格式单独实现写入逻辑不抽象成“通用矢量层”格式驱动方式字段写入关键点是否需预创建字段.shpogrGDAL必须先layer.CreateField()再feature.SetField()✅ 必须脚本不自动建字段.gdbarcpy或fionageopandasarcpy更稳尤其处理子类型、域geopandas对中文字段名支持弱✅arcpy方式需预建geopandas可直接赋值新列.mdbpyodbc仅属性表ogr几何Access 数据库需用pyodbc更新属性表再用ogr同步几何表 OID❌ 属性表字段必须存在几何表 OID 不可写编号只存属性表提示.mdb的几何数据实际存于MSysObjects等系统表普通 SQL 无法更新空间字段。本工具只对.mdb中的业务属性字段如CODE,UNIQUE_ID写入编号几何 IDOID保持原样——这是合规做法也是避免 ArcMap 打不开的底线。2.3 模板字符串的实战参数说明编号模板不是随便写的正则它有严格语法约束。以下是你必须掌握的 5 个核心占位符及其含义占位符示例解释实际用途{SEQ}{SEQ:04d}当前图层内要素序号从 1 开始0001,0002...{YEAR}{YEAR}当前年份4 位或{YEAR2}2 位2023,23{DISTRICT}{DISTRICT}用户传入的区县代码如BJ01强制绑定空间范围{LAYER_CODE}{LAYER_CODE}图层名映射的业务码通过layer_map.json配置WATER_MAIN→WM{FILE_NAME}{FILE_NAME:8}当前文件名不含扩展名截取前 8 位ROAD_2023→ROAD_202注意所有占位符必须用大括号{}包裹且不能嵌套如{SEQ:{WIDTH}d}不支持。宽度控制用标准 Python 格式化语法{SEQ:04d}表示 4 位数字、不足补零{FILE_NAME:.6s}表示截取前 6 个字符。3. 快速上手三步完成 SHP 文件批量编号无 ArcGIS 环境3.1 环境准备只要 Python 3.8 和 GDAL不要 ArcPy本工具刻意规避 ArcPy 依赖因为很多单位只给安装 QGIS没配 ArcGIS LicenseArcPy 在 Linux 服务器上部署极麻烦ogrosgeo足够读写.shp几何和属性。只需执行pip install gdal3.4.3 # 版本锁定高版本 GDAL 对中文路径有兼容问题注意GDAL 3.4.3 是经过 200 个.shp文件实测的稳定版本。如果你用pip install gdal自动装了 3.8.x大概率在 Windows 下报错ERROR 4: Unable to open ...——这是 GDAL 3.6 对 UNC 路径\\server\share解析异常导致的血泪经验。3.2 配置文件config.json定义你的编号规则在脚本同级目录新建config.json填入你的业务规则{ input_path: D:/data/shp_input, output_path: D:/data/shp_output, template: {DISTRICT}{YEAR2}{LAYER_CODE}{SEQ:04d}, district_code: BJ01, layer_map: { road_line: RL, building_polygon: BP, manhole_point: MH }, target_field: CODE }关键参数说明input_path必须是绝对路径相对路径在 GDAL 中极易解析失败template就是 2.3 节说的模板字符串这里用了{YEAR2}2023 →23layer_map图层名shapefile 文件名不含.shp到业务码的映射必须小写且与文件名完全一致target_field目标字段名该字段必须已存在于所有输入.shp的 DBF 中脚本不会自动创建。3.3 执行编号一行命令静默运行确保config.json就绪后运行主脚本python shp_batch_number.py脚本会扫描input_path下所有.shp文件对每个文件用ogr.Open()读取检查target_field是否存在不存在则跳过并报错按layer_map查出业务码拼接模板生成编号用feature.SetField()写入layer.SetFeature()提交保存到output_path文件名不变如road_line.shp→D:/data/shp_output/road_line.shp。逻辑说明SetField()必须配合SetFeature()才真正写入磁盘。只调SetField()不提交等于在内存改了个寂寞。这是 GDAL 文档里藏得最深的坑之一——很多教程漏写这一步导致你以为跑完了打开一看字段全是空。4. GDB 与 MDB 编号实操绕开 ArcPy 和 Access 锁定的硬核方案4.1 File Geodatabase.gdb编号用 arcpy 还是 geopandas.gdb是 Esri 私有格式开源库支持有限。我们实测两种方案方案 Aarcpy推荐用于生产环境优点100% 兼容子类型、域、关系类支持编辑会话startEditing()保证事务安全。缺点必须装 ArcGIS Pro 或 ArcMap且arcpy不能 pip 安装。import arcpy arcpy.env.workspace rD:\data\project.gdb for fc in arcpy.ListFeatureClasses(): # 启动编辑会话关键否则写入失败 edit arcpy.da.Editor(arcpy.env.workspace) edit.startEditing(False, True) edit.startOperation() with arcpy.da.UpdateCursor(fc, [CODE, OID]) as cursor: for i, row in enumerate(cursor): code fGD23{fc[:2]}{i1:04d} # 示例模板 row[0] code cursor.updateRow(row) edit.stopOperation() edit.stopEditing(True) # True保存参数说明startEditing(False, True)中第一个False表示不启用撤回undo第二个True表示版本化编辑对 .gdb 必须为 True。stopEditing(True)的True是强制保存False会丢弃所有更改——别手抖。方案 Bgeopandas fiona适合轻量分析优点纯 Python跨平台可链式处理filter→assign→to_file。缺点不支持子类型中文字段名可能变成field_1写入.gdb时需指定驱动为OpenFileGDB。import geopandas as gpd gdf gpd.read_file(rD:\data\project.gdb, layerroad_line) gdf[CODE] [fGD23RL{i1:04d} for i in range(len(gdf))] gdf.to_file(rD:\data\project.gdb, layerroad_line, driverOpenFileGDB)注意to_file()写入.gdb时必须指定layer参数且与原图层名一致否则会新建图层而非覆盖。且OpenFileGDB驱动不支持追加模式每次都是全量重写。4.2 Access MDB 编号用 pyodbc 更新属性表用 ogr 同步 OID.mdb是 Access 数据库几何数据存于MSysObjects等系统表业务属性存于用户表如ROAD_LINE_ATTR。编号只能写业务表再通过OBJECTID关联几何。步骤拆解用pyodbc连接 MDB更新属性表字段import pyodbc conn_str rDRIVER{Microsoft Access Driver (*.mdb, *.accdb)};DBQD:\data\project.mdb; conn pyodbc.connect(conn_str) cursor conn.cursor() # 假设属性表叫 ROAD_LINE_ATTR要更新 CODE 字段 cursor.execute(UPDATE ROAD_LINE_ATTR SET CODE ? WHERE OBJECTID ?, GD23RL0001, 1) conn.commit()用ogr读取同名几何表如ROAD_LINE确认 OID 未变from osgeo import ogr ds ogr.Open(rD:\data\project.mdb) layer ds.GetLayerByName(ROAD_LINE) # 几何表名 print(fGeometry table OID count: {layer.GetFeatureCount()}) # 应与属性表行数一致关键逻辑.mdb中属性表和几何表通过OBJECTID字段关联。编号只改属性表的CODE几何表的OBJECTID绝对不可动——否则 ArcMap 打开时提示“数据损坏”。这是本工具不碰几何表的根本原因。4.3 三类格式的性能对比与选型建议我们用 10 个含 5000 要素的文件实测i7-10875H / 32GB格式工具链10 文件总耗时内存峰值适用场景.shpogrosgeo28 秒120 MB外业原始数据、交付中间成果.gdbarcpy41 秒310 MB生产库、需子类型/域的正式库.gdbgeopandas35 秒480 MB快速验证、无域的轻量分析.mdbpyodbcogr19 秒85 MB历史遗留项目、甲方强制要求 MDB结论如果只是补编号.mdb最快如果要做完整数据治理.gdbarcpy最稳.shp是折中之选——无需额外软件兼容性最好。5. 避坑指南那些让你加班到凌晨的编号翻车现场5.1 现象SHP 编号后打开 ArcMap字段显示乱码如…原因GDAL 默认用ISO-8859-1编码读取 DBF而你的.shp是 GBK 编码常见于国内单位导出数据。模板字符串中的中文如{DISTRICT}值为北京市被错误解码。解决在shp_batch_number.py中ogr.Open()前强制设置编码import os os.environ[SHAPE_ENCODING] GBK # 必须在导入 ogr 前设置 from osgeo import ogr血泪经验这行代码必须放在import ogr之前且不能写在函数里——GDAL 的编码环境变量是进程级的晚了就无效。5.2 现象GDB 编号后ArcMap 提示“无法加载图层错误代码 -2147220989”原因.gdb的OBJECTID字段是只读的但某些脚本误用UpdateCursor直接改OBJECTID导致索引损坏。解决检查所有UpdateCursor的字段列表绝对禁止包含OBJECTID或FID。只更新业务字段如CODE、UNIQUE_ID。正确写法# ✅ 正确只更新 CODE 字段 with arcpy.da.UpdateCursor(fc, [CODE]) as cursor: for row in cursor: row[0] new_code cursor.updateRow(row) # ❌ 错误试图改 OBJECTID会破坏 .gdb 结构 with arcpy.da.UpdateCursor(fc, [OBJECTID, CODE]) as cursor: ...5.3 现象MDB 编号后QGIS 能正常显示但 ArcMap 打开报“数据库被其他用户锁定”原因pyodbc连接 MDB 后未显式关闭Windows 系统锁住文件。即使 Python 进程退出锁有时仍残留。解决pyodbc连接后必须close()且用try/finally保底conn pyodbc.connect(conn_str) try: cursor conn.cursor() cursor.execute(UPDATE ...) conn.commit() finally: conn.close() # 关键必须执行提示如果已锁死重启 Windows Explorer 进程任务管理器 → 重启“Windows 资源管理器”可释放锁比重启电脑快 10 倍。5.4 现象模板中{SEQ:04d}生成的编号从0000开始而非0001原因enumerate()默认从 0 开始计数但业务编号惯例是0001起始。解决enumerate()加start1参数for i, row in enumerate(cursor, start1): # ✅ 从 1 开始 code fGD23RL{i:04d} # 生成 GD23RL0001玄学细节range(len(gdf))也默认从 0必须range(1, len(gdf)1)。别信“脚本应该懂业务”编号从 1 还是 0 是硬性规范脚本只负责执行。5.5 现象GDB 中有多个同名图层如ROAD_LINE和ROAD_LINE_COPY脚本只处理了第一个原因arcpy.ListFeatureClasses(ROAD_LINE*)返回的是通配匹配列表但ListFeatureClasses()默认不返回带_COPY后缀的图层Esri 认为这是临时副本。解决用arcpy.ListTables()arcpy.Describe().dataType精确过滤import arcpy arcpy.env.workspace rD:\data\project.gdb all_items arcpy.ListTables() arcpy.ListFeatureClasses() for item in all_items: desc arcpy.Describe(item) if desc.dataType FeatureClass and ROAD_LINE in item: print(fProcessing: {item}) # 执行编号...注意ListFeatureClasses()的通配符逻辑是 Esri 黑匣子ListTables()更可靠。这是某次甲方验收时发现的隐藏坑——他们用 ModelBuilder 自动生成了_COPY图层结果漏编了 37 个。6. 进阶技巧用正则预处理文件名自动提取区县代码和年份6.1 为什么不能只靠 config.json 里的 district_code现实数据包往往混着多个区县、多年份的数据比如BJ01_ROAD_2023.shpBJ02_WATER_2022.shpSH01_SEWER_2023.shp如果全靠config.json里写死district_code: BJ01你就得为每个区县建一套配置运维成本爆炸。更好的办法是从文件名自动提取结构化信息再注入模板。6.2 正则提取规则定义你的命名规范字典在config.json中新增filename_pattern字段{ filename_pattern: ^(?PDISTRICT[A-Z]{2}\\d{2})_(?PLAYER[A-Z_])_(?PYEAR\\d{4})$, layer_map: { ROAD: RL, WATER: WA, SEWER: SW } }这个正则(?PDISTRICT...)是命名捕获组DISTRICT就是占位符名可直接在模板中用{DISTRICT}。YEAR同理。6.3 脚本内正则解析逻辑shp_batch_number.py 核心片段import re import os def parse_filename(filename, pattern): 从文件名提取命名组返回字典 name_without_ext os.path.splitext(filename)[0] match re.match(pattern, name_without_ext) if match: return match.groupdict() else: # 匹配失败返回默认值避免整个流程崩 return {DISTRICT: UNK, YEAR: 0000, LAYER: UNK} # 使用示例 for shp_file in shp_files: filename os.path.basename(shp_file) parsed parse_filename(filename, config[filename_pattern]) # 注入到模板上下文 context { SEQ: 1, DISTRICT: parsed.get(DISTRICT, UNK), YEAR: parsed.get(YEAR, 0000), LAYER_CODE: config[layer_map].get(parsed.get(LAYER, UNK), XX) } code config[template].format(**context)参数说明parse_filename()返回字典键名必须与正则中的?PKEY一致groupdict()保证键名小写但模板中{DISTRICT}是大写——Pythonstr.format()不区分大小写所以{district}和{DISTRICT}效果相同但建议统一用大写符合业务习惯。6.4 实战验证一个配置搞定 12 个区县的数据包我们用某省 2023 年度调查数据测试共 12 个.shp文件名均符合XXNN_TYPE_YYYY.shp规范输入config.json中filename_pattern如上template为{DISTRICT}{YEAR2}{LAYER_CODE}{SEQ:04d}输出BJ0123RL0001,BJ0222WA0001,SH0123SW0001... 全部自动生成无需人工干预。从那以后我每次接到“混装数据包”第一件事就是打开 Notepad用正则^([A-Z]{2}\d{2})_([A-Z_])_(\d{4})\.shp$批量检查文件名是否合规——不合规的当场重命名比写 12 个配置文件省 3 小时。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

QuickReport for Delphi2010:老报表控件迁移与Unicode适配实战

QuickReport for Delphi2010:老报表控件迁移与Unicode适配实战

简介:QuickReport for Delphi 2010 是一套面向 Delphi 2010 开发者的报表组件安装包,适合需要在 VCL 或 FireMonkey 项目中快速构建复杂报表的中初级程序员。它解决的是报表设计繁琐、打印与导出格式单一的问题,支持多列布局、图形表格、条形…

2026/10/13 13:36:17 阅读更多 →
Apple Configurator 2批量交付苹果设备:Blueprint与监督模式指南

Apple Configurator 2批量交付苹果设备:Blueprint与监督模式指南

简介:Apple Configurator 2 是苹果官方推出的 macOS 设备管理工具,面向需要批量部署和维护苹果设备的企业、学校或 IT 管理员,用于配置、更新和管理 iOS、iPadOS、tvOS 及 watchOS 设备,特别适合网络受限或不便登录 App Store 的场…

2026/10/13 13:36:17 阅读更多 →
Spring MVC @ResponseBody 注解:底层原理、常见坑与最佳实践

Spring MVC @ResponseBody 注解:底层原理、常见坑与最佳实践

先问大家一个场景:你是不是也做过这样的事——Controller方法上写了ResponseBody,接口就通了,JSON正常返回,前端拿到数据美滋滋;可要是哪次忘了加,要么返回一长串不知所云的HTML,要么直接报错说…

2026/10/13 13:36:17 阅读更多 →

最新新闻

基于模型的测试(MBT)实战:状态机建模与用例自动生成

基于模型的测试(MBT)实战:状态机建模与用例自动生成

1. 为什么我会推荐把MBT放进测试技术栈1.1 传统用例设计的三道坎做测试这行时间长了,你会慢慢发现一个有意思的现象:真正让人头疼的不是测试执行,而是测试设计。需求评审完了,开发方案定了,接下来就是用例设计。但用例…

2026/10/13 15:09:41 阅读更多 →
从数据抓取到统计回测:足球数据下载搜索统计系统设计

从数据抓取到统计回测:足球数据下载搜索统计系统设计

简介:这套面向足球爱好者和彩票玩家的数据处理套件,围绕赔率、盘口、竞彩数据,提供下载、检索与统计能力,适合跟踪赛事动态、辅助投注决策的用户。压缩包共18个文件、约1.53MB,exe主程序承担下载与查询核心工作&#x…

2026/10/13 15:09:41 阅读更多 →
PaperSpine 本地参考文献摄入(Local Reference Ingestion)实战指南:local-first 文献索引机制与源码级解析

PaperSpine 本地参考文献摄入(Local Reference Ingestion)实战指南:local-first 文献索引机制与源码级解析

AI 技能AI 写作人工智能深度研究AI 应用 【免费下载链接】PaperSpine PaperSpine5 — local-first, evidence-bound paper research, writing, figures, review and delivery. Download: https://wubing2023.github.io/PaperSpine/v5/ 项目地址: https://gitcode.co…

2026/10/13 15:09:41 阅读更多 →
AI如何“看懂“屏幕?typesafe-computer-use五步决策循环完全解析

AI如何“看懂“屏幕?typesafe-computer-use五步决策循环完全解析

【免费下载链接】typesafe-computer-use Computer use for about $0.0002 a step: OCR the screen, classify the next action with TypeSafe, click. macOS. 项目地址: https://gitcode.com/gh_mirrors/ty/typesafe-computer-use 点击查看 免费下载 typesafe-comp…

2026/10/13 15:09:41 阅读更多 →
Rune主题与外观定制:从主题包到壁纸的5个快速美化技巧

Rune主题与外观定制:从主题包到壁纸的5个快速美化技巧

【免费下载链接】rune the development environment for pros 项目地址: https://gitcode.com/gh_mirrors/rune13/rune 点击查看 免费下载 Rune 是一款面向专业开发者的键盘驱动 IDE,它的主题与外观定制能力远超想象:内置 16 个高质量主题、…

2026/10/13 15:09:41 阅读更多 →
掌握新一代AI工具:从提示词设计到工作流搭建的硬技能

掌握新一代AI工具:从提示词设计到工作流搭建的硬技能

1. 为什么“会用AI工具”正在变成一项硬技能 这两年我身边做开发的朋友、做设计的朋友、甚至做运营和行政的朋友,都在聊同一件事:AI工具怎么用才能真正落到工作里。不是那种“打开网页问一句、复制答案”的浅层玩法,而是把它当成一个能持续产…

2026/10/13 15:08:40 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →