Skip to content
← 返回文件与文本处理列表
文件与文本处理上手与对象

文件与文本转换的输入输出约定 ​

选择输入与匹配方式 ​

本页解释如何把含 name、minutes 两列的 CSV 转成 JSON 数组。对应的输入、完整程序与预期结果见完整实践;文中的“本例”均指该程序。示例未在本轮运行。

确定输入输出路径 ​

路径先确定绝对路径、当前目录和输入输出边界。相对路径依赖进程cwd,含空格的路径必须作为单个参数传递;不要拼接Shell命令处理用户文件名。

读取 UTF-8 与 BOM ​

UTF-8时明确输入编码与错误策略。本例使用utf-8-sig读取兼容BOM,用utf-8写出;解码失败应报告位置,不默认忽略非法字节造成静默数据丢失。

正确解析 CSV 引号 ​

CSV引号应交给csv模块,字段可能包含逗号、双引号和换行。简单split逗号会破坏这些记录;newline空字符串允许模块正确处理换行,不能把物理行数当记录数。

依据与适用范围 ​

本课完成的是列明任务的理论与静态资料,不代表产品全部能力或三平台运行通过。历史文档保留旧URL;涉及账号、版本、价格与界面位置时,以对应官方资料及实际授权环境为准。

完成转换并保存结果 ​

按记录读取与内存边界 ​

流式读取按记录迭代减少峰值内存,但排序或全量去重仍可能保存大量状态。输入大小无上限时先定义资源预算,不以使用迭代器就宣称常量内存。

防止覆盖原输入 ​

输出覆盖要避免输入与输出同一路径。独占创建模式x在目标存在时拒绝写入,比先exists再写更直接;写入失败仍可能留下部分文件,恢复前先检查内容。

定位格式与字段错误 ​

错误分类区分格式不合法、字段缺失和业务值非法。CSV列存在不等于金额能解析;报告记录编号和字段名帮助定位,日志不要输出含个人信息的整条记录。

处理失败与规模限制 ​

区分 CRLF 与 LF ​

CRLF与LF是字节层面的行结束差异。文本读取可能规范化换行,二进制校验则保持原字节;做内容转换还是做原件归档要先区分,否则摘要变化会被误当数据损坏。

拒绝负数与非有限数字 ​

非有限数字时NaN和Infinity虽然某些解析器接受,但不是本例允许的分钟数。Decimal.is_finite配合非负检查拒绝它们,输出用十进制字符串避免浮点舍入改变账面值。

使用显式文件参数 ​

Shell差异会影响通配符展开、引号与管道编码。PowerShell对象管道与Bash字节流不同,本例用显式文件参数绕开管道假设;命令文本只供阅读,本轮没有执行。

继续阅读