如何使用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
相关产品推荐
相关产品推荐

