python 检查带有标题行,以逗号为分隔符的文本文件
摘要:该Python脚本用于检查CSV文件的格式规范,包括验证标题行是否包含"文件名"、"件数"、"关键字"三个必需字段,以及每行数据是否包含3个以逗号分隔的字段。脚本会检测空行、字段数量不符等错误,并输出详细的错误报告。使用方法为命令行执行python脚本名+文件名,若文件格式正确将返回确认信息,否则列出所有格式错误。
import sys
import csvdef check_file_format(file_path):required_headers = ['文件名', '件数', '关键字'] # 指定的三个标题头errors = []line_num = 0try:with open(file_path, 'r', encoding='utf-8-sig') as file:reader = csv.reader(file)# 检查标题行try:headers = next(reader)line_num += 1# 检查标题行是否包含所需的三个标题头if len(headers) != 3:errors.append(f"标题行格式错误:应该包含3个字段,但实际有{len(headers)}个")else:for i, required in enumerate(required_headers):if headers[i].strip() != required:errors.append(f"标题行第{i + 1}列错误:应为'{required}',但实际为'{headers[i].strip()}'")except StopIteration:errors.append("文件为空,不包含任何内容")return errors# 检查数据行for row in reader:line_num += 1# 检查是否有空行if not row:errors.append(f"第{line_num}行:空行不允许存在")continue# 检查每行是否有3个字段if len(row) != 3:errors.append(f"第{line_num}行:应该包含3个字段,但实际有{len(row)}个")# 检查文件是否至少有一行数据(除标题行外)if line_num == 1:errors.append("文件中没有数据行,只有标题行")except FileNotFoundError:errors.append(f"错误:文件 '{file_path}' 不存在")except Exception as e:errors.append(f"发生未知错误:{str(e)}")return errorsif __name__ == "__main__":# 检查命令行参数if len(sys.argv) != 2:print("用法: python check_txt_file.py <文件名>")sys.exit(1)file_path = sys.argv[1]print(f"正在检查文件 '{file_path}' 的格式...")errors = check_file_format(file_path)if not errors:print("文件格式正确。")print("所有行都包含3个以逗号分隔的字段。")sys.exit(0)else:print(f"文件存在 {len(errors)} 个格式错误:")for error in errors:print(f"- {error}")sys.exit(1)