规整数据集:将子标题转换为列的实现方案咨询
规整带分组标题的制表符分隔数据集的最优方法
针对你的需求,最优方案分两种场景选择:
1. 命令行工具(推荐,处理大文件最快)
用awk流式处理,无需加载整个文件到内存,1万行数据秒级完成,且几乎所有类Unix系统(包括Linux、macOS)都自带该工具,无需额外安装。
实现代码
创建process_data.awk文件,内容如下:
BEGIN { print "x\ty\tTest Response" FS="\t" # 指定输入字段分隔符为制表符 } /^#/ { current_test = substr($0, 2) # 移除开头的#,保存当前分组标题 next } { print $2 "\t" $3 "\t" current_test # 提取x、y列,拼接分组标题输出 }
执行命令
awk -f process_data.awk input.txt > output.txt
如果原文件的分隔符是多个空格而非制表符,只需把FS="\t"改成FS="[[:space:]]+"即可自动适配多空格分隔的场景。
2. Python脚本(适合需要自定义逻辑的场景)
如果需要后续扩展数据校验、过滤等功能,Python脚本更灵活,处理1万行数据同样高效:
实现代码
with open('input.txt', 'r', encoding='utf-8') as infile, open('output.txt', 'w', encoding='utf-8') as outfile: # 写入目标格式的表头 outfile.write("x\ty\tTest Response\n") current_group = "" for line in infile: stripped_line = line.strip() if not stripped_line: continue # 跳过空行 if stripped_line.startswith('#'): # 更新当前分组标题,移除开头的#和前后空格 current_group = stripped_line[1:].strip() continue # 按制表符分割字段,若为多空格则改用split()无参数 fields = stripped_line.split('\t') if len(fields) >= 3: x_val = fields[1].strip() y_val = fields[2].strip() outfile.write(f"{x_val}\t{y_val}\t{current_group}\n")
执行方式
直接运行脚本即可生成output.txt文件。
内容的提问来源于stack exchange,提问作者tcollar
相关产品推荐
相关产品推荐

