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, но влюблен в него.

Заранее спасибо.

0 ответов

Другие вопросы по тегам