나는 이런 종류의 작업에 데이터베이스를 사용해야한다는 @ jan-steinman에 동의합니다 . 다른 답변에서 볼 수 있듯이 셸 스크립트로 솔루션을 해킹하는 방법은 많이 있지만 그 방법으로 코드를 사용하고 오래 유지하면 많은 고통을 겪을 수 있습니다 단 하루 만 보내면됩니다.
Linux 상자에 있다고 가정하면 Python v2.5 에서 sqlite3 라이브러리 가 포함 된 Python이 기본적으로 설치되어있을 가능성이 큽니다 . 다음을 사용하여 Python 버전을 확인할 수 있습니다.
% python -V
Python 2.7.2+
sqlite3 라이브러리를 사용하는 것이 좋습니다 는 모든 플랫폼 (웹 브라우저 내부 포함)에 존재하는 간단한 파일 기반 솔루션이므로 서버를 설치할 필요가 없기 때문에 합니다. 본질적으로 제로 구성 및 제로 유지 보수.
다음은 예제로 제공 한 파일 형식을 구문 분석 한 후 간단한 "모두 선택"쿼리를 수행하고 db에 저장된 모든 것을 출력하는 간단한 파이썬 스크립트입니다.
#!/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
예, 이는 SQL 을 배워야 하지만 장기적으로는 그만한 가치가 있음을 의미합니다. 또한 로그 파일을 구문 분석하는 대신 sqlite 데이터베이스에 직접 데이터를 쓸 수 있습니다.