Python:确定固定长度列的通用算法

2024-09-26 22:51:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图写一个通用函数来读取一个固定长度的文件。我可以遍历并手动计算列之间的长度,然后读取文件,但我想知道是否有一种方法可以通过编程来完成。在

我知道该怎么做,但我不确定该怎么做。。。在

如果我有这样的文件:

 ColA  ColB       ColC      FinalCol
    1    22         23 ColumnsCnBTxt
  213     1          2             2
11213 11111 1234567890             3

所有的标题都是“右对齐”并用空格(不是制表符)分隔,所以我基本上只需要从StartIndex到最后一个字符计数,这就是我的列长度。在

在python中有什么简单的方法可以实现这一点吗?结果对象将是列长度的列表

^{pr2}$

Tags: 文件方法函数标题编程手动字符制表符
3条回答

使用正则表达式拆分的一个线性函数:

>>> map(len, re.split(r"(?<=[^ ]) ", head))
[5, 5, 10, 13]

说明:

re.split在正则表达式匹配的所有点拆分字符串。{2}前面有一个空格{。这将把字符串拆分为列标题,然后我们只需获取结果字符串的长度。在

注意,这并不是性能最优的,我们对字符串进行三次遍历并调用正则表达式引擎,但对于正常大小的字符串,这没问题。在

使用re模块,您可以

header = " ColA  ColB       ColC      FinalCol"
endcols = [m.end() for m in re.finditer("[^ ]+", header)]
widths = [j - i for i, j in zip([0] + endcols, endcols)]
# [5, 6, 11, 14]

(请注意,列宽与您在回答中给出的数字略有不同,但实际上我不太明白您为什么会期望这些数字。)

如果,看起来

  1. 字段之间始终至少有一个空格。在
  2. 没有包含嵌入空格的字段值。在

然后把每一行分开,比如:

f = file('filename', 'r')
table = [line.strip().split() for line in f]
f.close()

如果字段是int或text,则可以将表格行修改为:

^{pr2}$

相关问题 更多 >

    热门问题