Nowe posty

xx Dystrybucja pod HP Omen (6)
Wczoraj o 23:30:08
xx [Poradnik] Wyszukiwanie Sterowników (2)
Wczoraj o 21:08:23
lamp Problem z Linux Lite po instalacji (0)
Wczoraj o 19:50:30
xx Ile pingwinów? (1)
Wczoraj o 08:59:24
xx konfiguracja pale moon (0)
2024-03-24, 21:53:42
xx Plasma 6 w Neonie ssie trochę mniej ... (10)
2024-03-23, 02:38:11
xx problem z instalacja sterowników do karty sieciowej (3)
2024-03-18, 18:10:16
xx Plik abc.001 (1)
2024-03-17, 17:48:27
xx Zlecę dopracowanie programu w MatLab (0)
2024-03-13, 15:28:40
xx Linux Mint 21.3 XFCE brak dźwieku po paru minutach (karta muzyczna zintegrowana) (5)
2024-03-12, 23:07:01

Autor Wątek: [Python] wczytywanie  (Przeczytany 5986 razy)

Gosik

  • Gość
[Python] wczytywanie
« dnia: 2013-08-25, 16:33:37 »
Witam!
Mam nastepujace pliki z danymi i chcialabym wczytac druga kolumne danych i kolejno ja przetorzyc.
Chcialabym wczytac pierwsza kolumne z danymi typu 3/2, 5/2, itd.
Jednakze nie wiem jak to zrobic, by moj skrypt ma traktowal te wartosci jako dzialanie, np 3/2 =1.5
Kolejno chce pomnozyc te wartosci przez liczbe, stad taka potrzeba.
3/2        0.00    SC85
5/2      168.34    SC85
3/2    11519.99    SC85
for line in self.source:
            line = line.strip()
            tokens = line.split()
           
            mom_ped, Energy, ref = tokens
           self.J.append(mom_pend)
w tym przypadku otrzymam tablice stringow.
Czy moglaby prosic o wskazowki.

Gosik

  • Gość
[Python] wczytywanie
« Odpowiedź #1 dnia: 2013-08-25, 22:12:43 »
Juz udalo mi sie rozwiazac ten problem! :)
Temat do zamkniecia.

darkdancer

  • Gość
[Python] wczytywanie
« Odpowiedź #2 dnia: 2013-09-02, 14:31:55 »
Szkoda, że nie podałaś swojego rozwiązania, może ktoś inny czegoś by się nauczył - pozwalam sobie zatem wkleić funkcję, która ten problem rozwiązuje na szybko.
Kod: python [Zaznacz]

def parse(filename):
    import re

    pattern = r'(\\d+)(.)(\\d+)'
    regexp = re.compile(pattern)

    for line in file(filename):
        tokens = line.strip().split()
        match = regexp.match(tokens[0])
        if match:
            arg1, operator, arg2 = match.groups()
            if operator == '/':
                tokens[0] = float(arg1) / float(arg2)
            else:
                raise NotImplementedError
        print tokens

Można też za pomocą eval bezpośrednio zmusić pythona 2.7 aby pierwszą kolumnę potraktował "dosłownie" jako wyrażenie tyle, że wtedy wykona dzielenie całkowite ze względu na format operandów. Aby temu zapobiec można skorzystać z modułu __future__:
Kod: python [Zaznacz]

from __future__ import division

def parse(filename):
 
    for line in file(filename):
        tokens = line.strip().split()
        tokens[0] = eval(tokens[0])

        print tokens