在Python中读取复杂的文本文件

2024-06-26 10:31:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python的新手,我有个问题。在

我要比较两个文件之间的值,一个是Excel文件(我对它没有任何问题),另一个是用空格和“块”行格式化的文本文件。在

文本文件如下:

LISON                 Kontoauszug                          10.07.2016           20:13
                     Monat/Jahr: 06.16                               Seite:     1

Lief. : AKJsjak0  (V Sachbearb.: Name    Surname
LT    : VW0012    Lief.-Eigene.:    0                  Tel.: xxxxxxxxxx

Saldo Vorm.:     170  BEL.:     253 ENTL:     181 Endsaldo:      242

B-Dat  Abs/Empfae   BEL.    ENTL   Saldo  BA  Bel-Nr    WK-LG-LR   Bemerkung
050416 000590178       0       1     169  50  16103483  49-12-00   FERSR IM SY
050416 000590178       0       1     168  50  16103484  49-16-00   FERSR IM SY
050516 000590030       0       2     166  50  16104633  16-01-K1
160516 000590030       0       1     165  50  16104980  16-01-K1
170516 000590030       0       2     163  50  16105015  16-01-K1
210516 000590120       1       0     164  51     36873  37-  -        000590120
230516 000590178       1       0     165  51  16105229  49-16-00   MPYTRRIN
240516 000590030       0       2     163  50  16105243  16-01-K1
300516 000590030       0       1     162  50  16105484  16-01-K1
300516 000590030       0       1     161  50  16105483  16-01-K1
310516 000590030       2       0     163  51    697321  26-  -     KOR.GJKE.MB
310516 000590030       0       2     161  50  16105536  16-01-K1
310516 000590030       0       1     160  50  16105542  16-01-K1
010616 000590120       2       0     162  21     39694  37-  -        000590120
010616 000710030      12       0     174  21    627948  21-  -       000710030
010616 000590120       0       1     173  50     39694  37-  -
030616 000712550       0       2     171  10  16105627  28-05-60
030616 000710130       0       1     170  10  16105628  11-01-K4
030616 000448489       0       2     168  10  16105638  18-66-23
030616 000590120       0       2     166  10  16105626  37-75-I4
060616 000590030      41       0     207  21    698299  26-  -         000590030
070616 000712550       0       2     205  10  16105714  28-05-60
070616 000712550       0       1     204  10  16105717  28-08-60
070616 000590178       0       1     203  10  16105710  49-16-
070616 000590120       0       1     202  10  16105702  37-75-I4
070616 000590120       0       1     201  10  16105703  37-78-I4
070616 000590120       0       1     200  10  16105704  37-78-I8
070616 000590235       0       1     199  10  16105707  33-07-K9
070616 000710030       0       1     198  10  16105715  24-06-S2
070616 000590030       0       1     197  10  16105716  16-01-K1
070616 000590030       0       1     196  10  16105722  16-01-K1
070616 000590030       0       3     193  10  16105726  16-01-K1
070616 000711420       0       1     192  10  16105706  40-01-K1
080616 000590120       1       0     193  21     31456  37-  -       000590120
080616 000590120       1       0     194  21     31456  37-  -       000590120
080616 000710030       2       0     196  21    630076  21-  -     000710030
080616 000710030       2       0     198  21    630076  21-  -     000710030
080616 000710030       4       0     202  21    630076  21-  -        000710030
080616 000710136       0       1     201  10  16105769  15-01-F4
090616 000590178       2       0     203  21    491379  49-  -       000590178
090616 000710030       0       1     202  10  16105842  21-01-P0
090616 000710030       0       4     198  10  16105843  21-01-P0
-------------------------------------------------------------------------------
-                                                              -
BA=10 Entlast. durch Lieferschein       BA=11 Belast. durch Lieferschein
BA=20 Entlast. durch PV-Schein          BA=21 Belast. durch PV-Schein
BA=22 Entlast. durch MRV-/Lieferschein  BA=23 Belast. durch MRV-  /Lieferschein
BA=30 Entlast. durch Querverkehr        BA=31 Belast. durch Querverkehr
BA=50 Entlast. durch Korrektur          BA=51 Belast. durch Korrektur
BA=70 Entlast. durch Inventurangleich   BA=71 Belast. durch   Inventurangleich
BA=NE Entlast. durch NeG neutr. Buch.   BA=NB Belast. durch NeG neutr.   Buch.
BA=NK Neukauf                           BA=VS Verschrottung
BA=NW Neukauf Wertersatz                BA=NR Neukauf Recycling
BA=VR Verschrottung Recycling





LISON                 Kontoauszug                          10.07.2016        20:13
                     Monat/Jahr: 06.16                              Seite:   2

以此类推上千行。。。 我需要一张单子(也许?)或者np.数组(如果更好的话)这是由txt的每一列组成的(B-Dat Abs/Empfae-BEL等)+每行的LT代码。在

TXT就像是“对于这个LT代码,这些移动是。。。在这一天,有了这个身份证,这个数量就消失了。”

我只是写了这段代码,但我不知道如何处理。。。我试过np和标准模块。。。在

^{pr2}$

你能给我一些建议吗?或者是一些实现代码的东西。。。在

提前谢谢你。在


Tags: 文件代码ltk1文本文件belbai4
1条回答
网友
1楼 · 发布于 2024-06-26 10:31:22

一种方法是一次读取一行中的文件,然后使用正则表达式来确定它是否是数据行之一。如果是,请附加到列表中。您还需要记录LT行,并将其附加到以下任何数据行,如下所示:

import re

data = []
lt = 'unknown'

with open('input.txt') as f_input:
    for row in f_input:
        data_row = re.match(r'(\d+) +(\d+) +(\d+) +(\d+) +(\d+) +(\d+) +(\d+) +(.{8}) +(.*)|LT +: (\w+)', row)

        if data_row:
            if data_row.groups()[0]:
                data.append([lt] + list(data_row.groups()[:-1]))
            else:
                lt = data_row.groups()[-1]

print data    

这将为您提供以下操作:

^{pr2}$

相关问题 更多 >