匿名宽长表转换
先读字段与限制,确认用户需要的是指标列变行或变量行变列,不是整表转置、统计汇总、双表关联或Excel公式/样式保留。只用用户授权的匿名小表;含个人资料或商业秘密时先停下来要求用户自行匿名化,有限模式检测不是完整脱敏。
用户给出CSV、明确标识列、指标列和两个长表列名后,按正常例整理JSON,运行python3 -B scripts/run.py 输入.json。需要Python3.9+标准库及支持NOFOLLOW/NONBLOCK的文件系统接口;接口缺失会失败关闭,不下载依赖或绕过限制。输入必须是明确的普通非符号链接文件,脚本只读并向stdout返回JSON。
PREVIEW_ONLY时交付transformed_csv、value_cell_map_csv与markdown_summary,而非只念统计。若用户需要保存,使用有授权的文件工具另存到其指定新路径,不覆盖输入;脚本本身不写文件。先展示模式、输入/输出行、保留空值与补格数,再给完整成果。
KEY_CONFLICT_BLOCKED不能静默取首、求和或去重:请用户确定更完整的标识列或在源数据中解决冲突。MISSING_COMBINATIONS_BLOCKED时说明缺少键×指标组合;只有用户接受补空格才把allow_missing_combinations设true。PRESENT的空字符串与MISSING补格不同,不能都叫0或已采集。输出限制/安全/格式失败无部分CSV,不猜数据补救。
标识和值按原字符串精确处理,001不等于1,不trim、不改大小写、全半角或日期。宽表键必须唯一,长表键×变量必须唯一,即使重复值相同也阻断。按用户声明列穷尽全部源列,不把未选字段丢掉;有备注等额外列时先澄清数据模型,不擅自删列。脚本不读文本中的路径或链接、不执行内容、不联网、外发或写入系统。
这是无聚合的小表重排工具,不是数据库、BI、完整数据清洗或千万行批处理服务。CSV不保留公式、批注、宏、工作簿类型/样式;导入表格软件时ID/原文本列需选文本,不能保证外部软件不自动改类型。来源行是逻辑数据行从1计,不是带引号换行CSV的物理行号。
1.0.1 兼容修复
修正Python 3.9中单元格含单独CR时输出CSV可能被误拆行的问题;CR、LF和CRLF保留原字符,记录分隔仍为LF,不改变关联/重排、原空值或来源语义。原文安全检查与输出总字节上限继续生效;不承诺外部表格软件自动保留类型。