如何用Python/JS/PHP将文本文件转为带表头CSV或键值对JSON
定制文本转结构化CSV/JSON实现方案(Python实现)
核心思路
用Python标准库就能完成全流程,不需要安装第三方依赖,整体流程分4步:
- 逐行读取原始文本文件,过滤空行、无效的表头/汇总行
- 按照源文本的字段分隔规则(固定宽度/特定分隔符)拆分每行内容,和目标表头做映射
- 清洗字段内容,去除多余空格、换行符,补全缺失字段
- 按需输出带表头的CSV文件,或者键值对结构的JSON文件
可直接运行的代码
import csv import json # -------------------------- 配置项,按需修改 -------------------------- SOURCE_FILE = "./source.txt" # 替换为你的源文本文件路径 SAVE_CSV_PATH = "./result.csv" # 生成的CSV文件保存路径 SAVE_JSON_PATH = "./result.json" # 生成的JSON文件保存路径 # 替换为参考示例里的实际表头字段,顺序要和源文件字段顺序一致 CSV_HEADERS = ["序号", "交易时间", "交易金额", "交易对方", "交易类型", "交易状态", "备注"] # ---------------------------------------------------------------------- def parse_single_line(line: str): """单行文本解析逻辑,根据源文件实际格式调整""" content = line.strip() # 空行直接跳过 if not content: return None # 跳过不需要的汇总行、标题行,可根据源文件特征加判断规则 if content.startswith(("总计", "汇总", "序号")): return None # -------------------------- 字段拆分规则,按需修改 -------------------------- # 规则1:如果是多空格/制表符分隔的文本,用下面这行 fields = [i.strip() for i in content.split() if i.strip()] # 规则2:如果是固定宽度的文本,注释掉上面那行,用切片方式,示例如下 # fields = [ # content[0:8].strip(), # 第1个字段,取第0-8位字符 # content[8:28].strip(), # 第2个字段,取第8-28位字符 # content[28:40].strip(), # 第3个字段,取第28-40位字符 # # 后续字段按实际宽度补全即可 # ] # 规则3:如果是特定字符分隔(比如|、逗号),直接在split里传入分隔符即可 # fields = [i.strip() for i in content.split("|") if i.strip()] # -------------------------------------------------------------------------- # 校验字段数量和表头长度匹配,不匹配的行打印出来方便排查 if len(fields) != len(CSV_HEADERS): print(f"格式异常跳过:{content},字段数为{len(fields)},预期{len(CSV_HEADERS)}") return None return dict(zip(CSV_HEADERS, fields)) if __name__ == "__main__": result_list = [] # 读取源文件 with open(SOURCE_FILE, "r", encoding="utf-8") as f: for raw_line in f: parsed = parse_single_line(raw_line) if parsed: result_list.append(parsed) # 写入CSV文件,utf-8-sig编码兼容Excel直接打开不乱码 with open(SAVE_CSV_PATH, "w", encoding="utf-8-sig", newline="") as f: writer = csv.DictWriter(f, fieldnames=CSV_HEADERS) writer.writeheader() writer.writerows(result_list) print(f"CSV生成完成,有效记录共{len(result_list)}条,保存路径:{SAVE_CSV_PATH}") # 写入JSON文件 with open(SAVE_JSON_PATH, "w", encoding="utf-8") as f: json.dump(result_list, f, ensure_ascii=False, indent=2) print(f"JSON生成完成,有效记录共{len(result_list)}条,保存路径:{SAVE_JSON_PATH}")
调整注意事项
- 首次运行先把配置项里的文件路径、表头列表替换成实际内容
- 根据源文件的实际格式选对应的字段拆分规则,代码里已经列了三种最常见的文本分隔场景,注释掉不用的规则即可
- 如果遇到解析错位的问题,先把异常行打印出来,调整切片位置或者分隔规则即可,一般跑2-3次就能把规则调对
- 生成的CSV直接用Excel打开不会乱码,JSON是标准的数组包裹键值对结构,可以直接给其他程序调用
内容的提问来源于stack exchange,提问作者kkk
相关产品推荐
相关产品推荐

