1

Onderwerp: Python - grote txt file inlezen en splitsen-

Beste lezers,
Ik heb een grote logfile bijna 7GB groot.
Die heb geprobeerd in te lezen in excel maar die gaat stuk op de grootte van de file.
De file wordt elke nacht gemaakt met een python script en gezip.
Na unzippen krijg ik een grote file zo'n 7GB.
De regels zijn gemarkeerd met "b' ...... info ...... '"
Dus gescheiden door b'  aan het begin en aan het eind met '
Het aantal regels zijn meer dan 550.000.

In de regel staat een stuk tekst waarop ik wil filteren, die regel moet apart worden weggeschreven voor verwerking op een later tijd stip.
Dan houd ik minder regels over.
Daarna kan die regels verder verwerken.

ik heb gegoogleld  maar daar wordt ik niets wijzer van.

kan iemand mij op weg helpen.

alvast bedankt.

2 Laatst bewerkt door pascal (25 Nov 2015 19:48:00)

Re: Python - grote txt file inlezen en splitsen-

cat zevengigashit.txt | grep ^b\ '...... info .....\ ' > nietzogroteshit.txt    ?

4 koppen koffie.
excel ellende.
klaar.

Pascal's Blobfree Homepage
Een dag geen NedLinux is een dag niet geleefd

Re: Python - grote txt file inlezen en splitsen-

Nee  helaas dat gaat niet.
excel geeft fout in het geheugen.
Als het wel in excel gaat met de grootte zo'n 4 GB , dan doet mijn computer er zo'n 12 uur over.

4 Laatst bewerkt door devtroll (25 Nov 2015 20:29:56)

Re: Python - grote txt file inlezen en splitsen-

kan je niet beter een CSV hier van bouwen en dit in mysql/mariadb pompen? Dat is niet meer een spreadsheet maar een heuze db.

ACAB: All computers are broken. https://medium.com/message/everything-i … e5f33a24e1 "I've decided that you need gray hair and hemorrhoids to be a consultant.
The gray hair makes you look distinguished & the hemorrhoids make you look concerned."

5

Re: Python - grote txt file inlezen en splitsen-

Rinus,

Ik snap je niet.   die regel doet precies waar je om gevraagd hebt.
Ik bouw je in een kwartier tijd een perl scriptje dat het anders voor je regelt,
maar dan is het werk en geen hobbie meer !

Pascal's Blobfree Homepage
Een dag geen NedLinux is een dag niet geleefd

Re: Python - grote txt file inlezen en splitsen-

Pascal

het bestand wordt door data leverancier aangeleverd.
dat script draait op mijn PI2
middernacht maakt het script ( heb ik ook aangeleverd gekregen in puython) backup van het bestand.
dat bestand wil ik regels filteren naar wat ik wil gebruiken.
excel geeft het op met vba, vba leest het log bestand in en geeft foutmelding geheugen probleem.
gebruik html in import dan duurt dit wel erg lang.

zo ziet 3 regel eruit
b' is begin nieuwe regel 
'   einde regel

