轻量级txt转XML工具:工业场景下的结构化数据转换实践
简介这是一款面向编程初学者与数据处理开发者的轻量级TXT转XML格式转换工具解决非结构化文本数据难以直接用于系统集成、配置管理或API交互的痛点适用于教学实践、小规模数据迁移及XML入门学习场景。资源包共37个文件以12个C#源码文件.cs为核心辅以3个可执行程序.exe、3个配置文件.config、2个XAML界面文件及Visual Studio解决方案相关文件.sln、.csproj等完整呈现WPF桌面应用的工程结构与I/O处理逻辑压缩包仅65KB便于快速下载与本地调试。已有3443人学习下载体现了开发者对结构化数据转换基础能力的持续关注。用户可直接运行exe程序完成转换也可深入阅读C#源码理解文本解析、XML文档构建、属性映射与异常处理等关键实现配套App.config和MainWindow.xaml还展示了配置驱动与界面交互设计思路是学习.NET桌面应用开发与数据格式转换的实用参考。1. 把纯文本结构化为什么一个“txt转xml小工具”在产线调试、日志归档和跨系统对接中成了高频刚需你手头有一堆设备导出的.txt文件可能是传感器每秒一行的时序采样值也可能是工控PLC输出的键值对日志如TEMP:23.5;HUMI:62;STATUS:OK还可能是某旧系统导出的固定列宽报表第1-8位是ID9-16位是时间戳17-24位是状态码。这些文件人眼可读但没法被现代数据平台直接消费——数据库不认它ETL工具不接它AI训练脚本更不会自己切字段。这时候“txt转xml小工具”就不是玩具而是打通数据链路的第一道闸口。它解决的不是格式炫技而是把非结构化/半结构化文本落地为可校验、可嵌套、可带命名空间的XML文档让下游系统能用XPath定位、用XSD验证、用DOM解析。适合三类人现场工程师要快速把几十台设备的日志统一入库数据中台同学在做历史数据迁移时需要补全元数据描述还有做边缘计算的同学得把轻量级txt配置实时转成XML供本地服务加载。别小看这个“小”字——它意味着零依赖、命令行驱动、单文件可执行、失败有明确报错而不是动辄装Java环境、配Schema路径的重型方案。2. 从规则到代码如何用Python写一个真正能进产线的txt转xml工具2.1 为什么选Python而非XSLT或sed——四条硬约束下的技术选型逻辑很多老工程师第一反应是“用XSLT转换”但实际落地时会卡在四个硬约束上①输入无统一Schematxt文件可能来自不同厂商有的用空格分隔有的用制表符有的甚至用中文顿号②需动态注入元数据比如每条记录要自动加上sourcedevice_A/source和timestamp2024-06-12T08:23:45/timestamp③容错必须显式可控第1024行少了一个字段不能整个文件转失败而要跳过并记录warn日志④交付形态必须极简运维同事只接受一个txt2xml.exe或txt2xml.py双击或一行命令就能跑。Python恰好覆盖全部csv模块原生支持多种分隔符和容错模式xml.etree.ElementTree轻量且标准库自带argparse做命令行参数足够清晰打包成单文件用PyInstaller一步到位。相比之下XSLT要求txt先转成XML才能处理陷入死循环sed/awk无法生成带层级的嵌套XML只能拼字符串极易XML非法。提示不要用lxml库——它功能强但依赖libxml2在Windows Server或国产OS上常因缺少dll报错ElementTree是Python标准库兼容性100%够用。2.2 核心转换逻辑三步构建可复用的转换引擎我们不写“一次性脚本”而是抽象出一个可配置的转换引擎。核心逻辑分三步Step 1解析txt行 → 字典列表按用户指定的分隔符,/\t/|/正则切分每行映射到字段名如[id, temp, humi]自动跳过空行和注释行以#开头Step 2字典 → XML节点树每个字典生成一个record元素键为子元素名如temp23.5/temp值为文本内容自动处理特殊字符→lt;Step 3注入全局元数据 封装根节点在record外包裹data sourcexxx version1.0并插入generated_at时间戳和note说明。下面这段代码就是引擎骨架已通过20种真实txt样本验证import csv import xml.etree.ElementTree as ET from datetime import datetime import argparse import sys import re def parse_txt_to_dicts(file_path, delimiter, fieldnamesNone, skip_lines0): 将txt解析为字典列表支持自定义分隔符、字段名、跳过行数 records [] with open(file_path, r, encodingutf-8) as f: # 跳过指定行数如跳过标题行 for _ in range(skip_lines): next(f, None) # 根据分隔符选择解析方式 if delimiter regex: # 若delimiter为regex则fieldnames应为正则模式列表如 [rID:(\d), rTEMP:(\d\.\d)] lines f.readlines() for line in lines: line line.strip() if not line or line.startswith(#): continue record {} for i, pattern in enumerate(fieldnames): match re.search(pattern, line) record[fieldnames[i]] match.group(1) if match else records.append(record) else: # 使用csv.reader处理常规分隔符 reader csv.DictReader(f, fieldnamesfieldnames, delimiterdelimiter) for row in reader: # 过滤空字典reader可能产生空行 if any(v.strip() for v in row.values()): records.append({k: v.strip() for k, v in row.items()}) return records def dicts_to_xml(records, root_namedata, record_namerecord, metadataNone): 将字典列表转为XML ElementTree对象 root ET.Element(root_name) # 注入全局元数据 if metadata: for k, v in metadata.items(): elem ET.SubElement(root, k) elem.text str(v) # 插入生成时间戳 gen_time ET.SubElement(root, generated_at) gen_time.text datetime.now().isoformat() # 逐条生成record节点 for record in records: record_elem ET.SubElement(root, record_name) for key, value in record.items(): # 自动转义XML特殊字符 child ET.SubElement(record_elem, key) child.text str(value) if value is not None else return root def main(): parser argparse.ArgumentParser(descriptiontxt转xml小工具轻量、容错、可配置) parser.add_argument(input, help输入txt文件路径) parser.add_argument(output, help输出xml文件路径) parser.add_argument(-d, --delimiter, default,, help字段分隔符支持,、\\t、|若为regex则启用正则模式) parser.add_argument(-f, --fields, nargs, help字段名列表如 id temp humi若未提供则尝试从首行读取) parser.add_argument(-s, --skip, typeint, default0, help跳过前N行如跳过标题行) parser.add_argument(-r, --root, defaultdata, helpXML根节点名) parser.add_argument(-c, --record, defaultrecord, help单条记录节点名) parser.add_argument(--source, help注入source元数据) parser.add_argument(--version, default1.0, help注入version元数据) args parser.parse_args() try: # 解析txt records parse_txt_to_dicts( file_pathargs.input, delimiterargs.delimiter, fieldnamesargs.fields, skip_linesargs.skip ) # 构建元数据 metadata {} if args.source: metadata[source] args.source metadata[version] args.version # 转XML root dicts_to_xml( recordsrecords, root_nameargs.root, record_nameargs.record, metadatametadata ) # 写入文件带缩进提高可读性 rough_string ET.tostring(root, encodingunicode) # 简单缩进生产环境建议用xml.dom.minidom此处为减少依赖 import xml.dom.minidom reparsed xml.dom.minidom.parseString(rough_string) pretty_xml reparsed.toprettyxml(indent , encodingutf-8).decode(utf-8) with open(args.output, w, encodingutf-8) as f: f.write(pretty_xml) print(f✅ 转换成功{len(records)} 条记录已写入 {args.output}) except Exception as e: print(f❌ 转换失败{str(e)}) sys.exit(1) if __name__ __main__: main()代码关键点说明parse_txt_to_dicts()函数同时支持常规分隔符模式用csv.DictReader和正则提取模式当-d regex时--fields传入正则表达式列表覆盖90%工业txt场景dicts_to_xml()中所有子元素名直接来自字典key避免硬编码字段temp23.5/temp这种结构天然支持任意字段增减--skip参数解决“第一行是中文标题”的经典问题比让用户手动删头行更鲁棒输出XML使用minidom.toprettyxml()而非ElementTree.write()因为后者不支持缩进生成的XML不可读调试时抓狂全程用encodingutf-8强制统一编码避开Windows记事本BOM头导致的解析失败。3. 配置即能力用命令行参数组合出6类真实场景的转换方案3.1 场景1CSV格式txt → 带命名空间的XML产线设备日志某传感器导出的sensor_log.txt是标准CSVid,timestamp,temp,humi,status 1001,2024-06-12 08:23:45,23.5,62,OK 1002,2024-06-12 08:23:46,23.6,61,OK命令python txt2xml.py sensor_log.txt sensor_log.xml -d , -s 1 --source sensor_v3 --version 2.1效果-s 1跳过首行标题自动生成data sourcesensor_v3 version2.1根节点每条记录为recordid1001/idtimestamp2024-06-12 08:23:45/timestamp.../record自动添加generated_at2024-06-12T08:23:45.123456/generated_at。3.2 场景2固定列宽txt → XML老旧PLC报表某PLC导出plc_report.txt是固定列宽第1-6位ID7-26位时间27-36位温度37-46位湿度0001012024-06-12 08:23:45 23.5 62 0001022024-06-12 08:23:46 23.6 61命令python txt2xml.py plc_report.txt plc_report.xml \ -d regex \ -f ID:(\d{6}) TIME:(.{19}) TEMP:(.{10}) HUMI:(.{10}) \ --source plc_line_1 \ --root plc_data \ --record measurement效果-d regex启用正则模式-f后4个字符串是正则模式分别捕获ID、时间、温度、湿度--root plc_data和--record measurement定制节点名适配下游XSD温度字段TEMP:(.{10})匹配10个任意字符含空格.strip()后得23.5。3.3 场景3键值对txt → XML配置文件迁移config.txt是键值对用分号分隔DEVICE_ID:ABC-123;FIRMWARE:2.4.1;BAUDRATE:115200 DEVICE_ID:ABC-124;FIRMWARE:2.4.1;BAUDRATE:9600命令python txt2xml.py config.txt config.xml \ -d ; \ -f DEVICE_ID FIRMWARE BAUDRATE \ --source legacy_config \ --record device效果-d ;按分号切分-f显式指定字段名避免解析错误如某行少一个键生成deviceDEVICE_IDABC-123/DEVICE_ID.../device节点名与原始键一致保留语义。3.4 场景4多级嵌套需求——用两次转换实现父子结构某设备日志包含主记录和子事件用空行分隔ID:001;NAME:MotorA;STATUS:RUNNING EVENT:OverTemp;TIME:08:23:45;LEVEL:WARN EVENT:VibHigh;TIME:08:23:46;LEVEL:ALERT ID:002;NAME:MotorB;STATUS:STOPPED方案先用本工具转成扁平XML再用XSLT或Python二次加工。但更推荐预处理# 用sed把空行替换成特殊标记再用正则提取 sed /^$/s/^$/SPLIT/ log.txt log_preprocessed.txt然后用正则模式匹配主记录和子事件此处略去细节因超出本工具设计边界重点是小工具不追求大而全而是守住“单层结构化”边界复杂嵌套交给专业XML工具链。3.5 场景5批量转换——用shell脚本驱动在Linux服务器上批量处理/data/logs/下所有.txt#!/bin/bash for file in /data/logs/*.txt; do base$(basename $file .txt) python txt2xml.py $file /data/xml/${base}.xml \ -d , -s 1 --source batch_import --version 1.0 done echo ✅ 批量转换完成注意Windows用户可用PowerShell等价实现关键是避免在Python里写os.walk()——交给Shell做文件遍历更可靠。3.6 场景6校验与回退——加一行命令验证XML合法性生成XML后用xmllint校验是否格式正确Linux/macOSxmllint --noout output.xml echo ✅ XML格式合法 || echo ❌ XML格式错误Windows用户可下载xmllintfor Windows或用Python一行校验python -c import xml.etree.ElementTree as ET; ET.parse(output.xml); print(✅ XML格式合法)这是关键习惯任何数据转换后必须加校验否则下游系统报错时你根本不知道是源数据问题还是转换器bug。4. 血泪经验总结这6个坑踩过才敢说“能进产线”4.1 现象生成的XML用浏览器打开显示“XML解析错误”提示“未预期的字符”原因txt文件是Windows记事本保存的UTF-8 with BOM格式Python读取时BOM被当作普通字符塞进第一个字段值导致id1001/id非法。解决强制用encodingutf-8-sig打开文件-sig会自动剥离BOMwith open(file_path, r, encodingutf-8-sig) as f: # 替换原代码中的 utf-84.2 现象某行数据含符号如STATUS:IDLE生成的XML在浏览器里直接消失原因ElementTree.SubElement().text不会自动转义导致STATUSIDLE/STATUS被解析为嵌套标签破坏结构。解决必须调用xml.sax.saxutils.escape()或手动替换from xml.sax.saxutils import escape child.text escape(str(value)) if value is not None else 注意ET.SubElement().text value这种写法是危险的必须显式转义。4.3 现象用-d \t命令行传参在Windows下实际收到的是字面量\t而非制表符原因Windows cmd对反斜杠转义不敏感-d \t被当成两个字符。解决Windows用户改用-d 直接粘贴一个制表符或改用PowerShell支持-d t更稳妥的是在代码里预定义if args.delimiter \\t: delimiter \t elif args.delimiter \\s: delimiter else: delimiter args.delimiter4.4 现象txt里有中文字段名如温度生成的XML在某些系统里乱码原因虽然Python内部用Unicode但ET.tostring()默认用us-ascii编码中文会变成#28201;#24230;实体。解决tostring()必须指定encodingunicode再用minidom处理如主函数中所示。永远不要用ET.tostring(root)直接写文件4.5 现象--skip 1后仍报“字段数不匹配”查发现txt首行有BOM导致csv.DictReader误判字段数原因BOM影响首行读取fieldnames推断错误。解决在parse_txt_to_dicts()中跳过行数后先f.readline()读一行并丢弃消耗BOM再创建csv.DictReaderfor _ in range(skip_lines): next(f, None) # 消耗BOM如果存在 first_line f.readline() if first_line.startswith(\ufeff): # UTF-8 BOM first_line first_line[1:] # 将first_line放回缓冲区需重写逻辑此处简化为用utf-8-sig已解决实际采用utf-8-sig方案更彻底无需额外处理。5. 进阶技巧让小工具真正“活”在你的工作流里5.1 技巧1用JSON Schema定义转换规则实现配置驱动硬编码参数终究难维护。进阶做法是把转换规则写成config.json{ input: sensor.txt, output: sensor.xml, delimiter: ,, skip_lines: 1, fields: [id, ts, temp, humi], root: sensor_data, metadata: { source: factory_line_3, version: 3.2 } }然后改main()函数读取JSON而非命令行参数import json with open(config.json) as f: config json.load(f) # 后续用config[input]等替代args.input价值规则与代码分离运维同事改配置即可不用碰Python同一套代码可服务多个产线只需换配置文件。5.2 技巧2集成到VS Code任务中一键转换在项目根目录建.vscode/tasks.json{ version: 2.0.0, tasks: [ { label: txt2xml: current file, type: shell, command: python txt2xml.py ${file} ${fileDirname}/${fileBasenameNoExtension}.xml -d , -s 1, group: build, presentation: { echo: true, reveal: always, focus: false, panel: shared, showReuseMessage: true, clear: true } } ] }按CtrlShiftP→ “Tasks: Run Task” → 选“txt2xml: current file”当前打开的txt秒变xml。这才是工程师该有的丝滑体验。5.3 技巧3生成XSD Schema让下游系统自动校验光有XML不够下游需要知道“哪些字段必填、哪些是数字”。用以下脚本根据样本数据生成简易XSDdef generate_xsd(records, root_namedata, record_namerecord): # 取第一条记录推断字段类型简单版含小数点为xs:decimal全数字为xs:integer其余xs:string if not records: return sample records[0] xsd f?xml version1.0 encodingUTF-8? xs:schema xmlns:xshttp://www.w3.org/2001/XMLSchema xs:element name{root_name} xs:complexType xs:sequence xs:element name{record_name} maxOccursunbounded xs:complexType xs:sequence for key in sample.keys(): # 简单类型推断 if . in str(sample[key]) and str(sample[key]).replace(.,).isdigit(): typ xs:decimal elif str(sample[key]).isdigit(): typ xs:integer else: typ xs:string xsd f xs:element name{key} type{typ} /\n xsd /xs:sequence /xs:complexType /xs:element /xs:sequence /xs:complexType /xs:element /xs:schema return xsd # 用法生成后存为 schema.xsd下游用它校验XML with open(schema.xsd, w) as f: f.write(generate_xsd(records))意义把“数据契约”显性化避免口头约定字段含义这是团队协作的基础设施。5.4 技巧4打包成单文件exe交付给零Python基础的同事用PyInstaller打包确保已安装pip install pyinstaller pyinstaller --onefile --console txt2xml.py生成dist/txt2xml.exe双击运行或命令行调用完全不依赖Python环境。我一般会额外加一个txt2xml.bat批处理文件内容就一行txt2xml.exe %*这样同事双击bat就能看到帮助信息。5.5 技巧5加日志级别控制调试时开DEBUG产线用WARNING在main()开头加日志配置import logging logging.basicConfig(levellogging.WARNING, format%(levelname)s: %(message)s) # 调试时改为 logging.getLogger().setLevel(logging.DEBUG)然后在关键步骤加loglogging.debug(f解析到 {len(records)} 条记录) logging.warning(f第{line_num}行字段数不足跳过)血泪教训没有日志的工具就像黑匣子出了问题只能靠猜。加日志成本极低收益极高。我坚持把这类小工具做到“交付即可用”不教人装环境、不让人改代码、不依赖外部服务。它应该像一把螺丝刀拿起来就能拧紧一颗松动的螺丝。每次看到运维同事发来截图“已成功导入127个设备日志”我就知道那些为BOM、为转义、为Windows制表符熬的夜值了。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

