Przetwarzanie plików tekstowych

0

Szukam jakiegoś mini-stosu (modułów, a niekoniecznie komponentów nie-pythonowych), które pozwolą mi w pythonie rozwiązać następujący problem:

  1. Mam ileś tam plików CSV, które są logicznie powiązane i przechowują hierarchię encji (można o tym myśleć jak o powiązanych tabelach bazodanowych)
   Root
     --Child1
	      --GrandChild1
		  --GrandChild2
	 ---Child2
	      --GrandChild3
	 ---Child3	   
		  --GrandChild4
		  --GrandChild5
		     ...
		      --Gra*ChildN 
			 ...
  1. Chcę mieć możliwość wystartowania z dowolnego poziomu, wybrać interesujące mnie atrybuty i iść w kierunku Roota, tak by na końcu mieć zestaw atrybutów od liścia do Roota.
    Z roota wybieram atrybuty A,B (z A,B,C,...)
    Z Child3 wybieram atrybuty X,Y (spośród X,Y,Z,...)
    Z Grand*ChildN wybieram rekordy, dla których attrX=foo && attrY=BAR etc.

(Czyli odpowiednik JOINa na interesujących encjach)

  1. Typów encji jest ok. 100

  2. Pliki nie zmieszczą się w pamięci RAM.

  3. Idealnie, gdyby był jakiś moduł pozwalający nawigować po takiej strukturze z wykorzystaniem jakiegoś "języka zapytań", zaś same zapytania można przechowywać na zasadzie konfiguracji.

Ktoś coś kojarzy, przetwarzał w ten sposób pliki tekstowe i może podzielić się doświadczeniami?

Normalnie załadowałbym do postgresa i korzystał z zapytań bazodanowych, ale tu okoliczności przyrody są takie, że goły python jest mocno preferowany.

1

A sqlite3?

0

Sqlite3 jest zamiennikiem dla postgresa i w mojej obecnej sytuacji (ograniczona przestrzeń dyskowa) niewiele pomaga. Myślałem o pandach, ale mam wrażenie, że jak będę chciał zrobić joina między zbiorami, które nie mieszczą się w pamięci, to będę musiał sobie takiego joina napisać.

Łatwiej (i taniej) będzie zawnioskować o dodatkową przestrzeń dyskową zamiast inwestować w jakieś wyszukane rozwiązanie.

0

Generalnie możesz też zainwestować w plik wymiany na dysku, wtedy wydajność będzie obniżona, ale w kodzie nie będzie potrzeby niczego zmieniać.

1 użytkowników online, w tym zalogowanych: 0, gości: 1