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)
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',