txt 파일을 json 파일로 만들기: KJV 성경 구절 앱 개발을 위한 데이터베이스 구축
소개
이 글에서는 코딩 초보자를 위해 txt 파일을 json 파일로 변환하는 과정을 단계별로 설명합니다. 이 과정은 KJV(King James Version) 성경 구절 앱 개발을 위한 데이터베이스 구축에 활용됩니다. 작업 환경은 idx.google과 Mac mini를 사용합니다.
환경 설정 및 작업 과정
1. 작업 디렉토리 생성
mkdir bible_app
cd bible_app
2. 가상 환경 설정
python3 -m venv venv
source venv/bin/activate
3. 필요한 라이브러리 설치
pip install pandas
4. 프로젝트 구조 생성
mkdir data
mkdir scripts
touch scripts/txt_to_json.py
5. txt 파일 준비
subdirectory인 data 폴더에 kjv_bible.txt 파일을 위치시킵니다.
6. Python 스크립트 작성
scripts/txt_to_json.py 파일을 열고 다음 코드를 입력합니다:
import json
import pandas as pd
def txt_to_json(input_file, output_file):
with open(input_file, 'r') as file:
lines = file.readlines()
bible_data = []
for line in lines:
parts = line.strip().split('|')
if len(parts) == 5:
book, chapter, verse, text, _ = parts
bible_data.append({
'book': book,
'chapter': int(chapter),
'verse': int(verse),
'text': text
})
df = pd.DataFrame(bible_data)
result = df.to_json(orient='records')
with open(output_file, 'w') as f:
json.dump(json.loads(result), f, indent=2)
input_file = 'data/kjv_bible.txt'
output_file = 'data/kjv_bible.json'
txt_to_json(input_file, output_file)
print("Conversion completed successfully!")
7. 스크립트 실행
터미널에서 다음 명령어를 실행합니다:
python scripts/txt_to_json.py
8. 결과 확인
data/kjv_bible.json 파일이 생성되었는지 확인합니다.
9. json 파일 구조 확인
생성된 json 파일을 열어 다음과 같은 구조인지 확인합니다:
[
{
"book": "Genesis",
"chapter": 1,
"verse": 1,
"text": "In the beginning God created the heaven and the earth."
},
...
]
10. 데이터 유효성 검사
Python 인터프리터를 열어 다음 코드로 데이터를 검사합니다:
import json
with open('data/kjv_bible.json', 'r') as f:
data = json.load(f)
print(f"Total verses: {len(data)}")
print(f"First verse: {data[0]}")
print(f"Last verse: {data[-1]}")
11. 웹 앱 기본 구조 생성
mkdir templates
mkdir static
touch app.py
12. Flask 설치
pip install flask
13. app.py 작성
app.py 파일에 다음 코드를 입력합니다:
from flask import Flask, render_template, request, jsonify
import json
app = Flask(__name__)
with open('data/kjv_bible.json', 'r') as f:
bible_data = json.load(f)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/search')
def search():
query = request.args.get('q', '')
results = [verse for verse in bible_data if query.lower() in verse['text'].lower()]
return jsonify(results)
if __name__ == '__main__':
app.run(debug=True)
14. HTML 템플릿 생성
templates/index.html 파일을 생성하고 다음 내용을 입력합니다:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>KJV Bible Search</title>
</head>
<body>
<h1>KJV Bible Search</h1>
<input type="text" id="search-input" placeholder="Enter search term">
<button onclick="search()">Search</button>
<div id="results"></div>
<script>
function search() {
const query = document.getElementById('search-input').value;
fetch(`/search?q=${query}`)
.then(response => response.json())
.then(data => {
const resultsDiv = document.getElementById('results');
resultsDiv.innerHTML = data.map(verse =>
`<p>${verse.book} ${verse.chapter}:${verse.verse} - ${verse.text}</p>`
).join('');
});
}
</script>
</body>
</html>
15. 앱 실행
터미널에서 다음 명령어를 실행합니다:
python app.py
16. 브라우저에서 확인
웹 브라우저를 열고 http://localhost:5000에 접속하여 앱을 테스트합니다.
17. 기능 개선: 고급 검색
app.py에 다음 함수를 추가합니다:
def advanced_search(query, book=None, chapter=None):
results = []
for verse in bible_data:
if (book is None or verse['book'] == book) and \\\\
(chapter is None or verse['chapter'] == chapter) and \\\\
query.lower() in verse['text'].lower():
results.append(verse)
return results
@app.route('/advanced-search')
def advanced_search_route():
query = request.args.get('q', '')
book = request.args.get('book')
chapter = request.args.get('chapter')
if chapter:
chapter = int(chapter)
results = advanced_search(query, book, chapter)
return jsonify(results)
18. HTML 템플릿 업데이트
index.html에 고급 검색 폼을 추가합니다:
<h2>Advanced Search</h2>
<input type="text" id="adv-search-input" placeholder="Enter search term">
<input type="text" id="book-input" placeholder="Book (optional)">
<input type="number" id="chapter-input" placeholder="Chapter (optional)">
<button onclick="advancedSearch()">Advanced Search</button>
<script>
function advancedSearch() {
const query = document.getElementById('adv-search-input').value;
const book = document.getElementById('book-input').value;
const chapter = document.getElementById('chapter-input').value;
fetch(`/advanced-search?q=${query}&book=${book}&chapter=${chapter}`)
.then(response => response.json())
.then(data => {
const resultsDiv = document.getElementById('results');
resultsDiv.innerHTML = data.map(verse =>
`<p>${verse.book} ${verse.chapter}:${verse.verse} - ${verse.text}</p>`
).join('');
});
}
</script>
19. 스타일 추가
static/style.css 파일을 생성하고 기본 스타일을 추가합니다:
body {
font-family: Arial, sans-serif;
max-width: 800px;
margin: 0 auto;
padding: 20px;
}
input, button {
margin: 5px;
padding: 5px;
}
#results {
margin-top: 20px;
}
HTML 파일의 <head> 섹션에 스타일시트 링크를 추가합니다:
<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
20. 최종 테스트 및 배포 준비
앱을 다시 실행하고 모든 기능이 정상적으로 작동하는지 확인합니다. 문제가 없다면 배포를 위한 requirements.txt 파일을 생성합니다:
pip freeze > requirements.txt
결론
이 과정을 통해 txt 파일을 json 파일로 변환하고, 이를 활용하여 KJV 성경 구절 검색 웹 앱을 개발하는 방법을 배웠습니다. 이 앱은 기본 검색과 고급 검색 기능을 제공하며, 추후 더 많은 기능을 추가할 수 있는 기반이 되었습니다. 이 프로젝트를 통해 데이터 처리, 웹 개발, 그리고 사용자 인터페이스 디자인의 기초를 경험할 수 있었습니다.
Citations:
[1] https://formason.tistory.com/23
[2] https://eomiso.tistory.com/entry/How-to-use-Katex-in-Tistory-blogs티스토리에서-Latex-사용하기
[3] https://www.npmjs.com/package/tistory-skin/v/1.3.0?activeTab=dependencies
[4] https://github.com/iolo/hexo-migrator-tistory
[5] https://whiseung.tistory.com/entry/Apps-Script-시작-그리고-Google-Sheets-데이터-가져오기
'IT' 카테고리의 다른 글
NeetCode: 코딩 인터뷰를 위한 최고의 가이드 (0) | 2024.07.30 |
---|---|
Google IDX와 Streamlit을 활용한 성경 웹 앱 만들기 (0) | 2024.07.29 |
Streamlit을 활용한 웹 앱 개발 및 Tistory 블로그 포스팅 가이드 (4) | 2024.07.27 |
Google Sheets와 Apps Script를 활용한 워크플로 예시 (0) | 2024.07.26 |
Google Sheets를 데이터베이스로 사용시 주의할 점 (0) | 2024.07.26 |