Преобразование кода обработки текста, написанного в awk, на python? - PullRequest
0 голосов
/ 25 июня 2019

Следующий фрагмент кода преобразует текстовый файл в другой текстовый файл, но с добавленными разделителями после указанной ширины поля.

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}' /Users/sxd2udz/citi-feed/flat_file_conversion_scripts/inbound/thdct_daily_delta_rpt02_062219.txt1 > delta_flat.txt Я имею в виду несколько способов, как его можно преобразовать в python, но мне нужно направление, в которое я должен направиться. Заранее спасибо!

1 Ответ

0 голосов
/ 25 июня 2019

Следующая функция делает то же самое, что и фрагмент gawk-

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]

...