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

如何用Pandas正确读取最后列为多词的空格分隔文本文件

Pandas读取空格分隔文本时保留最后一列完整内容的解决方法

问题场景

需要读取空格分隔的TXT文件,其中最后一列stitle包含带空格的多词描述,但默认读取方式会将该列拆分,仅保留末尾片段。

示例数据

普通长文本格式

id  sub_id  identity    q_length    alignment_length    mismatches  gap_opens   evalue  bit_score   stitle
>ID1757 49.512  454 410 207 0   3.71e-159   461 Sequence 11511 from patent US 8343764         
>ID6556 gb|AEI19864.1|  56.442  372 326 140 1   1.36e-135   394 Sequence 412 from patent US 7960148

复杂长描述格式

id  sub_id  identity    q_length    alignment_length    mismatches  gap_opens   evalue  bit_score stitle
>ID54545    sp|Q59226.1|    31.340  454 418 255 11  8.73e-49    178 RecName: Full=Cyclomaltodextrinase; Short=CDase; Short=CDase I-5; AltName: Full=Cyclomaltodextrin hydrolase, decycling [Bacillus sp. (in: firmicutes)]

错误代码问题

原代码未指定合适的分隔规则,导致stitle列被拆分:

df1_column_names = ['id', 'sub_id', 'identity', 'q_length', 'alignment_length', 'mismatches', 'gap_opens', 'evalue', 'bit_score', 'stitle']
df1 = pd.read_csv('path', names=df1_column_names)

newdf = df1['stitle']
newdf.to_csv('path', index=False) 

默认read_csv会以任意空格为分隔符,将stitle的多词内容拆分为多个列,最终stitle仅保留最后一个片段。

解决方案

方法1:使用read_fwf(推荐,适配固定列宽场景)

利用固定宽度格式读取,自动识别列边界,完整保留最后一列内容:

import pandas as pd

# 定义列名
col_names = ['id', 'sub_id', 'identity', 'q_length', 'alignment_length', 'mismatches', 'gap_opens', 'evalue', 'bit_score', 'stitle']

# 读取文件,skiprows=1用于跳过表头行(若文件无表头可省略)
df = pd.read_fwf('your_file.txt', names=col_names, skiprows=1)

# 提取并保存stitle列
df['stitle'].to_csv('output_stitle.csv', index=False)

方法2:使用read_csv配合正则分隔符

通过正则表达式限定仅对前9列进行空格分割,最后一列捕获所有剩余内容:

import pandas as pd

col_names = ['id', 'sub_id', 'identity', 'q_length', 'alignment_length', 'mismatches', 'gap_opens', 'evalue', 'bit_score', 'stitle']

# 正则分隔符:匹配一个或多个空格,但仅当后续有非空格字符时分割,确保最后列完整
df = pd.read_csv('your_file.txt', sep=r'\s+(?=\S+(?:\s|$))', names=col_names, skiprows=1, engine='python')

# 提取并保存stitle列
df['stitle'].to_csv('output_stitle.csv', index=False)

验证说明

读取完成后,可通过print(df['stitle'])确认内容完整性,例如第一行的stitle应完整显示为Sequence 11511 from patent US 8343764。


内容的提问来源于stack exchange,提问作者Suzu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 19:04:51