Я пытаюсь нормализовать это в кадре данных, который будет иметь следующие поля:
- Parent_Account - это четыре числа di git, в которых в балансе / деятельности нет суммы в долларах Это должно повторяться для каждого sub_account
- Parent_Description - описание, найденное рядом с родительским аккаунтом. Это должно повторяться для каждого sub_account
- Sub_Account - это числа, которые также имеют «-» и следуют за первым «-»
- Center - третьим уровнем в учетной записи. Далее следует второе «-». Это не всегда присутствует и в этом случае будет пустым.
- Sub_Description - описание для Sub_Account
- Beginning_Balance - число под Начальным балансом. Если рядом с номером есть «cr», это должно быть число, умноженное на -1
- Period_Activity - число в поле Activity периода. Если рядом с номером стоит «cr», это должно быть число, умноженное на -1
- Ending - число под Ending. Если рядом с номером стоит «cr», это должно быть число, умноженное на -1
. Вот как мои данные выглядят в текстовом файле.
import pandas as pd
import numpy as np
import re
string = """ gltbrp.p 2+ 25.15.4 Trial Balance Summary Date: 10/02/20
Page: 1 COMP AB&E Time: 16:24:55
COMP AB & E Reporting Currency: NIS
Exchange Rate:
Beginning Balance Period Activity Ending Balance
Account Description 01/01/19 31/12/19 Adjust Balance
----------------------- ------------------------ ------------------- ------------------- ------------------- ------ -------
1010 Cash-Deposit-0 Bal., FC
1010-1111 CFS RECEIVABLES CASH BOO 848,377.90 646,932.39 1,495,310.29
1010-2611 INTER ACCOUNT TRANSFERS 4,453,872.12cr 15,804,424.27 20,258,296.39
1010-9122 DEFAULT SUB-ACCOUNT CODE 1,088,346.84 1,423,931.41cr 2,512,278.25
1012 Cash-Disburse-0 Bal.,FC
1012-1114 QUEENSMAIN ACCOUNT 9,193,838.58 3,141,528.70cr 6,052,309.88
1014 EURO CONTROL ACCT
1014-9122 DEFAULT SUB-ACCOUNT CODE EUR 2,789.21 11,403.07cr 8,613.86cr
1016 USD CONTROL ACCT
1016-9122 DEFAULT SUB-ACCOUNT CODE USD .00 78,484.56 78,484.56
1022 EURO BANK ACCOUNTS
1022-9122 DEFAULT SUB-ACCOUNT CODE EUR 5,055,924.60 1,342,240.47cr 3,713,684.13
1023 USD BANK ACCOUNTS
1023-9122 DEFAULT SUB-ACCOUNT CODE USD 4,744,992.89 1,680,118.33cr 3,064,874.56
1042 Cash-Disb.-Non.0 Bal,NFC
1042-1162 CURR HK$ & CHINESE RMB 330.76 330.76cr .00
1100 Accounts Rec.-Trade:FC
1100-1311 CFS RECEIVABLES TRADE 23,103,558.73 4,369,946.25cr 18,733,612.48
1100-WBAB CFS ACCRUED RECEIVABLES 101,096.06cr 4,251.26 96,844.80cr
1100-WBAB-1501 MAXIFIT < 300MM 310,266.12cr 44,420.84 265,845.28cr
1100-1315 SALES REBATES 1,150,318.67cr 35,024.14cr 1,185,342.81cr
1100-1315-1093 Commpac 46,439.08cr 15,999.96cr 62,439.04cr
1100-1315-1102 HNH IRON BALANCING 654,359.47cr 156,251.52cr 810,610.99cr
1100-1315-1501 MAXIFIT < 300MM 351,099.82cr 63,893.90cr 414,993.72cr
1100-1316 CONTACTOR REBATES 3,804,172.43cr 2,073,515.44 1,730,656.99cr
1100-1316-1093 Commpac 382,263.81cr 19,739.11cr 402,002.92cr
1100-1316-1102 HNH IRON BALANCING 1,827,536.88cr 486,674.25 1,340,862.63cr
1100-1316-1501 MAXIFIT < 300MM 865,491.17cr 610,548.87cr 1,476,040.04cr
1100-1316-1502 MAXIFIT > 300MM 321,028.94cr 73,990.76 247,038.18cr
1100-1317 SALES REBATE CONTROL ACC 2,879,225.96cr 682,081.36 2,197,144.60cr
1100-1317-1093 Commpac 18,955.18cr 12,405.87 6,549.31cr
1100-1317-1102 HNH IRON BALANCING 1,499,613.14cr 377,041.56 1,122,571.58cr
1100-1318 Hattersley Rebates 22,470.58cr 4,449.48cr 26,920.06cr
1100-1318-1102 HNH IRON BALANCING 48,921.90cr 10,152.79cr 59,074.69cr
1100-1319 VAT TRANSFER CONTRA 2,981,496.28cr 1,243,140.41 1,738,355.87cr
1100-1319-1501 MAXIFIT < 300MM 1,627,262.29cr 134,977.01 1,492,285.28cr
1100-2315 AR/AP CREDIT BAL SWITCH 11,810,820.05cr 869,957.47 10,940,862.58cr
1100-2315-1501 MAXIFIT < 300MM 11,810,820.05 869,957.47cr 10,940,862.58
1100-9122 DEFAULT SUB-ACCOUNT CODE 485,594.24 254,072.72cr 231,521.52
1100-9122-1501 MAXIFIT < 300MM 294,857.51 5,354.08cr 289,503.43
1102 EURO ACCOUNTS RECEIVABLE
1102-9122 DEFAULT SUB-ACCOUNT CODE EUR 2,433,435.33 1,022,867.13cr 1,410,568.20
1103 USD ACCOUNTS RECEIVABLE
1103-9122 DEFAULT SUB-ACCOUNT CODE USD 1,801,882.57 250,490.33 2,052,372.90
1124 V.A.T. Receivable
1124-9122 DEFAULT SUB-ACCOUNT CODE 2,981,496.28 1,243,140.41cr 1,738,355.87
1124-9122-1501 MAXIFIT < 300MM 1,627,262.29 134,977.01cr 1,492,285.28
1132 Other Rec.-Charges Rebil
1132-1355 CLAIMS - RECOVERABLE 1,044.43 5,029.58cr 3,985.15cr
1138 Other Rec.-Employee Rec.
gltbrp.p 2+ 25.15.4 Trial Balance Summary Date: 10/02/20
Page: 2 COMP AB&E Time: 16:24:56
COMP BS & U Reporting Currency: NIS
Exchange Rate:
Beginning Balance Period Activity Ending Balance
Account Description 01/01/19 31/12/19 Adjust Balance
----------------------- ------------------------ ------------------- ------------------- ------------------- ------ -------
1138-1321 ADVANCES TO EMPLOYEES 100.00 100.00cr .00
1138-1323 TRAVEL ADV ALL EMPLOYEES 2,357.42 1,219.98cr 1,137.44
1156 Other Rec.-Pension Rec.
1156-9122 DEFAULT SUB-ACCOUNT CODE 8,008.59 1,914.69cr 6,093.90
1160 Other Rec.-Rent Rec.
1160-9122 DEFAULT SUB-ACCOUNT CODE 3,150.00 .00 3,150.00
1172 Other Rec.-Miscellaneous
1172-1333 COMP FUND .00 6,618.31 6,618.31
1172-9122 DEFAULT SUB-ACCOUNT CODE 26,242.01 115,117.97cr 88,875.96cr
Beginning Date: 01/01/19
Ending Date: 31/12/19
Summarize Sub-Accounts: No
Summarize Cost Centers: No
Currency: NIS
Suppress Zero Amounts: Yes
Round to Nearest Thousand: No
Round to Nearest Whole Unit: No
Reporting Currency: Output: text
Batch ID:
"""
Мой код, с которым я борюсь. Я только что распечатал вывод, чтобы увидеть, если он правильный. Группа (1), кажется, захватывает Sub_Accounts, но другие группы не работают. Здесь на самом деле пробуют разные вещи, но безуспешно.
activity_re = re.compile(r'\s(\d+-\w+(-\w+)?)\s+(.+)(\s{2,})')
for line in lines_read.split('\n'):
line=activity_re.search(line)
if line:
print(line.group(1))
Пример желаемого вывода для учетной записи 1010. В этом случае нет номера «Центр», поэтому он пуст. ![enter image description here](https://i.stack.imgur.com/KH2Ra.png)