2013-03-22 34 views
13

Mam plik danych z kolumn jakZachowaj spacje przy użyciu split() oraz join() w Pythonie

BBP1 0.000000 -0.150000 2.033000 0.00 -0.150 1.77 

a poszczególne kolumny są oddzielone od siebie różną liczbą białych znaków.

Moim celem jest odczytanie w tych wierszach, wykonanie matematyki w kilku wierszach, na przykład pomnożenie kolumny 4 przez 0,95 i zapisanie ich do nowego pliku. Nowy plik powinien wyglądać jak oryginalny, z wyjątkiem wartości, które zmodyfikowałem.

Moim podejściem byłoby czytanie w wierszach jako pozycje listy. A potem użyłbym split() w tych wierszach, które mnie interesują, co da mi podlistę z indywidualnymi wartościami kolumn. Następnie wykonuję modyfikację, a następnie wpisuję linie z listy do nowego pliku tekstowego.

Problem polega na tym, że mam zmienną liczbę białych znaków. Nie wiem, jak wprowadzić je z powrotem w ten sam sposób, w jaki je przeczytałem. Jedyny sposób, jaki mogłem wymyślić, to zliczyć postacie w linii, zanim je podzielę, co byłoby bardzo uciążliwe. Czy ktoś ma lepszy pomysł na rozwiązanie tego problemu?

+0

jeśli plik jest w ustalonym formacie, użycie tej samej liczby spacji może zmienić szerokość kolumny. Można użyć formatowania ciągów, aby zachować format pliku, np. "{{4s} {: 10.6f} {: 10.6f} {: 11.6f} {: 5.2f} {: 6.3f} {: 6.2f}". format (* wiersz) ', gdzie' wiersz = ["BBP1", 0,0, -0,15, 0,95 * 2,033, 0,0, -0,15, 1,77] ". – jfs

Odpowiedz

18

Chcesz użyć re.split() w tym przypadku z grupy:

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

wrócą obie kolumny i spacje, dzięki czemu można dołączyć linię później z taką samą ilością białych znaków zawartych.

Przykład:

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

Prawdopodobnie nie chcesz usunąć przełamane od końca.

+0

Dzięki, działa to jak magia! –

-1

Inny sposób to zrobić:

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

Jeżeli określamy argumentu spacja w podzielonym funkcji, tworzy listy bez jedzenia kolejne spacje. Tak więc oryginalne liczby znaków spacji są przywracane po funkcji "dołącz".

Powiązane problemy