Python脚本读取CBL文件生成LOC统计CSV无数据问题排查
解决CBL文件行数统计脚本CSV仅生成表头的问题
问题排查与修复方案
1. 检查CSV写入逻辑
终端能打印文件对象和行数,但CSV无数据,核心原因几乎都是数据写入代码未执行或写入流程有误:
- 可能只编写了表头写入代码,循环处理文件时遗漏了
writerow()/writerows()调用 - 若在循环内重复以
'w'模式打开CSV文件,每次都会清空文件,最终只剩最后一次写入的表头
修复示例代码:
import os import csv target_dir = "/指定目标目录路径" output_csv = "cbl_loc_stat.csv" # 先收集所有统计数据 loc_records = [] # 遍历目录下的CBL文件 for root, _, files in os.walk(target_dir): for filename in files: if filename.lower().endswith(".cbl"): full_path = os.path.join(root, filename) # 统计行数(可选:排除空行) with open(full_path, 'r', encoding='latin-1') as f: line_count = sum(1 for line in f if line.strip()) print(f"{filename} - 行数:{line_count}") loc_records.append([filename, line_count]) # 统一写入CSV with open(output_csv, 'w', newline='', encoding='utf-8') as csv_file: writer = csv.writer(csv_file) writer.writerow(["程序名称", "Lines of Code"]) # 写入表头 writer.writerows(loc_records) # 批量写入所有统计数据
2. 验证文件编码
COBOL(.CBL)文件常使用latin-1编码,若读取时编码错误可能导致隐性读取失败,虽然你终端有输出,但仍建议在打开CBL文件时指定正确编码,避免数据收集异常。
3. 确保文件缓冲区刷新
如果未使用with语句管理文件句柄,必须手动调用csv_file.close()或writer.flush(),否则数据可能滞留在内存缓冲区,未写入磁盘。
关键验证步骤
- 在写入CSV前,打印
print(loc_records)确认数据列表是否真的包含统计结果 - 检查CSV文件路径是否正确,避免写入到了其他目录
内容的提问来源于stack exchange,提问作者6708
相关产品推荐
相关产品推荐

