Pandas向Excel追加数据:避免覆盖、保留格式的完整解决方案
1. 项目概述与核心痛点如果你经常用Python的Pandas处理Excel数据大概率遇到过这个场景手头有一个已经存在的Excel文件里面有几个精心设计好的工作表可能是模板也可能是历史数据。现在你通过Pandas的DataFrame又生成了一批新数据需要把它们追加到某个已有的工作表末尾而不是覆盖掉原有的内容。这个需求听起来简单直接但当你真正动手时会发现Pandas的to_excel方法默认是“覆盖写”模式一运行原有的工作表连同里面的格式、公式可能就全没了。这绝对是个让人头疼的“坑”。我自己在数据清洗、报表自动化生成的项目里无数次踩进这个坑。比如每天定时跑脚本把新的销售数据追加到“日销售记录”这个工作表里或者把多轮分析的结果分批写入同一个报告文件的不同区域。直接覆盖显然不行手动打开Excel复制粘贴又太原始。所以如何用Pandas优雅、无损地向已存在的Excel工作表追加数据就成了一个必须掌握的技能。这不仅仅是调用一个函数那么简单它涉及到对Pandas I/O底层机制的理解以及对openpyxl或xlrd/xlwt这些引擎的灵活运用。本文将彻底拆解这个问题从为什么Pandas默认行为会覆盖到如何一步步实现安全追加再到处理表头、索引、格式保留、大数据量分块写入等进阶难题。我会分享我趟过的雷和总结的最佳实践目标是让你看完后能写出健壮、高效的Excel追加写入代码真正把Pandas和Excel的联动用活。2. 理解Pandas的Excel写入机制与追加难点2.1 为什么df.to_excel()默认会覆盖要解决问题先得理解问题的根源。Pandas的DataFrame.to_excel()方法其设计初衷是“生成”或“写入”一个Excel文件。当你指定一个文件名如output.xlsx和一个工作表名如Sheet1时Pandas的逻辑是创建一个新的Excel工作簿或在内存中模拟将DataFrame的数据写入指定的工作表然后将这个工作簿保存到指定路径。如果目标文件已存在to_excel默认的mode行为是wwrite即写入模式它会直接覆盖原文件。这背后的原因是简化和性能。对于大多数一次性导出数据的场景覆盖是最简单、最快速的方式。Pandas的Excel写入功能依赖于底层的引擎如openpyxl用于.xlsx或xlwt用于旧的.xls。这些引擎在接收“写入”指令时通常也是从头开始构建文件。Pandas没有内置“查找现有文件并在特定位置追加数据”的复杂逻辑因为这需要它先读取整个文件的结构找到目标工作表定位末尾行再插入新数据最后保存。这个流程涉及读和写两种操作比直接写要复杂也更容易出错比如格式冲突。2.2 实现追加的核心思路读-改-写既然Pandas没有提供直接的追加API我们就需要自己构建这个流程。核心思路就是经典的“读-改-写”模式读使用Pandas的read_excel函数并指定sheet_nameNone来读取整个Excel文件的所有工作表返回一个字典Dict[sheet_name, DataFrame]。或者如果你只想处理特定工作表也可以单独读取它。改在内存中对目标工作表的DataFrame进行修改。具体来说就是将新的DataFrame我们称之为df_new追加到旧的DataFramedf_old的末尾。这里主要使用Pandas的pd.concat()函数。写将修改后的字典包含更新后的工作表和其他未改动的工作表写回一个新的Excel文件或者选择性地覆盖原文件。这个思路清晰直接但它引出了一系列需要仔细处理的细节问题我们将在接下来的章节逐一攻克。2.3 引擎选择openpyxl的关键角色在追加写入的场景下openpyxl引擎变得尤为重要。对于.xlsx格式的文件openpyxl是Pandas默认的写入引擎之一从较新版本开始。它不仅能读写数据还能在一定程度上保留工作簿的某些属性如工作表名称顺序、单元格格式需要额外处理。虽然我们的“读-改-写”流程主要依赖Pandas的数据操作但最终写入文件时openpyxl的稳定性和功能丰富性使其成为首选。注意如果你处理的是旧的.xls格式需要使用xlrd读取和xlwt写入。但xlwt不支持修改现有文件通常也需要“读-改-写”并创建新文件。因此对于现代应用建议统一使用.xlsx格式和openpyxl引擎。3. 基础追加单次写入的完整流程与代码实现让我们从一个最简单的场景开始有一个已存在的existing_file.xlsx里面有一个名为Sales的工作表现在我们要把一个名为df_new的DataFrame追加到Sales工作表的末尾。3.1 步骤拆解与示例代码步骤1读取现有Excel文件我们使用pd.read_excel并指定sheet_nameNone这样会将所有工作表读入一个字典字典的键是工作表名值是对应的DataFrame。import pandas as pd # 定义文件路径 file_path existing_file.xlsx # 读取整个Excel文件所有工作表 excel_data pd.read_excel(file_path, sheet_nameNone) # 查看有哪些工作表 print(excel_data.keys())步骤2定位并修改目标工作表从字典中取出目标工作表的旧数据df_old然后使用pd.concat将新数据df_new追加到其底部。ignore_indexTrue参数很重要它会忽略原有的行索引重新生成一个连续的索引避免索引重复导致的问题。# 假设我们要追加到名为‘Sales’的工作表 sheet_name Sales df_old excel_data[sheet_name] # 你的新DataFrame df_new pd.DataFrame({ Date: [2023-10-27, 2023-10-28], Product: [Widget C, Widget D], Revenue: [2100, 1950] }) # 将新数据追加到旧数据底部 df_updated pd.concat([df_old, df_new], ignore_indexTrue) # 用更新后的DataFrame替换字典中的旧DataFrame excel_data[sheet_name] df_updated步骤3写回Excel文件现在excel_data这个字典里Sales工作表已经更新其他工作表保持不变。我们使用pd.ExcelWriter并指定引擎为openpyxl将整个字典写回文件。这里有一个关键点为了覆盖原文件我们使用modew。虽然叫“写”模式但因为我们提供了完整的工作表数据字典所以效果是“用新内容替换整个文件”而这个新内容包含了我们追加更新后的工作表。# 使用ExcelWriter写回文件 with pd.ExcelWriter(file_path, engineopenpyxl, modew) as writer: for sheet_name, df_sheet in excel_data.items(): df_sheet.to_excel(writer, sheet_namesheet_name, indexFalse) # 注意indexFalse print(f数据已成功追加到 {file_path} 的 [{sheet_name}] 工作表。)3.2 关键参数解析与避坑指南ignore_indexTrue在pd.concat时这是强烈建议使用的参数。如果不设置df_old和df_new会保留各自原来的索引。如果两者索引有重叠比如都是从0开始的默认索引写入Excel后会出现重复的索引列数据看起来是错位的。设置为True后Pandas会生成一个新的连续索引0, 1, 2...非常整洁。indexFalseinto_excel在最后写入Excel时通常我们不需要将Pandas的整数索引也写入Excel因为那不是我们的业务数据。设置indexFalse可以让Excel工作表看起来更干净第一列就是我们的业务字段。除非索引本身包含重要信息如时间序列否则建议关闭。文件锁定与权限如果你的脚本在运行而existing_file.xlsx文件被Excel桌面程序打开那么Python进程将无法写入会抛出PermissionError。在自动化脚本中需要做好异常处理或者确保文件在操作前已被关闭。内存考虑sheet_nameNone会将所有工作表的数据全部读入内存。如果Excel文件非常大几百MB这可能导致内存不足。对于大文件更推荐只读取需要修改的特定工作表我们会在进阶部分讨论。4. 进阶场景与精细化处理基础流程解决了“能追加”的问题但在实际项目中需求往往更复杂。下面我们探讨几个常见的进阶场景及其解决方案。4.1 处理表头Header的一致性场景df_new的列顺序、列名是否必须与df_old完全一致答案是的pd.concat默认按列名对齐后进行合并。如果df_new的列名是[Revenue, Date, Product]而df_old是[Date, Product, Revenue]concat会智能地按列名匹配数据不会错位。但是如果df_new多了一列或少了一列合并后的DataFrame会出现NaN值。最佳实践在追加前对df_new的列进行标准化处理。# 确保df_new的列顺序与df_old一致 expected_columns df_old.columns.tolist() df_new df_new[expected_columns] # 按旧表的列顺序重排新表 # 或者更宽松地只确保列名存在顺序由concat自动处理 # 但缺失的列会被填充NaN if not set(df_new.columns).issubset(set(df_old.columns)): print(警告新数据包含原有工作表不存在的列)4.2 保留原Excel的格式与公式这是“读-改-写”模式最大的局限性。pd.read_excel只读取单元格的值和公式的计算结果默认而完全忽略单元格的格式字体、颜色、边框、行高列宽、单元格注释、图表、图像等。df.to_excel写入时也只写入数据和可能的索引不会生成任何格式。如果你需要保留复杂格式纯Pandas的方案就不够了。你需要使用openpyxl库进行更底层的操作用openpyxl.load_workbook直接加载工作簿获得一个可操作的对象。找到目标工作表用openpyxl的方法定位到最后一行然后遍历df_new的行和列将值写入对应的单元格。openpyxl会保留工作簿原有的所有格式和对象。这种方法代码更繁琐需要你手动处理数据写入的循环。from openpyxl import load_workbook # 加载现有工作簿保留所有格式 wb load_workbook(filenamefile_path) ws wb[Sales] # 获取目标工作表 # 找到最后一行的下一行第一个空行 start_row ws.max_row 1 # 将df_new的数据写入假设df_new没有索引列需要处理 for i, row in enumerate(df_new.itertuples(indexFalse), startstart_row): for j, value in enumerate(row, start1): ws.cell(rowi, columnj, valuevalue) # 保存工作簿 wb.save(file_path)注意这种方法直接修改原文件效率高且保留格式但需要你精确控制写入位置且不经过Pandas的DataFrame整合。适合格式复杂但数据追加逻辑简单的场景。4.3 大数据量分块追加与性能优化当需要追加的数据df_new本身非常大或者需要频繁执行追加操作时每次都“读取全部 - 合并 - 写入全部”的代价很高。优化策略1增量读取与写入针对超大源文件如果原Excel文件巨大但只有少数工作表需要修改不要用sheet_nameNone。# 只读取需要的工作表 df_old pd.read_excel(file_path, sheet_nameSales) # ... 合并df_new ... # 然后需要将df_updated和其他工作表一起写回。但此时我们没有其他工作表的数据。 # 一个方案是用openpyxl加载工作簿用pandas更新特定工作表的数据区域再用openpyxl保存。 # 这更复杂通常需要结合openpyxl。优化策略2缓存工作簿对象针对频繁追加如果你在一个循环中需要多次追加数据到同一个文件反复读取和写入整个文件是性能瓶颈。from openpyxl import load_workbook import pandas as pd file_path data_log.xlsx # 第一次加载工作簿读取当前数据 try: wb load_workbook(file_path) ws wb[Log] # 将现有数据读入DataFrame从第一行开始假设第一行是标题 data ws.values cols next(data) # 第一行是列标题 df_old pd.DataFrame(data, columnscols) except FileNotFoundError: # 如果文件不存在创建新的DataFrame和工作簿 df_old pd.DataFrame() wb Workbook() ws wb.active ws.title Log # 写入标题行...此处省略 # 在循环中 for new_chunk in data_stream: # 假设data_stream产生多个df_new小块 df_old pd.concat([df_old, new_chunk], ignore_indexTrue) # 定期或最终才写入文件避免每次循环都写 # 清除旧工作表内容可选或直接写入新区域 # 将df_old写回ws使用openpyxl循环写入或pandas的to_excel配合writer # ... # 循环结束后一次性保存 wb.save(file_path)这种策略将“读”和“写”的次数降到最低但代码复杂度显著增加需要管理好内存中的数据df_old和磁盘上的文件对象wb。5. 使用pd.ExcelWriter的modea模式深入剖析从Pandas 1.3.0版本开始pd.ExcelWriter在配合openpyxl引擎时支持了modeaappend模式。这听起来像是解决追加问题的银弹但它的行为需要准确理解。5.1modea的真实行为modea并不是直接向某个工作表的末尾追加数据行。它的作用是打开一个已存在的工作簿允许你向其中添加新的工作表或者向已存在的工作表写入数据但会覆盖该工作表原有的全部内容。也就是说如果你这么做with pd.ExcelWriter(file_path, engineopenpyxl, modea) as writer: df_new.to_excel(writer, sheet_nameExistingSheet, indexFalse)结果将是ExistingSheet工作表里的所有旧数据被清空然后写入了df_new的数据。这完全不是我们想要的“追加”。5.2modea的正确使用场景向工作簿添加全新的工作表这是modea最常用、最安全的用途。with pd.ExcelWriter(file_path, engineopenpyxl, modea) as writer: df_new.to_excel(writer, sheet_nameBrandNewSheet, indexFalse)这会在existing_file.xlsx中新增一个名为BrandNewSheet的工作表原有其他工作表的内容和格式都得以保留。配合if_sheet_exists参数Pandas 1.4.0这是一个重要的增强。if_sheet_exists参数可以控制当目标工作表已存在时的行为。replace默认值覆盖整个工作表。overlay从指定的起始单元格开始写入不会清除工作表其他区域的内容。这终于可以实现“局部追加”了with pd.ExcelWriter(file_path, engineopenpyxl, modea, if_sheet_existsoverlay) as writer: # 需要先读取原工作表确定起始行 from openpyxl import load_workbook wb load_workbook(file_path) ws wb[Sales] startrow ws.max_row # 找到最后一行 df_new.to_excel(writer, sheet_nameSales, startrowstartrow, # 从最后一行之后开始写 indexFalse, headerFalse) # 注意如果原表有表头这里追加数据通常不写表头重要提示使用overlay模式时必须非常小心地计算startrow。ws.max_row返回的是工作表中有内容的行数。如果原表末尾有空行这个值可能不准。最可靠的方法是先用Pandas读取旧数据用len(df_old)得到旧数据行数那么startrow len(df_old) 11是因为to_excel的startrow参数是从0开始索引的行号而Excel行号从1开始且通常第1行是标题行。此外overlay模式同样不保留原工作表的格式它只是避免了清空整个工作表。5.3 性能与兼容性考量性能对于简单的“添加新工作表”或“覆盖写入”modea比“读-改-写”全流程更高效因为它不需要用Pandas读取所有数据到内存。兼容性if_sheet_existsoverlay是较新的功能请确保你的Pandas版本在1.4.0以上。在生产环境中对版本依赖需要明确声明。6. 实战问题排查与经验心得在实际操作中你肯定会遇到各种报错和意外情况。这里记录了几个最常见的问题和我的解决思路。6.1 常见错误与解决方案错误信息可能原因解决方案ModuleNotFoundError: No module named openpyxl未安装openpyxl库。pip install openpyxlPermissionError: [Errno 13] Permission denied目标Excel文件正在被其他程序如Excel软件打开。关闭Excel程序或确保脚本有文件写入权限。ValueError: Append mode is not supported with xlsxwriter!使用了xlsxwriter引擎并尝试modea。xlsxwriter不支持修改现有文件仅用于创建新文件。切换到openpyxl引擎。FileNotFoundError在modea下尝试追加的文件不存在。modea要求文件必须存在。先检查文件路径或先用modew创建文件。写入后数据错位或重复表头1.pd.concat时未设置ignore_indexTrue。2. 追加时错误地包含了表头headerTrue。1. 检查concat参数。2. 在追加写入的to_excel中使用headerFalse。内存溢出MemoryErrorExcel文件过大sheet_nameNone读取了所有数据。1. 只读取必要的工作表。2. 考虑使用openpyxl进行流式或分块读写。3. 增加系统内存或使用更高效的数据结构。6.2 个人实操心得与技巧明确需求选择路径这是最重要的第一步。问自己是否需要保留原文件格式追加频率如何数据量多大格式不重要只需追加数据优先使用“读-改-写”全Pandas流程简单可靠。需保留复杂格式必须使用openpyxl直接操作单元格。频繁追加日志型数据考虑使用openpyxl直接定位写入或使用SQLite/数据库最后再一次性导出到Excel。备份原文件在进行任何自动化的文件写入操作前尤其是覆盖原文件的操作养成备份的习惯。可以在代码开始时复制一份原文件或者使用版本控制系统管理数据文件。封装成函数将追加逻辑封装成一个函数提高代码复用性。函数参数可以包括文件路径、目标工作表名、待追加的DataFrame、是否包含表头、起始行位置等。def append_df_to_excel(filename, df, sheet_nameSheet1, startrowNone): 将DataFrame追加到Excel文件的指定工作表末尾。 使用openpyxl引擎保留其他工作表。 from openpyxl import load_workbook import pandas as pd # 如果文件不存在创建新文件并写入df if not os.path.exists(filename): with pd.ExcelWriter(filename, engineopenpyxl) as writer: df.to_excel(writer, sheet_namesheet_name, indexFalse) return # 加载现有工作簿 book load_workbook(filename) writer pd.ExcelWriter(filename, engineopenpyxl) writer.book book writer.sheets {ws.title: ws for ws in book.worksheets} # 确定起始行 if startrow is None and sheet_name in writer.sheets: startrow writer.sheets[sheet_name].max_row # 写入数据 df.to_excel(writer, sheet_namesheet_name, startrowstartrow, indexFalse, headerFalse) # 保存 writer.save()注意这是一个简化示例实际使用时需要处理更多边界情况如工作表不存在等。测试与验证编写单元测试或简单的验证脚本检查追加后的文件行数是否正确数据是否错位特别是第一行和最后一行的数据。对于生产环境的数据流水线这一步必不可少。向已存在的Excel工作表追加数据这个需求贯穿了我很多数据分析项目。从最初笨拙地手动操作到后来写出健壮的自动化脚本核心体会是没有一种方法能通吃所有场景。Pandas的“读-改-写”是数据角度的通用解而openpyxl的直接操作是格式保留和性能优化的利器。最关键的是在动手编码前花几分钟厘清你的核心需求——是保数据还是保格式或是要性能想清楚了这一点选择合适的技术路径剩下的就是耐心处理边界条件和细节。最后记得多写测试数据无小事尤其是当脚本在无人值守的服务器上运行时一个稳健的追加逻辑能省去很多麻烦。