b'<?xml version="1.0" encoding="UTF-8"?>\r\n<tmi8:VV_TM_PUSH xmlns:tmi8="http://bison.connekt.nl/tmi8/kv6/msg">\r\n<tmi8:SubscriberID>NDOV_KV6</tmi8:SubscriberID>\r\n<tmi8:Version>BISON 8.1.0.0</tmi8:Version>\r\n<tmi8:DossierName>KV6posinfo</tmi8:DossierName>\r\n<tmi8:Timestamp>2015-10-29T01:00:10+01:00</tmi8:Timestamp>\r\n<tmi8:KV6posinfo>\r\n<tmi8:DEPARTURE>\r\n<tmi8:dataownercode>CXX</tmi8:dataownercode>\r\n<tmi8:lineplanningnumber>M300</tmi8:lineplanningnumber>\r\n<tmi8:operatingday>2015-10-28</tmi8:operatingday>\r\n<tmi8:journeynumber>1839</tmi8:journeynumber>\r\n<tmi8:reinforcementnumber>0</tmi8:reinforcementnumber>\r\n<tmi8:userstopcode>57330100</tmi8:userstopcode>\r\n<tmi8:passagesequencenumber>0</tmi8:passagesequencenumber>\r\n<tmi8:timestamp>2015-10-29T01:00:09+01:00</tmi8:timestamp>\r\n<tmi8:source>VEHICLE</tmi8:source>\r\n<tmi8:vehiclenumber>9203</tmi8:vehiclenumber>\r\n<tmi8:punctuality>10</tmi8:punctuality>\r\n</tmi8:DEPARTURE>\r\n<tmi8:ONSTOP>\r\n<tmi8:dataownercode>CXX</tmi8:dataownercode>\r\n<tmi8:lineplanningnumber>A331</tmi8:lineplanningnumber>\r\n<tmi8:operatingday>2015-10-28</tmi8:operatingday>\r\n<tmi8:journeynumber>152</tmi8:journeynumber>\r\n<tmi8:reinforcementnumber>0</tmi8:reinforcementnumber>\r\n<tmi8:userstopcode>61190720</tmi8:userstopcode>\r\n<tmi8:passagesequencenumber>0</tmi8:passagesequencenumber>\r\n<tmi8:timestamp>2015-10-29T01:00:10+01:00</tmi8:timestamp>\r\n<tmi8:source>VEHICLE</tmi8:source>\r\n<tmi8:vehiclenumber>5384</tmi8:vehiclenumber>\r\n<tmi8:punctuality>0</tmi8:punctuality>\r\n</tmi8:ONSTOP>\r\n</tmi8:KV6posinfo>\r\n</tmi8:VV_TM_PUSH>\r\n'
b'<?xml version="1.0" encoding="utf-8"?>\r\n<tmi8:VV_TM_PUSH xmlns:tmi8="http://bison.connekt.nl/tmi8/kv6/msg">\r\n  <tmi8:SubscriberID>GOVI</tmi8:SubscriberID>\r\n  <tmi8:Version>BISON 8.1.1.0</tmi8:Version>\r\n  <tmi8:DossierName>KV6posinfo</tmi8:DossierName>\r\n  <tmi8:Timestamp>2015-10-29T01:00:10.6029402+01:00</tmi8:Timestamp>\r\n  <tmi8:KV6posinfo>\r\n    <tmi8:ONROUTE>\r\n      <tmi8:dataownercode>RET</tmi8:dataownercode>\r\n      <tmi8:lineplanningnumber>48</tmi8:lineplanningnumber>\r\n      <tmi8:operatingday>2015-10-28</tmi8:operatingday>\r\n      <tmi8:journeynumber>55499</tmi8:journeynumber>\r\n      <tmi8:reinforcementnumber>0</tmi8:reinforcementnumber>\r\n      <tmi8:userstopcode>HA1379</tmi8:userstopcode>\r\n      <tmi8:passagesequencenumber>0</tmi8:passagesequencenumber>\r\n      <tmi8:timestamp>2015-10-29T01:00:06.722+01:00</tmi8:timestamp>\r\n      <tmi8:source>VEHICLE</tmi8:source>\r\n      <tmi8:vehiclenumber>2055</tmi8:vehiclenumber>\r\n      <tmi8:punctuality>44</tmi8:punctuality>\r\n      <tmi8:distancesincelastuserstop>134</tmi8:distancesincelastuserstop>\r\n      <tmi8:rd-x>96301</tmi8:rd-x>\r\n      <tmi8:rd-y>434359</tmi8:rd-y>\r\n    </tmi8:ONROUTE>\r\n    <tmi8:DEPARTURE>\r\n      <tmi8:dataownercode>RET</tmi8:dataownercode>\r\n      <tmi8:lineplanningnumber>50</tmi8:lineplanningnumber>\r\n      <tmi8:operatingday>2015-10-28</tmi8:operatingday>\r\n      <tmi8:journeynumber>55745</tmi8:journeynumber>\r\n      <tmi8:reinforcementnumber>0</tmi8:reinforcementnumber>\r\n      <tmi8:userstopcode>HA1350</tmi8:userstopcode>\r\n      <tmi8:passagesequencenumber>0</tmi8:passagesequencenumber>\r\n      <tmi8:timestamp>2015-10-29T01:00:05.754+01:00</tmi8:timestamp>\r\n      <tmi8:source>VEHICLE</tmi8:source>\r\n      <tmi8:vehiclenumber>2041</tmi8:vehiclenumber>\r\n      <tmi8:punctuality>-303</tmi8:punctuality>\r\n    </tmi8:DEPARTURE>\r\n  </tmi8:KV6posinfo>\r\n</tmi8:VV_TM_PUSH>'

ik hoop dat het nu wat duidelijk is.
misschien iemand een idee
dit voor mij ook een hobby

7

Re: Python - grote txt file inlezen en splitsen-

Een stukje van een koek.
Maar moet je ook nog vertellen welke informatie je uit dat bestand nu echt nodig hebt.
Waarom probeer je niet zelf iets te scripten.  ik geef je een tip, met een paar regexpen haal je alle info er zo uit en zonder die misselijke soap baggger zal die file een stuk kleiner zijn

Pascal's Blobfree Homepage
Een dag geen NedLinux is een dag niet geleefd

Re: Python - grote txt file inlezen en splitsen-

Ik zou de regels met data RET eruit willen halen 
dus als regel <tmi8:dataownercode>RET</tmi8:dataownercode> sla regel op, voor latere verwerking
dan wordt de file kleiner en kan ik de rest weggooien of ik zou later de metro er nog bij kunnen nemen, maar nu even niet.
die regels die overhoud moet verder uit elkaar trekken, maar dat is dan voor later.

ik heb een script gekregen om direct te verwerken zodra er veranderingen zijn, maar die werkt niet op mijn PI, omdat python 2.7 moet zijn on arch linux installeert automatisch ook 3.5.
daarbij moet pyzmq in python 2.7 gezet worden maar hij wordt ook in python 3.5 gezet.

daardoor krijg ik een foutmelding, de persoon die dit heeft aangeleverd geeft geen verdere ondersteuning, dus ik moest het zelf maar uitvinden.
Dus ik ben verder gegaan met zoeken en uitproberen, maar dat helpt niet, dus vandaar mijn vraag.

dus die grote logfile komt uit het eerste script zonder erbij te vertellen hoe deze verwerkt kan worden, dat is de crux.
dus het zou voor mij voorlopig een mooie tijdelijke oplossing zijn om dit voor elkaar te krijgen.

die regels die ik eruit wil hebben  bestaat weer uit meerdere berichten die ik hopelijk later naar een csv - bestand kan verwerken

want zijn regexpen?

9

Re: Python - grote txt file inlezen en splitsen-

regexp is short for regular expression    ofwel Reguliere Expressie
Verdiep je er eens in icm perl dan ben je zo klaar.

Pascal's Blobfree Homepage
Een dag geen NedLinux is een dag niet geleefd