Mateusz K.

Mateusz K. Project manager and
python programmer

Temat: Praca z plikiem txt - problem

Witam,
mam następujący problem, mam nadzieję, że ktoś pomoże mi go rozwiązać.
Muszę przetworzy plik txt o takiej strukturze danych:

Occasion #1
Sample# Indiv# Loc1 Loc2 Loc3 Loc4
Spl501, 148 0409 0405 0810 0606
Spl502, 80 0103 0110 0103 0104
Spl503, 66 0505 0709 0310 0310
Spl504, 46 0107 0108 0607 0307

Occasion #1
Sample# Indiv# Loc1 Loc2 Loc3 Loc4
Spl6, 2 0102 0107 0106 0606
Spl7, 171 0203 0305 0406 0508
Spl8, 114 0506 0507 0305 0808
Spl9, 73 0506 0102 0104 0810


Zależy mi na utworzeniu listy zawierającej drugą kolumnę(Indiv#). Problem polega na tym że ilosc spacji pomiędzy kolumną Sample# i Indiv# są różne. Raz jest to 9 spacji, innym razem nawet 6. Jeszcze lepiej byłoby gdyby po każdym nagłówku
Occasion #1
Sample# Indiv# Loc1 Loc2 Loc3 Loc4

II (Indiv#) kolumna zapisywana była do nowej listy.
Czy ktoś może pomóc mi rozwiązać mój problem, czy możecie podpowiedzieć gdzie szukac, czego szukać.
Pozdrawiam
Mateusz

konto usunięte

Temat: Praca z plikiem txt - problem


a = '''Spl6, 2 0102 0107 0106 0606
Spl7, 171 0203 0305 0406 0508
Spl8, 114 0506 0507 0305 0808
Spl9, 73 0506 0102 0104 0810'''

for i in a.split('\n'): print i.split()[1]


Interesuje Cię metoda str.split().

Zakładając, że w a masz cały plik, to w b będziesz mieć interesującą Cię listę.


b = [x.split()[1] for x in (y for y in a.split('\n'))]


Jeśli plik miałby nagłówek, to trzeba go urżnąć


b = [x.split()[1] for x in (y for y in a.split('\n'))][1:]


a jeszcze lepiej pominąć puste linie...


b = [x.split()[1] for x in (y for y in a.split('\n') if y)][1:]
Łukasz K. edytował(a) ten post dnia 08.03.12 o godzinie 18:49
Mateusz K.

Mateusz K. Project manager and
python programmer

Temat: Praca z plikiem txt - problem

Dzięki, jeszcze całkiem nie rozwiązałem mojego problemu, ale jestem już bardzo blisko.
Pozdrawiam
Mateusz

konto usunięte

Temat: Praca z plikiem txt - problem

Może regexpem?
"[A-Za-z0-9]*\,\s*([0-9]*)" - moduł nazywa się re - w dokumentacji są przykłady.
Polecam też program kiki. Można wkleić sobie przykładowy tekst, a regexpa można
z miejsca użyć w kodzie pythonowym. Można też zrobić tak, żeby regexpem
wyłapać poszczególne sekcje. Tu jest tylko jedna wartość, ale można zrobić tak,
żeby regexp zwracał słownik - potem po dane można sięgać po indeksie. Przydaje
się, jak się wraca do kodu po paru miesiącach.

konto usunięte

Temat: Praca z plikiem txt - problem

Ja dla odmiany polecam moduł csv (z uwzglednieniem opcji skipinitialspace).
Michał Jastrzębski

Michał Jastrzębski Django-fu, phpjutsu,
sql-do

Temat: Praca z plikiem txt - problem

re.sub("\t+", ";", zawartosc_pliku)

konto usunięte

Temat: Praca z plikiem txt - problem

Jakie wady ma split()?

konto usunięte

Temat: Praca z plikiem txt - problem

Wolałbym z teksem pracować w Ruby albo Perlu, ale jak trzeba koniecznie użyć Pythona to może coś takiego:

import re

kolumna2 = []

for line in open('myfile','r').readlines():
kolumny = [i for i in re.split("\s", str) if i]
if len(kolumny) == 6 and kolumny[1] != 'Indiv#':
kolumna2.append(kolumny[1])

# Wydrukuj jako kolumnę
print '\n'.join(kolumna2)

Mam nadzieję, że pomoże.

Następna dyskusja:

xhtml2pdf - problem z polsk...




Wyślij zaproszenie do