2016-12-02 4 views
-3

У меня есть txt-файл, из которого я хочу создать строку определенным образом. Например, если файл содержал:Форматирование данных из txt-файла

Num Date____ Bank Type_______ NCu CCu Buy___________ Sell__________ 
001 20161130 NLB_ individuals 840 USD 0001,074800000 0001,050800000 
001 20161130 NLB_ individuals 826 GBP 0000,863900000 0000,839900000 
001 20161130 NLB_ individuals 756 CHF 0001,094200000 0001,060200000 
001 20161130 NLB_ individuals 191 HRK 0007,650800000 0007,420800000 
001 20161130 NLB_ individuals 348 HUF 0315,890000000 0307,090000000 
001 20161130 NLB_ individuals 941 RSD 0124,940000000 0121,140000000 
001 20161130 NLB_ individuals 977 BAM 0001,985000000 0001,919000000 
001 20161130 NLB_ individuals 807 MKD 0062,110000000 0060,290000000 
001 20161130 NLB_ individuals 643 RUB 0071,939300000 0066,539300000 
001 20161130 NLB_ individuals 203 CZK 0027,544000000 0026,544000000 
001 20161130 NLB_ individuals 985 PLN 0004,509000000 0004,361000000 
001 20161130 NLB_ individuals 975 BGN 0001,979000000 0001,925000000 
001 20161130 NLB_ individuals 578 NOK 0009,247100000 0008,907100000 
001 20161130 NLB_ individuals 752 SEK 0009,929000000 0009,609000000 
001 20161130 NLB_ individuals 208 DKK 0007,552100000 0007,328100000 
001 20161130 NLB_ individuals 036 AUD 0001,444400000 0001,400400000 
001 20161130 NLB_ individuals 124 CAD 0001,452800000 0001,404800000 
001 20161130 NLB_ individuals 392 JPY 0121,830000000 0118,030000000 

Код будет производить что-то вдоль линий:

GBP......0.8639......0.8399 
USD......1.0748......1.0508 
RUB.....71.9393.....66.5393 
HRK......7.6508......7.4208 
HUF....315.8900....307.0900 

и так далее для всех валют.

+4

С чем вы столкнулись? Это не служба написания кода. –

+0

Отправьте код, который вы сделали! – Dadep

+0

Также неясно, хотите ли вы получать средние цифры для каждой валюты или просто фильтровать каждую строку. –

ответ

0

появляется текстовый файл, использует фиксированный формат, так что следующий такой подход должен работать:

fields = [slice(34, 37), slice(38, 52), slice(53, 67)] 

with open('input.txt') as f_input, open('output.txt', 'w') as f_output: 
    header = next(f_input) 

    for row in f_input: 
     cols = [row[field] for field in fields] 
     cols[1] = '{:.>12.4f}'.format(float(cols[1].replace(',', '.'))) 
     cols[2] = '{:.>12.4f}'.format(float(cols[2].replace(',', '.'))) 
     f_output.write(''.join(cols) + '\n') 

Давать вам следующий вывод:

USD......1.0748......1.0508 
GBP......0.8639......0.8399 
CHF......1.0942......1.0602 
HRK......7.6508......7.4208 
HUF....315.8900....307.0900 
RSD....124.9400....121.1400 
BAM......1.9850......1.9190 
MKD.....62.1100.....60.2900 
RUB.....71.9393.....66.5393 
CZK.....27.5440.....26.5440 
PLN......4.5090......4.3610 
BGN......1.9790......1.9250 
NOK......9.2471......8.9071 
SEK......9.9290......9.6090 
DKK......7.5521......7.3281 
AUD......1.4444......1.4004 
CAD......1.4528......1.4048 
JPY....121.8300....118.0300 

Это использует список slice объекты для хранения, где в каждой строке находятся поля. Они извлекаются с использованием понимания списка. Второй и третий столбцы затем преобразуются в поплавки и форматируются с помощью ведущих точек и четырех знаков после запятой. Полученный список затем записывается в файл.