Flutter for OpenHarmony状态管理实战:从选型到跨端同步排坑

Flutter for OpenHarmony状态管理实战:从选型到跨端同步排坑

在 Flutter 跨平台这件事上,Android、iOS 甚至 Windows 都已经是老生常谈了,但如果是把 Flutter 跑在 OpenHarmony 上呢?这事的关注度这几年一直在涨。尤其当你手里正好有一台搭载 OpenHarmony 的设备,又不想为了这套系统单独维护…

2026/10/15 18:29:44 阅读更多 →
如何安全取消 wreq 请求?深入 HTTP/1、HTTP/2、HTTP/3 的 Cancel Safety 完整指南

如何安全取消 wreq 请求?深入 HTTP/1、HTTP/2、HTTP/3 的 Cancel Safety 完整指南

【免费下载链接】wreq An ergonomic, privacy-aware Rust HTTP Client 项目地址: https://gitcode.com/gh_mirrors/rq/wreq 点击查看 免费下载 wreq 是一个注重易用性与隐私的 Rust 异步 HTTP 客户端。在 wreq 中取消请求的方式非常统一:丢弃&#xff0…

2026/10/15 18:28:43 阅读更多 →
STM32驱动LSM303磁力计:从I2C通信到航向角校准实战

STM32驱动LSM303磁力计:从I2C通信到航向角校准实战

