千万级记录Tab分隔Flat file重复表头自动清理方案咨询
数据清理解决方案
核心逻辑是根据有效数据的固定特征过滤无效行,不用手动操作,百万级记录1分钟内就能处理完成,以下是两种常用场景的实现方案:
方案1:Linux/macOS 终端命令行(大文件处理速度最快)
适合不需要复杂逻辑的快速清理,操作步骤如下:
- 先提取文件表头特征,执行命令拿到准确的表头内容:
head -1 你的输入文件名.txt - 调整过滤规则后执行清理命令:
awk 'BEGIN{ FS="\t"; # 替换为你上一步拿到的实际表头内容 header="字段1\t字段2\t字段3\t字段4"; # 替换为你有效数据实际的字段数量 valid_col=4 } # 过滤所有和表头一致的行 $0 != header # 过滤字段数量不符的无效行 && NF == valid_col # 过滤时间戳行,正则匹配你的时间戳格式,不需要可删除这行 && $0 !~ /^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$/ ' 输入文件名.txt > 清理后输出文件名.txt
方案2:Python脚本(适配Windows系统/复杂过滤规则)
可以灵活调整过滤逻辑,百万级记录处理无压力,代码如下:
import csv import re # -------------- 按需修改以下配置参数 -------------- INPUT_FILE = "你的输入文件路径.txt" OUTPUT_FILE = "清理后输出文件路径.txt" # 替换为实际的表头内容 HEADER_LINE = "id\t名称\t价格\t库存" # 有效数据的字段数量 VALID_COLUMN_COUNT = 4 # 时间戳匹配正则,不需要过滤可以设为None TIMESTAMP_REGEX = r'^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$' # ------------------------------------------------- pattern = re.compile(TIMESTAMP_REGEX) if TIMESTAMP_REGEX else None with open(INPUT_FILE, 'r', encoding='utf-8') as in_f, \ open(OUTPUT_FILE, 'w', encoding='utf-8', newline='') as out_f: reader = csv.reader(in_f, delimiter='\t') writer = csv.writer(out_f, delimiter='\t') for row in reader: current_line = '\t'.join(row) # 过滤表头行 if current_line == HEADER_LINE: continue # 过滤字段数不符的行 if len(row) != VALID_COLUMN_COUNT: continue # 过滤时间戳行 if pattern and pattern.match(current_line): continue # 写入有效数据 writer.writerow(row)
如果有其他类型的无效内容,只需要对应新增过滤规则即可。
内容的提问来源于stack exchange,提问作者Brita
相关产品推荐
相关产品推荐

