python 检查带有标题行,以逗号为分隔符的文本文件

摘要:该Python脚本用于检查CSV文件的格式规范,包括验证标题行是否包含"文件名"、"件数"、"关键字"三个必需字段,以及每行数据是否包含3个以逗号分隔的字段。脚本会检测空行、字段数量不符等错误,并输出详细的错误报告。使用方法为命令行执行python脚本名+文件名,若文件格式正确将返回确认信息,否则列出所有格式错误。

import sys
import csv

def check_file_format(file_path):
    required_headers = ['文件名', '件数', '关键字']  # 指定的三个标题头
    errors = []
    line_num = 0

    try:
        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 errors


if __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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

OOQ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值