在Python

时间:2016-07-27 10:34:27

标签: python parsing text-files python-3.5

我是Python的新手,我遇到了问题。

我要比较两个文件之间的值,一个是Excel文件(我没有任何问题),另一个是用空格格式化的文本文件和#34 ;块"线条。

文本文件是这样的:

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.array(如果它更好),它由txt的每一列(B-Dat Abs / Empfae BEL等)+每行的LT代码组成。

TXT就像"对于这个LT代码,这些动作是......在这一天,有了这个ID,这个数量就消失了#34;

我只是写下这段代码,但我不知道如何处理...我已经尝试了np和标准模块...

with open("elementi/june/VW.txt", "r") as ins:
testo_VW = []  # lines length 77 chars
for line in ins:
    testo_VW.append(line)  


codiceCasse = [
    "VW0012",
    "001210",
    "114003",
    "004147",
    "151774",
    "151743",
    "511912",
    "525411",
    "528879",
    "006280"
]

indiciVW = []
codcasseVW = []
b_dat = []  # array di date prese dal file VW
abs_empfae = []
bel = []
entl = []
bel_nr = []
wk_lg_lr = []

count = 0
for i in range(0, len(testo_VW)):
    if any(x in testo_VW[i] for x in codiceCasse):  # ----> trovo i numeri delle casse nel txt
        riga = testo_VW[i]
        codice_cassa = riga[8:14]
        i += 6
        count += 1
你可以给我任何建议吗?或者也许是实现代码的东西......

提前谢谢。

1 个答案:

答案 0 :(得分:1)

一种方法是一次读取一行中的文件,并使用正则表达式来确定它是否是数据行之一。如果是,请附加到列表中。您还需要记下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    

这将为您提供以下服务:

[['VW0012', '050416', '000590178', '0', '1', '169', '50', '16103483', '49-12-00', 'FERSR IM SY'], ['VW0012', '050416', '000590178', '0', '1', '168', '50', '16103484', '49-16-00', 'FERSR IM SY'], ['VW0012', '210516', '000590120', '1', '0', '164', '51', '36873', '37-  -  ', '000590120'], ['VW0012', '230516', '000590178', '1', '0', '165', '51', '16105229', '49-16-00', 'MPYTRRIN'], ['VW0012', '310516', '000590030', '2', '0', '163', '51', '697321', '26-  -  ', 'KOR.GJKE.MB'], ['VW0012', '010616', '000590120', '2', '0', '162', '21', '39694', '37-  -  ', '000590120'], ['VW0012', '010616', '000710030', '12', '0', '174', '21', '627948', '21-  -  ', '000710030'], ['VW0012', '060616', '000590030', '41', '0', '207', '21', '698299', '26-  -  ', '000590030'], ['VW0012', '080616', '000590120', '1', '0', '193', '21', '31456', '37-  -  ', '000590120'], ['VW0012', '080616', '000590120', '1', '0', '194', '21', '31456', '37-  -  ', '000590120'], ['VW0012', '080616', '000710030', '2', '0', '196', '21', '630076', '21-  -  ', '000710030'], ['VW0012', '080616', '000710030', '2', '0', '198', '21', '630076', '21-  -  ', '000710030'], ['VW0012', '080616', '000710030', '4', '0', '202', '21', '630076', '21-  -  ', '000710030'], ['VW0012', '090616', '000590178', '2', '0', '203', '21', '491379', '49-  -  ', '000590178']]