相关新闻

用Arduino驱动GameBoy摄像头,在TI计算器上打造复古数码相机

用Arduino驱动GameBoy摄像头,在TI计算器上打造复古数码相机

1. 项目缘起:当复古硬件遇上开源微控制器 几年前,我在整理旧物时翻出了一台德州仪器(TI)的图形计算器,型号是TI-84 Plus,还有一台早已退役的GameBoy掌机。看着这两个充满时代感的设备,一个念头突…

2026/10/15 3:11:06 阅读更多 →
Objective-C中+load与+initialize方法详解

Objective-C中+load与+initialize方法详解

1. load与initialize方法深度解析 在Objective-C运行时环境中,load和initialize是两个特殊的类方法,它们在类加载和初始化过程中扮演着关键角色。作为iOS开发者,理解这两个方法的调用时机和差异对编写健壮的代码至关重要。 load方法是类被添…

2026/9/29 5:19:01 阅读更多 →
2026 年 Q2 邮件威胁全景:新兴攻击战术与分层防御技术研究

2026 年 Q2 邮件威胁全景:新兴攻击战术与分层防御技术研究

摘要以 SOC Prime 发布的《Q2 2026 Email Threat Landscape: Emerging Trends and Tactics》行业威胁情报报告为核心实证素材,系统梳理 2026 年第二季度全球邮件攻击整体演化格局,完整拆解当前邮件威胁四大核心新兴战术:AI 辅助多态钓鱼投递、…

