Sono d'accordo con @ jan-steinman che dovresti usare un database per questo tipo di attività. Ci sono molti modi per hackerare insieme una soluzione con uno script di shell come mostrano le altre risposte, ma farlo in questo modo porterà a molta sofferenza se intendi utilizzare e mantenere il codice per un periodo di tempo superiore a solo un progetto usa e getta di un giorno.
Supponendo che tu sia su una scatola Linux, molto probabilmente hai Python installato per impostazione predefinita che include la libreria sqlite3 a partire da Python v2.5. Puoi controllare la tua versione di Python con:
% python -V
Python 2.7.2+
Consiglio di utilizzare la libreria sqlite3 perché è una soluzione basata su file semplice per tutte le piattaforme (incluso all'interno del browser Web!) E non richiede l'installazione di un server. Essenzialmente configurazione zero e manutenzione zero.
Di seguito è riportato un semplice script Python che analizzerà il formato file che hai fornito come esempio e quindi esegue una semplice query "seleziona tutto" e restituisce tutto ciò che è archiviato nel database.
#!/usr/bin/env python
import sqlite3
import sys
dbname = '/tmp/simple.db'
filename = '/tmp/input.txt'
with sqlite3.connect(dbname) as conn:
conn.execute('''create table if not exists people (key integer primary key, name text, job text)''')
with open(filename) as f:
for key in f:
key = key.strip()
name = f.next().strip()
job = f.next().strip()
try:
conn.execute('''insert into people values (?,?,?)''', (key, name, job))
except sqlite3.IntegrityError:
sys.stderr.write('record already exists: %s, %s, %s\n' % (key, name, job))
cur = conn.cursor()
# get all people
cur.execute('''select * from people''')
for row in cur:
print row
# get just two specific people
person_list = [1358726575123, 9973834728345]
cur.execute('''select * from people where key in (?,?)''', person_list)
for row in cur:
print row
# a more general way to get however many people are in the list
person_list = [1358726575123, 9973834728345]
template = ','.join(['?'] * len(person_list))
cur.execute('''select * from people where key in (%s)''' % (template), person_list)
for row in cur:
print row
Sì, questo significa che dovrai imparare un po 'di SQL , ma ne varrà la pena nel lungo periodo. Inoltre, invece di analizzare i file di registro, forse potresti scrivere i dati direttamente nel tuo database sqlite.