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

如何使用Pandas导入单空格与多空格混合分隔的文本文件?

解决方案

你遇到的是混合分隔规则的文本读取问题,核心矛盾是开头字段内含单空格,其余字段用多空格分隔且存在缺失,用普通分隔符读取会出现错位、列数缺失的问题,根据你的文件特征推荐两种实现方式:

方法1:固定宽度读取(优先推荐,适配字段缺失场景)

从你给出的示例来看,所有列的横向位置是严格对齐的,属于典型的固定宽度格式文件,直接用pandas内置的read_fwf接口读取即可,不会因为字段缺失导致列数不足,只需要提前确认每列的起止位置:

import pandas as pd

# 可根据实际文件的列对齐情况调整每个元组的起止偏移量
colspecs = [
    (0, 30),   # 第一个字段(含内部单空格)的起止位置
    (30, 40),  # data字段的起止位置
    (40, 55),  # 第一个world字段的起止位置
    (55, 70),  # number字段的起止位置
    (70, 85),  # 第二个world字段的起止位置
    (85, 95),  # int字段的起止位置
    (95, 105)  # float字段的起止位置
]

df = pd.read_fwf(
    r'C:\test.csv',
    colspecs=colspecs,
    header=None,
    encoding='utf-8'
)
# 按需为列重命名
df.columns = ['col1', 'col2', 'col3', 'col4', 'col5', 'col6', 'col7']

这种方法读取速度快,准确率高,即使中间字段完全为空,也会按位置切出对应空列,不会出现列数缺失的问题。

方法2:正则预处理后读取(适合列宽不固定的场景)

如果你的文件列位置不是固定对齐的,可以用两步正则处理规避缺失字段的问题:

import pandas as pd
import re

# 按行读取原始内容
with open(r'C:\test.csv', 'r', encoding='utf-8') as f:
    lines = [line.rstrip('\n') for line in f.readlines()]

processed = []
# 提前确认总列数,你的示例总列数为7
total_cols = 7
for line in lines:
    # 先把所有连续3个及以上空格替换为|
    split_list = re.split(r'\s{3,}', line.strip())
    # 不足总列数的部分按字段缺失规律补空值
    if len(split_list) < total_cols:
        # 示例默认在倒数第二的位置补int字段的空值,可按需调整补位逻辑
        split_list.insert(-1, '')
    processed.append(split_list)

df = pd.DataFrame(processed)
df.columns = ['col1', 'col2', 'col3', 'col4', 'col5', 'col6', 'col7']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 03:54:07