求助:将特定格式的TXT文件转换为指定结构的CSV文件
解决TXT转指定格式CSV的方案
针对你提供的TXT格式,我们可以用Python脚本实现批量转换,完全匹配你需要的CSV输出格式:
输入TXT格式
Roll no. Name S1 S2 S3 S4 S5 123 Subh 301 302 303 304 305 20 21 22 23 23 124 Sagar 306 200 207 205 201 30 32 43 81 22
目标CSV格式
Roll no., Name, S1, S2, S3, S4, S5, 123, Subh, [301, [302, [303, [304, [305, 20], 21], 22], 23], 23], 124, Sagar, [306, [200, [207, [205, [201, 30], 32], 43], 81], 22],
Python转换脚本
import re # 读取输入TXT文件 with open('input.txt', 'r', encoding='utf-8') as input_file: # 过滤空行并去除每行首尾空白 non_empty_lines = [line.strip() for line in input_file if line.strip()] # 处理表头:拆分空格分隔的字段,转成带逗号的格式 header_fields = re.split(r'\s+', non_empty_lines[0]) csv_header = ', '.join(header_fields) + ',' # 初始化CSV内容列表,包含表头和空行 csv_content = [csv_header, '', ''] # 遍历学生记录:每2行对应一个学生的完整成绩 for idx in range(1, len(non_empty_lines), 2): # 拆分第一行(学号、姓名、科目第一组成绩) student_info = re.split(r'\s+', non_empty_lines[idx]) # 拆分第二行(科目第二组成绩) second_scores = re.split(r'\s+', non_empty_lines[idx+1]) # 构造学生记录的第一行:学号、姓名+带[的科目成绩 first_line = f"{student_info[0]}, {student_info[1]}, [{student_info[2]}, [{student_info[3]}, [{student_info[4]}, [{student_info[5]}, [{student_info[6]}]," # 构造学生记录的第二行:缩进+带],的科目成绩 second_line = ' ' + '], '.join(second_scores) + '],' # 添加到CSV内容 csv_content.append(first_line) csv_content.append(second_line) csv_content.append('') # 学生记录间的空行 # 写入目标CSV文件 with open('output.csv', 'w', encoding='utf-8') as output_file: output_file.write('\n'.join(csv_content))
脚本说明
- 读取与过滤:先读取TXT文件,过滤掉空行,避免干扰处理
- 表头处理:用正则拆分多空格分隔的表头字段,转成CSV需要的逗号分隔格式
- 学生记录处理:每2行作为一组,分别提取科目两个成绩,拼接成
[val1,和val2],的格式,同时保留原有的缩进样式 - 写入输出:将处理后的内容写入CSV文件,完全匹配你需要的格式
内容的提问来源于stack exchange,提问作者Subhash Kalicharan
相关产品推荐
相关产品推荐

