Nowe posty

xx Problem ze sterownikami. (5)
2024-04-13, 21:25:16
xx Instalacja xfce4 (2)
2024-04-13, 16:20:17
xx Serie kompilacji bez instalacji dla “emerge” w Gentoo (2)
2024-04-08, 18:40:04
xx Plasma 6 w Neonie ssie trochę mniej ... (17)
2024-04-05, 10:03:46
xx Problem z Linux Lite po instalacji (3)
2024-04-03, 14:23:40
xx Jak właczyć num locka przy starcie systemu debian 12? (12)
2024-04-02, 17:43:54
xx Brak dźwieku w systemie. (5)
2024-04-02, 16:13:41
xx Dystrybucja pod HP Omen (7)
2024-03-29, 11:33:05
xx [Poradnik] Wyszukiwanie Sterowników (2)
2024-03-27, 21:08:23
xx Ile pingwinów? (1)
2024-03-27, 08:59:24

Autor Wątek: [Python] wczytywanie  (Przeczytany 6001 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