Python - 在文本文件中拆分不一致的列,其间距和稀疏数据不一致

时间:2016-11-20 19:45:43

标签: python parsing formatting text-parsing

我有一个文本文件,它是我正在使用Python 2.7处理的OCRed银行对帐单。我目前提取银行名称,帐户详细信息和交易清单。事务列表当前存储在列表列表中,语句中的每一行都是保留空格的列表中的单个条目,如下所示:

[[' 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...] 

此处提供示例文本文件 - > Text file preserving white spaces。所有白色空间都是白色空间而不是标签。)

从文件中可以看出,数据有一些结构,其中总共有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)

...正如此处所建议的那样 - > link,但仍然没有运气。

是否存在可以执行此类操作的库或某些简单代码可以让我更接近解决方案的任何想法。我是Python的新手,但爱上它。

提前致谢。

0 个答案:

没有答案