2026/10/12 20:32:58 阅读更多 →

最新新闻

冒险岛WZ格式解析与自定义加密实战指南

冒险岛WZ格式解析与自定义加密实战指南

简介:这是一款面向《冒险岛》游戏开发者、MOD制作者及资深玩家的WZ资源编辑与加密工具集,专为破解、定制和重打包游戏核心资源(如图像、音效、脚本、技能配置)提供完整支持。资源包共34个文件,含17个DLL动态库&#xf…

2026/10/15 19:16:09 阅读更多 →
C罗半场被换下,利雅得胜利10人连进3球逆转

C罗半场被换下,利雅得胜利10人连进3球逆转

利雅得胜利主场,上半场0比2落后,门将早早被罚下。中场休息,主教练把C罗换了下来,转播镜头扫过他的脸,表情不太好看。下半场,没有C罗的利雅得胜利,10个人连进三球,3比2逆转。 同一周&…

2026/10/15 19:16:09 阅读更多 →
分销商城小程序打造高效社交分销与营销增长平台

分销商城小程序打造高效社交分销与营销增长平台

随着移动电商和社交营销的快速发展,传统商城获客成本不断增加,越来越多的企业开始布局分销商城小程序,通过社交分享、会员裂变、营销活动等方式,拓展销售渠道,实现客户资源与商品销量的双重增长。分销商城小程序定制开…

