【问题标题】:Converting a text processing code written in awk to python?将用awk编写的文本处理代码转换为python?
【发布时间】:2019-11-06 16:44:10
【问题描述】:

以下代码 sn-p 将一个文本文件转换为另一个文本文件,但在指定的字段宽度之后添加了分隔符。

gawk 'BEGIN{FIELDWIDTHS="1 26 1 26 26 26 26 18 2 5 4 7 10 16 4 4 10 2 6 1 1 1 1 10 10 4 11 3 1 1 2 10 10 10 1 1 10 20 10 1 1 1 1 15 16 10 50 13 1 60"}{print $1 "|" $2 "|" $3 "|" $4 "|" $5 "|" $6 "|" $7 "|" $8 "|" $9 "|" $10 "|" $11 "|" $12 "|" $13 "|" $14 "|" $15 "|" $16 "|" $17 "|" $18 "|" $19 "|" $20 "|" $21 "|" $22 "|" $23 "|" $24 "|" $25 "|" $26 "|" $27 "|" $28 "|" $29 "|" $30 "|" $31 "|" $32 "|" $33 "|" $34 "|" $35 "|" $36 "|" $37 "|" $38 "|" $39 "|" $40 "|" $41 "|" $42 "|" $43 "|" $44 "|" $45 "|" $46 "|" $47 "|" $48 "|" $49 "|" $50}' 关于如何将它转换为 python,我有几种方法,但我需要一个我应该前进的方向。提前致谢!

【问题讨论】:

  • 哎呀,读起来很痛苦。 gawk 'BEGIN{OFS="|"; FIELDWIDTHS="..."} {$1=$1} 1' 眼睛会舒服一些。
  • 您应该尝试解决问题,并在遇到困难时提出问题。请阅读How do I ask a good question?

标签: python python-3.x text awk text-processing


【解决方案1】:

下面的函数和 gawk sn-p 做的事情一样——

def chunkstring(string, lengths): return (string[pos:pos+length] for idx,length in enumerate(lengths) for pos in [sum(map(int, lengths[:idx]))]) column_lengths = [1,26,1,26,26,26,26,18,2,5,4,7,10,16,4,4,10,2,6,1,1,1,1,10,10,4,11,3,1,1,2,10,10,10,1,1,10,20,10,1,1,1,1,15,16,10,50,13,1,60]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-18
    • 2021-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多