用空格填充线的剩余部分以达到固定宽度

时间:2015-11-05 21:29:59

标签: python r string bash text-parsing

我有一些明文数据文件应该是固定的宽度和空格分隔。但是,很少会填充右边的列,对于那些缺少值的行,行的文本会在最后一个填充的列处停止。由于字符停止,文件的宽度不是固定的,并且没有任何分隔符或缺少符号(NA)。

当我检查标题时,我看到最大行结构是

  • 包含16个空格的17列

  • 77个数字,用于给出固定宽度为93的数据,包括分隔符

  • (4,2,2,2,2,5,5,3,8,5,7,4,4,6,6,6,6)的柱结构

我想要做的是在每行的末尾添加93-POPULATED_LENGTH空格,以便我可以将其解析为固定宽度以进行数据分析。 Bash或轻量级Python的解决方案是理想的。

3 个答案:

答案 0 :(得分:0)

使用Python,这应该

MAXCOLS = 93
with open('words.txt') as in_f, open('outfile.txt', 'w') as out_f:
    for line in in_f:
        line = line.rstrip()
        l = len(line)
        padline = MAXCOLS-l
        out_line = line+' '*padline+'\n'
        out_f.write(out_line)

例如,给定较小的21列固定宽度并使用' X'标记空格

输入文件

ciao come va
oggi meglio di domani
ieri peggio di oggi
my puzzle is big
yours puzzle is small

它会生成

的输出文件
ciao come vaXXXXXXXXX
oggi meglio di domani
ieri peggio di oggiXX
my puzzle is bigXXXXX
yours puzzle is small

答案 1 :(得分:0)

我建议您使用tr实用程序将文件转换为csv。它可以用逗号替换空格:

echo 'adam jane sam' > names.txt
cat names.txt | tr -s ' ' ','
adam,jane,sam

尾随空格将变为逗号,后面没有任何内容,R和pandas都会将其读作NA / NaN。

答案 2 :(得分:0)

$ awk'{printf(“% - 93s \ n”,$ 0)}'file.txt> FILE2.TXT

这完成了工作,但不知道为什么。 AWK和SED像往常一样提供黑魔法。