如何将多个特定格式的TXT文件转换为规范CSV格式?
TXT转CSV数据无法正常显示问题解决
问题背景
我有一批特定格式的TXT文件,想要转换为CSV格式,但目前只能获取文件名和表头,数据无法正常显示。
TXT文件格式示例
ID 0x20f7 City Metropolitian Time_taken (min) 42.000000
涉及的TXT文件
- 0.txt
- 1.txt
- 3.txt
- 5.txt
- 6.txt
- 9.txt
- 10.txt
我尝试的Python代码
csvout = pd.DataFrame() file_list = glob.glob(os.path.join(os.getcwd(), "dataset/train/", "*.txt")) for filename in file_list: data = pd.read_csv(filename, sep=' ', index_col=0, header=None).T csvout = csvout.append(data) csvout.to_csv("train.csv")
期望的CSV输出格式
ID City Time_taken (min) 0x20f7 Metropolitian 42.00000
问题原因
核心问题是分隔符设置错误:你用了固定3个空格sep=' ',但TXT文件里的分隔符是不定数量的连续空格,导致read_csv无法正确识别数据列。另外append方法已被Pandas弃用,稳定性不足。
修正后的代码
import pandas as pd import glob import os # 用列表存储每个文件的DataFrame,避免多次append的性能问题 csvout_list = [] file_list = glob.glob(os.path.join(os.getcwd(), "dataset/train/", "*.txt")) for filename in file_list: # 使用正则表达式匹配任意数量的连续空格作为分隔符 data = pd.read_csv(filename, sep=r'\s+', index_col=0, header=None).T csvout_list.append(data) # 用concat批量合并,替代已弃用的append csvout = pd.concat(csvout_list, ignore_index=True) # 导出时不包含默认索引列,符合期望格式 csvout.to_csv("train.csv", index=False)
关键修改说明
sep=r'\s+':正则表达式\s+会匹配一个或多个连续的空格,完美适配TXT里的不定长分隔符pd.concat:相比append,合并多个DataFrame的效率更高,且是Pandas推荐的用法index=False:导出CSV时去掉自动生成的索引列,和你期望的输出格式一致
内容的提问来源于stack exchange,提问作者jacky789
相关产品推荐
相关产品推荐

