Python - Разделение несовместимых столбцов в текстовом файле с непоследовательным интервалом и разреженными данными
У меня есть текстовый файл, который является банковской выпиской OCRed, которую я обрабатываю с использованием Python 2.7. В настоящее время я извлекаю название банка, реквизиты счета и список транзакций. Список транзакций в настоящее время хранится в списке списков, где каждая строка в выражении представляет собой отдельную запись в списке списков, сохраняющих пробелы, как таковые:
[[' 01 Apr 16 DD FAKE DESCRIPTION1 24.20 1,157.78 '],
[' 02 Apr 16 ATM FAKE DESCRIPTION2 '],
[' FAKE DESCRIPTION2 50.00 1,107.78 '],
etc...]
Пример текстового файла доступен здесь -> Текстовый файл с сохранением пробелов. ВСЕ БЕЛЫЕ ПРОСТРАНСТВА - БЕЛЫЕ ПРОСТРАНСТВА, НЕ ТАБЛИЦЫ.)
Как видно из файла, существует некоторая структура данных, в которой всего 6 столбцов, хотя не каждый из них заполнен. Моя цель - создать список транзакций, отсортированных по типу транзакции (второй столбец) или по тому, является ли транзакция дебетовой или кредитной (столбцы 4 или 5), однако одна транзакция может занимать несколько строк.
Я искал форумы и документацию различных библиотек, но не могу найти надежный способ достижения этого. На данном этапе сортировка не важна. Я ищу способы последовательного создания строк данных, которые я могу позже обработать.
Следовательно, желаемый результат должен выглядеть примерно так (обратите внимание на пустой 5-й столбец, поскольку это дебетовые транзакции):
[['01 Apr 16', 'DD', 'FAKE DESCRIPTION1', '24.20', '','1,157.78']
['02 Apr 16', 'ATM', 'FAKE DESCRIPTION2 FAKE DESCRIPTION2', '50.00', '', '1,107.78']
['04 Apr 16', ')))', 'FAKE DESCRIPTION3 FAKE DESCRIPTION3', '8.60', '', '1,099.18']
etc...]
Я пытался с помощью re.split(r'\s{2,}',tr[0])
а также re.split(r'(\s+)', tr[0])
но они не дают желаемого результата. Я также попробовал:
regex = r'^(.+)\b\s{2,}\b(.+)\s+(\d+)\s+(\d+)\s+(.+)\s+(\d+)'
for line in s.splitlines():
lst = [i.strip() for j in re.findall(regex, line) for i in j if j]
print(lst)
... как предложено здесь -> ссылка, но все равно не повезло.
Любые идеи, есть ли библиотека, которая может сделать такую вещь или некоторый простой код, который может приблизить меня к решению. Я очень новичок в Python, но влюблен в него.
Заранее спасибо.