如何将含分段数据的TXT文件转换为指定格式的CSV文件?
文本转CSV解决方案
问题说明
给定一段分段结构化的文本数据(...代表省略更多行):
376 932 noms sommets 0000 Abbesses 0001 Alexandre Dumas 0002 Alma Marceau ... 0375 Étienne Marcel coord sommets 0000 308 536 0001 472 386 0002 193 404 ... 0375 347 412 arcs values 0 238 41 0 159 46 1 12 36 1 235 44 ... 367 366 120.0
需要将其转换为包含nom(编号)、sommets(站点名)、coord sommets(坐标)三列的CSV文件,目标格式示例如下:
| nom | sommets | coord sommets |
|---|---|---|
| 0000 | Abbesses | 308 536 |
处理思路
- 读取文本内容,按行拆分后定位到
noms sommets和coord sommets两个数据区块 - 分别从两个区块中提取编号与对应数据的映射关系
- 按编号匹配合并数据,最后写入CSV文件
Python实现代码
import csv def convert_txt_to_csv(input_file, output_file): with open(input_file, 'r', encoding='utf-8') as f: lines = [line.strip() for line in f if line.strip()] # 定位各区块的起止位置 noms_start = lines.index('noms sommets') + 1 coord_start = lines.index('coord sommets') + 1 arcs_start = lines.index('arcs values') # 提取站点名称的编号-名称映射 nom_sommet_map = {} for line in lines[noms_start:coord_start-1]: nom, sommet = line.split(maxsplit=1) nom_sommet_map[nom] = sommet # 提取坐标的编号-坐标映射 nom_coord_map = {} for line in lines[coord_start:arcs_start-1]: nom, coord = line.split(maxsplit=1) nom_coord_map[nom] = coord # 合并数据并写入CSV with open(output_file, 'w', newline='', encoding='utf-8') as csvfile: writer = csv.DictWriter(csvfile, fieldnames=['nom', 'sommets', 'coord sommets']) writer.writeheader() # 按原数据顺序写入,保证编号顺序一致 for nom in nom_sommet_map: writer.writerow({ 'nom': nom, 'sommets': nom_sommet_map[nom], 'coord sommets': nom_coord_map.get(nom, '') }) # 使用示例:替换为你的输入/输出文件路径 convert_txt_to_csv('input.txt', 'output.csv')
代码说明
- 先过滤文本中的空行,避免干扰区块定位
- 利用字符串索引快速找到各数据段的边界
- 用字典存储映射关系,确保编号与对应数据精准匹配
- 按原站点编号的顺序写入CSV,和原文本数据顺序保持一致
内容的提问来源于stack exchange,提问作者Beam291
相关产品推荐
相关产品推荐

