如何将Synchro导出的TXT表格转为规范CSV并移除冗余列
处理Synchro导出TXT转Excel可读格式的问题
Synchro导出的TXT表格格式混乱,直接用pd.read_csv按制表符分隔读取时,部分条目连「Lane Group」行都读丢了,列分隔完全错位。最终要实现的是把数据转成Excel能正常识别的格式,同时删掉SBR列之后的冗余列。
原始TXT数据示例
Lane Group WBT WBR NBL NBT NBR SBL SBT SBR Ø3 Ø7 Lane Configurations <1> 0 1 2> 0 1 2 1
最初踩坑的代码
一开始直接用pd.read_csv硬读,结果因为格式混乱导致列识别错误,部分数据丢失,代码如下:
AMtxt = pd.read_csv('AM.txt', sep='\t+', header = None, error_bad_lines=False, warn_bad_lines = False, quoting=3, skiprows=1, engine='python') AMtxt.drop(columns = AMtxt.columns[-2:], axis = 1, inplace = True) AMtxt.to_csv('AM.csv')
可行的解决代码
换了个思路:逐行读取文件,严格按制表符拆分列,再清理每个单元格的空格,完美解决了列错位和数据丢失的问题。如果需要精确移除SBR之后的冗余列,也可以在清理后添加对应逻辑,代码如下:
AMtxt = pd.DataFrame(open('AM.txt','r').readlines()) AMtxt = AMtxt[0].str.split('\t', expand = True) # 清理每个单元格的前后空格 for column in AMtxt: AMtxt[column] = AMtxt[column].str.strip() # 精确移除SBR列之后的冗余列(可选) sbr_col_idx = AMtxt.columns[AMtxt.loc[0] == 'SBR'][0] AMtxt = AMtxt.loc[:, :sbr_col_idx] AMtxt.to_csv('AM.csv')
解决思路说明
- 逐行读取保留了原始每行的完整结构,避免了
pd.read_csv自动解析时的格式兼容问题; - 用
str.split('\t', expand=True)严格按单个制表符拆分列,不会像sep='\t+'那样合并多个制表符导致列数错位; str.strip()清理单元格前后空格,确保数据整洁,导出的CSV能被Excel正确识别。
内容的提问来源于stack exchange,提问作者Braden Huggett
相关产品推荐
相关产品推荐

