Example #1
0
class HelpersTests(unittest.TestCase):
    def setUp(self):
        fname = 'test_data/test_deep_header_data.csv'
        self.table = Table(fname, header=True, how_deep=0)

    def test_basic_slugify(self):
        text = self.table._slugify(u'Zażółć Gęślą Jaźń')
        self.assertEqual(u'zazolc-gesla-jazn', text)

    def test_slugify_with_multiple_nonalphanums_in_row(self):
        text = self.table._slugify(u'Zażółć,  Gęślą-Jaźń')
        self.assertEqual(u'zazolc-gesla-jazn', text)

    def test_slugify_with_nonalphanums_at_front_and_back(self):
        text = self.table._slugify(u'  Zażółć,  (Gęślą - Jaźń)')
        self.assertEqual(u'zazolc-gesla-jazn', text)

    def test_basic_slugify_with_str_argument(self):
        text = self.table._slugify('Zażółć Gęślą Jaźń')
        self.assertEqual(u'zazolc-gesla-jazn', text)

    def test_basic_slugify_with_numeric_argument(self):
        text = self.table._slugify(2093826483)
        self.assertEqual(u'2093826483', text)

    def test_get_opts_with_empty_arguments(self):
        a, b, c = self.table._get_opts({})
        self.assertEqual({'delimiter': ';', 'quotechar': '"'}, a)
        self.assertTrue(b)
        self.assertEqual(0, c)

    def test_get_opts_with_None_argument(self):
        self.assertRaises(AttributeError, self.table._get_opts, None)

    def test_get_overriding_defaults(self):
        opts = {'delimiter': ',', 'quotechar': "'",
                'header': False, 'how_deep': 1}
        a, b, c = self.table._get_opts(opts)
        self.assertEqual({'delimiter': ',', 'quotechar': "'"}, a)
        self.assertFalse(b)
        self.assertEqual(1, c)
Example #2
0
 def setUp(self):
     fname = 'test_data/test_deep_header_data.csv'
     self.table = Table(fname, header=True, how_deep=0)
# -*- coding: utf-8 -*-
# zobaczmy, jak w naszych kilku przykładowych projektach
# rozkładają się finanse!

from meerkat import Table

# wczytujemy tabelkę
tabelka = Table('dane.csv')

# słownik, w którym będziemy zbierali informacje, ile kasy 
# dostał z UE każdy z beneficjentów na naszej liście
wyniki = {}

# na chwilę wyjmujemy sobie z tabelki dwie kolumny
# tę zawierającą kwoty dofinansowania z UE oraz
# tę z nazwami beneficjentów
dofinansowania = tabelka.column('Dofinansowanie UE') 
beneficjenci   = tabelka.column('Nazwa beneficjenta')

# używamy funkcji zip(lista, lista), dzięki której 
# będziemy mogli przejechać przez naszą tabelę równolegle
# po kolumnie z dofinansowaniem oraz z nazwą beneficjenta
for kasa, nazwa in zip(dofinansowania, beneficjenci):
    # jeśli nie widzieliśmy jeszcze takiego beneficjenta to 
    # stwórzmy dla niego miejsce w słowniku z wynikami
    # zaczynając od kwoty dofinansowania równej zero!
    wyniki.setdefault(nazwa, 0.0)
    # dodajemy do kwoty zebranej przez danego beneficjenta
    # nowo napotkaną kwotę ( x += 3 to skrót od x = x + 3)
    wyniki[nazwa] += kasa
# przyjmujemy to kilka założeń:
#   - kolumny oddzielone są średnikami (delimiter=';')
#   - używamy cudzysłowów do oznaczenia tekstu (quotechar='"')
#   - plik posiada nagłówek w pierwszym wierszu (header=True)
#   - badamy typy kolumn (numeryczna/tekstowa) w calym pliku (how_deep=0)
# wszystkie te parametry mogą być zmianione i gdybyśmy nie
# mieli nagłówka to napisalibyśmy:
#
#   tabelka = Table('dane.csv', header=False)
#
# podobnie postąpilibyśmy z pozostałymi parametrami.
# jeśli to wszystko nie jest do końca jasne - stanie się
# w praktyce - zrozumienie jest wprost proporcjonalne
# do ilości czerwonego na ekranie ;)
print "Wczytuję tabelkę"
tabelka = Table('dane.csv')
print "Tabelka wczytana!"
print ""
# czasmi zobaczymy ostrzeżenie: znaleziono puste komórki
# w tabeli. będzie to ważne dla obliczeń, które będziemy
# wykonywali na tej tabeli. to nie błąd, ale trzeba mieć
# to w pamięci wyliczając np. średnią wartość kolumny

# możemy odpytać naszą tabelkę o podstawowe rzeczy, np.:
print "Liczba wierszy: %s" % tabelka.rows_count
print "Liczba kolumn: %s" % tabelka.cols_count
print ""

# nagłówek przechowywany w zmiennej tabelka.header to
# lista słowników - po jednym dla każdej kolumny.
# każdy słownik posiada cztery klucze. Np.:
# coding: utf-8

# importowanie regexu i meerkata
import re
import json
from meerkat import Table

#importowanie bazy danych
tabelka = Table('dane.csv', delimiter=',')

#nazywanie kolumn do pozniejszego uzytku
numery_rejestrowe = tabelka.column('register_number')
identyfikatory_zabytkow= tabelka.column('relic_id')
datowanie_zabytku = tabelka.column('dating')

#definiowane funkcji do pozniejszego uzytku
def wyczysc_ino_date(data):

    #slownik o tym, jak czyscic dane z datowaniem
    czyscik = {
         'ok.'      : '',
         'kon.'     : 'koniec',
        u'2 poł.'   : '2 polowa',
        u'1 ćw.'    : '1 cwiercwiecze',
         'pocz.'    : 'poczatek',
        u'w połowie': 'w polowie',
     'w lowowie XIX': 'w polowie',
         'IX-08'    : '1908-1909',
         'VII-03'   : '1903-1907',
         '1095'     : '1905',
         'XIX/XX'   : '1900',