Nowe posty

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

Offline

  • Users
  • Użytkownik
  • **
  • Wiadomości: 63
    • Zobacz profil
[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.

Offline

  • Users
  • Użytkownik
  • **
  • Wiadomości: 63
    • Zobacz profil
[Python] wczytywanie
« Odpowiedź #1 dnia: 2013-08-25, 22:12:43 »
Juz udalo mi sie rozwiazac ten problem! :)
Temat do zamkniecia.

Offline Kamil Leduchowski

  • Users
  • Stały bywalec
  • ***
  • Wiadomości: 152
    • Zobacz profil
[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