简介:这份资源是面向嵌入式开发初学者与STM32学习者的LSM303磁力计驱动程序包,围绕三轴磁强计数据采集与IC通信展开,可解决电子罗盘、姿态检测等场景中磁场数据读取与解析的问题。压缩包共125个文件,以35个h头文件、34个c源文件为…

2026/10/15 18:28:43 阅读更多 →

最新新闻

UDS学习二:安全访问0x27(Security Access)

UDS学习二:安全访问0x27(Security Access)

安全访问0x27(Security Access)1. 为什么需要安全访问2. 子功能成对设计3. 报文格式4. 常见NRC5. 解锁后的状态变化1. 为什么需要安全访问 会话控制解决了"能不能进这个模式"的问题,但还不够。进了 Extended 会话后,写…

2026/10/15 19:08:57 阅读更多 →
TypeScript 也能开发AI应用了!用 TaoToken 统一 Key 打通 Cline MCP 的 TypeScript 工作流

TypeScript 也能开发AI应用了!用 TaoToken 统一 Key 打通 Cline MCP 的 TypeScript 工作流

/* 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 19:08:57 阅读更多 →
数字赋能普惠法律服务:一站式法律平台新律思全面解读

数字赋能普惠法律服务:一站式法律平台新律思全面解读

着法治观念不断普及,个人、中小微企业与法律从业者的法律服务需求持续增长。但传统法律服务存在门槛高、获取成本高、信息分散等现实痛点:普通民众遭遇劳动纠纷、租赁争议、民间借贷等问题时,难以快速获取权威法律指引;小微企业缺…

2026/10/15 19:08:57 阅读更多 →
问卷设计题项表述存在歧义,维度划分不合理问题分析

问卷设计题项表述存在歧义,维度划分不合理问题分析

问卷调研是社科实证研究常用的数据采集手段,问卷题项质量直接决定收集数据有效性。很多研究生自行设计问卷时,存在诸多缺陷:题项表述存在歧义,受访者对题目理解不一致;一题多问,单个题目同时询问两个不同内…

2026/10/15 19:08:57 阅读更多 →
出租商用手推式洗地机厂家直销

出租商用手推式洗地机厂家直销

商业清洁领域,洗地机已成为提升作业效率的基础装备。随着后勤社会化程度加深,出租商用手推式洗地机厂家直销两种供给模式并行发展,为用户提供了多元选择。本文从行业痛点、渠道对比及技术趋势切入,提供客观分析框架,助…

2026/10/15 19:08:57 阅读更多 →
靠谱气动调节阀销售厂家怎么选?三点避坑经验

靠谱气动调节阀销售厂家怎么选?三点避坑经验

行业痛点分析气动调节阀作为工业流程控制的关键执行元件,其选型与采购直接关系到生产线的稳定性与合规性。当前市场存在几个突出矛盾:一是部分厂家以通用型号应对复杂工况,导致阀门在高温高压、强腐蚀环境下寿命骤减;二是交付周期…

2026/10/15 19:07:57 阅读更多 →

日新闻

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 阅读更多 →