You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让pd.read_csv()匹配Excel识别的自定义分隔符处理德产txt数据?

解决德国设备生成的自定义分隔符TXT文件的Pandas读取问题

我有多个德国设备生成的.txt数据文件,想用Python而非Excel绘图。文件用逗号作为小数分隔符(可通过设置decimal=','解决),但列分隔符是自定义类型,既非普通制表符也非空格。试过Python里的常规分隔符,包括让pandas自动识别(留空sep),都无法成功拆分列,但Excel选择「自定义」分隔符能正常导入。现在想在pd.read_csv()中实现同样的列拆分效果。


尝试的代码

import os
import glob
import pandas as pd
import io

gdh_pms = []
os.chdir(r"C:\Users\pivde\Desktop\Tuks\nagraads\karakterisering\tga\txt")
for leggernaam in glob.glob("*.txt"):
    with open(leggernaam, mode='rb') as fp: data = fp.read()  
    stroom = io.StringIO(data.decode('ansi')) 
    df = pd.read_csv(stroom, skiprows=10, skipfooter=8, engine='python', sep='\t',  decimal=',')
    df['origin'] = leggernaam
    gdh_pms.append(df)
os.chdir(r"C:\Users\pivde\Desktop\Tuks\nagraads\karakterisering\tga")

当前运行结果

8 31,333 4,63395    origin
0   9 31,500 4,6333 PLA 0_gdh_30_200°C_Air_090823_DSC.txt
1   10 31,667 4,63265   PLA 0_gdh_30_200°C_Air_090823_DSC.txt
2   11 31,833 4,63207   PLA 0_gdh_30_200°C_Air_090823_DSC.txt
3   12 32,000 4,63107   PLA 0_gdh_30_200°C_Air_090823_DSC.txt
4   13 32,167 4,63013   PLA 0_gdh_30_200°C_Air_090823_DSC.txt
... ... ...
998 1007 197,833 4,44944    PLA 0_gdh_30_200°C_Air_090823_DSC.txt
999 1008 198,000 4,44985    PLA 0_gdh_30_200°C_Air_090823_DSC.txt
1000    1009 198,167 4,45055    PLA 0_gdh_30_200°C_Air_090823_DSC.txt
1001    1010 198,333 4,45132    PLA 0_gdh_30_200°C_Air_090823_DSC.txt
1002    1011 198,500 4,45206    PLA 0_gdh_30_200°C_Air_090823_DSC.txt
1003 rows × 2 columns

解决方案

这类自定义分隔符通常是多个连续空格或制表符+空格的混合,可以用正则表达式作为分隔符解决:

修改pd.read_csv()的sep参数为正则表达式\s+,匹配一个或多个空白字符(包括空格、制表符等),即可实现和Excel自定义分隔符一致的拆分效果:

import os
import glob
import pandas as pd
import io

gdh_pms = []
os.chdir(r"C:\Users\pivde\Desktop\Tuks\nagraads\karakterisering\tga\txt")
for leggernaam in glob.glob("*.txt"):
    with open(leggernaam, mode='rb') as fp: data = fp.read()  
    stroom = io.StringIO(data.decode('ansi')) 
    # 用正则\s+匹配任意空白字符作为分隔符
    df = pd.read_csv(stroom, skiprows=10, skipfooter=8, engine='python', sep=r'\s+', decimal=',')
    df['origin'] = leggernaam
    gdh_pms.append(df)
os.chdir(r"C:\Users\pivde\Desktop\Tuks\nagraads\karakterisering\tga")

补充说明

  • sep=r'\s+':正则表达式,匹配一个或多个连续空白字符,完美适配这类自定义分隔场景
  • 保留decimal=','确保逗号作为小数分隔符被正确识别
  • 如果\s+仍无法解决,可先读取一行原始数据查看具体分隔符:
    with open(leggernaam, mode='rb') as fp:
        first_line = fp.readline().decode('ansi')
        print(repr(first_line)) # 用repr查看原始字符,定位具体分隔符
    
    若为固定数量空格或特殊字符,直接指定对应分隔符即可。

内容的提问来源于stack exchange,提问作者Philip de Bruin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 23:55:21