Vraag Witruimten behouden wanneer u split () en join () in python gebruikt


Ik heb een gegevensbestand met kolommen zoals

BBP1   0.000000  -0.150000    2.033000  0.00 -0.150   1.77

en de afzonderlijke kolommen worden gescheiden door een variërend aantal witruimten.

Mijn doel is om in die regels te lezen, wiskunde op meerdere rijen uit te voeren, bijvoorbeeld kolom 4 met .95 te vermenigvuldigen en ze naar een nieuw bestand te schrijven. Het nieuwe bestand moet er als het oorspronkelijke uitzien, behalve de waarden die ik heb gewijzigd.

Mijn benadering zou in de regels worden gelezen als items van een lijst. En dan zou ik gebruiken split() in die rijen waar ik in geïnteresseerd ben, die me een sublijst met de afzonderlijke kolomwaarden zal geven. Dan doe ik de wijziging, join() de kolommen samen en schrijf de regels uit de lijst naar een nieuw tekstbestand.

Het probleem is dat ik die wisselende hoeveelheid witruimten heb. Ik weet niet hoe ik ze terug moet introduceren op dezelfde manier waarop ik ze inleer. De enige manier die ik kon bedenken was om karakters in de rij te tellen voordat ik ze splitste, wat erg vervelend zou zijn. Heeft iemand een beter idee om dit probleem aan te pakken?


14
2018-03-22 20:25


oorsprong


antwoorden:


U wilt gebruiken re.split() in dat geval, met een groep:

re.split(r'(\s+)', line)

zou beide kolommen teruggeven en de spatie, zodat u later opnieuw kunt deelnemen aan de lijn met dezelfde hoeveelheid witruimte.

Voorbeeld:

>>> re.split(r'(\s+)', line)
['BBP1', '   ', '0.000000', '  ', '-0.150000', '    ', '2.033000', '  ', '0.00', ' ', '-0.150', '   ', '1.77']

Jij waarschijnlijk do wil de nieuwe regel van het einde verwijderen.


19
2018-03-22 20:26



Een andere manier om dit te doen is:

s = 'BBP1   0.000000  -0.150000    2.033000  0.00 -0.150   1.77'
s.split(' ')
>>> ['BBP1', '', '', '0.000000', '', '-0.150000', '', '', '', '2.033000', '', '0.00', '-0.150', '', '', '1.77']

Als we een ruimtetekenargument opgeven in de gesplitste functie, wordt een lijst gemaakt zonder opeenvolgende spaties te eten. Dus de oorspronkelijke aantallen spatietekens worden hersteld na de functie 'join'.


-1
2017-07-08 06:48