文件与文本处理:完整实践与解答
需能阅读 Python 3.11+ 标准库代码和 CSV 表头。本例把 name,minutes 转成 JSON 数组,使用 Decimal 检查非负有限分钟数,并拒绝覆盖已有输出。先对照输入和完整转换器,再看README 的命令、预期与失败案例。示例未执行。
文本处理 完整转换器
文本处理 完整转换器:文本处理完整转换器将CSV中的name和minutes转换为JSON数组。示例未执行;源码用Decimal核对非负有限数,输出独占创建,不调用Shell,requirements说明只依赖Python标准库。
文本处理 逗号练习
题目:name为Doe, Jane的CSV字段如何保持完整?
参考答案
文本处理 逗号练习:CSV输入用双引号包住字段,再由csv.DictReader解析;split会错误拆成多列,输出JSON中的name应仍是一整个字符串。
文本处理 失败恢复
文本处理 失败恢复:文本处理失败恢复保留原始输入,不从失败输出覆盖原文件。程序在校验全部记录后才创建目标,输入错误不会生成输出;磁盘写失败仍可能有部分目标,人工确认后删除再重试。
完整源码、配置与输入
下列文件与仓库同源,包含完整实现和输入;不是运行证明。部分练习只需人工阅读配置,不强制构造模拟器。
input.csv
csv
name,minutes
"Doe, Jane",12.5
学习,30convert.py
python
import csv
import json
import sys
from decimal import Decimal, InvalidOperation
from pathlib import Path
def convert(source, target):
if source.resolve() == target.resolve():
raise ValueError("input and output must differ")
rows = []
with source.open(encoding="utf-8-sig", newline="") as stream:
reader = csv.DictReader(stream)
if reader.fieldnames != ["name", "minutes"]:
raise ValueError("expected name,minutes header")
for number, row in enumerate(reader, 1):
if None in row or row["name"] is None or row["minutes"] is None:
raise ValueError(f"record {number}: wrong column count")
if not row["name"].strip():
raise ValueError(f"record {number}: blank name")
try:
minutes = Decimal(row["minutes"])
except InvalidOperation as exc:
raise ValueError(f"record {number}: invalid minutes") from exc
if not minutes.is_finite() or minutes < 0:
raise ValueError(f"record {number}: minutes must be finite and nonnegative")
rows.append({"name": row["name"], "minutes": str(minutes)})
with target.open("x", encoding="utf-8") as stream:
json.dump(rows, stream, ensure_ascii=False, indent=2)
stream.write("\n")
print(f"records={len(rows)}")
if __name__ == "__main__":
try:
if len(sys.argv) != 3:
raise ValueError("usage: python convert.py input.csv NEW_OUTPUT.json")
convert(Path(sys.argv[1]), Path(sys.argv[2]))
except (ValueError, OSError, csv.Error) as exc:
print(str(exc), file=sys.stderr)
sys.exit(2)requirements.txt
text
# Python 3.11+ standard library only; no external text utilities.项目README与完整依赖
README提供前置、完整自跑或阅读方式、预期、失败案例与恢复清理。本轮没有执行任何示例、产品CLI、模型或外部API。
markdown
# 文件与文本处理:完整教学包
示例未执行。全部输入为教学虚构资料,不能用于真实账号、生产数据或外部系统。
## 前置与依赖
Python3.11以上标准库;Linux命令改用python3,无安装依赖。
## 文件与输入
- `input.csv`:本包完整文件。
- `convert.py`:本包完整文件。
- `requirements.txt`:本包完整文件。
## 读者将来自跑或阅读
复制本包所有文件到独立目录,在该目录作为当前工作目录。以下是读者自用资料,本轮禁止执行。
```text
python convert.py input.csv result-new.json
```
## 正常预期
输出records=2;结果第一项name为Doe, Jane且minutes为字符串12.5,第二项name为学习且minutes为30。
## 失败案例与恢复
minutes改NaN、负数或非数字会在写输出前退出2;已有result-new.json拒绝覆盖,原输入不改。
## 清理及能力边界
写入前已验证记录但IO失败仍可能残留部分输出;核对后移除自己的result-new.json再重试。
## 来源
- [官方依据](https://docs.python.org/3/library/csv.html)(2026-10-17资料核对;不是运行证明)依据与适用范围
- 本课官方依据,资料核对日2026-10-17。
本课完成的是列明任务的理论与静态资料,不代表产品全部能力或三平台运行通过。历史文档保留旧URL;涉及账号、版本、价格与界面位置时,以对应官方资料及实际授权环境为准。
继续阅读
- 文件与文本处理任务与配置
- 文件与文本处理任务与配置
- 文件与文本处理任务与配置