2026/10/15 19:16:08 阅读更多 →
从源头到应用,企业数据质量究竟该如何管控?

从源头到应用,企业数据质量究竟该如何管控?

数字化转型持续推进,数据已经成为企业经营决策、业务分析、系统协同的核心资产,但很多企业始终被数据质量难题困扰:客商信息重复、物料编码不统一、报表口径打架、跨系统数据对不上。不少团队投入了人力、预算做数据治理,却常常陷…

2026/10/15 19:16:08 阅读更多 →
2026年10月山西省联通宽带实测办理全流程避坑攻略

2026年10月山西省联通宽带实测办理全流程避坑攻略

昨天翻出上个月的手机话费单,看着宽带那一栏扣的钱,再看看业主群里邻居吐槽晚上看剧转圈圈,我实在忍不住了。对比了一下账单,我家现在用的宽带一个月大几十,网速却不如隔壁用山西省联通的邻居。为了搞清楚到底怎么回事…

2026/10/15 19:16:08 阅读更多 →
PHP众筹源码系统实战:多模式众筹平台部署与避坑指南

PHP众筹源码系统实战:多模式众筹平台部署与避坑指南

“PHP众筹源码系统”这个关键词,最近在几个站长社群里反复出现。说句实话,我第一次拿到这套源码的时候也没太当回事——市面上叫“众筹系统”的PHP源码一抓一大把,很多就是套个模板、挂个支付按钮就算完事。但真正把这套系统部署起来、跑完一…

2026/10/15 19:15:08 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 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/15 0:14:36 阅读更多 →
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/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练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/15 9:49:14 阅读更多 →