Quiz_Generation / app /utils /file_utils.py
tarekdx3's picture
Initial deployment
4a636c1
Raw
History Blame Contribute Delete
1.8 kB
import os
import json
import logging
import pdfplumber
import docx
from fpdf import FPDF
def save_to_json(data, filename):
try:
with open(filename, "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=2)
except Exception as e:
logging.error(f"Failed to save data to {filename}: {e}")
def load_from_json(filename, default_dict):
if os.path.exists(filename):
try:
with open(filename, "r", encoding="utf-8") as f:
loaded_data = json.load(f)
default_dict.update(loaded_data)
except Exception as e:
logging.error(f"Could not load data from {filename}: {e}")
return default_dict
def extract_text_from_file(file_path: str) -> str:
ext = file_path.rsplit('.', 1)[-1].lower()
if ext == "pdf":
with pdfplumber.open(file_path) as pdf:
return ''.join([p.extract_text() for p in pdf.pages if p.extract_text()])
elif ext == "docx":
doc = docx.Document(file_path)
return ' '.join([para.text for para in doc.paragraphs])
elif ext == "txt":
with open(file_path, 'r', encoding='utf-8') as f:
return f.read()
else:
raise ValueError("Unsupported file type.")
def save_as_txt(content, filename, output_folder):
path = os.path.join(output_folder, filename)
with open(path, 'w', encoding='utf-8') as f:
f.write(content)
return path
def save_as_pdf(content, filename, output_folder):
pdf = FPDF()
pdf.add_page()
pdf.set_font("Arial", size=12)
for line in content.split('\n'):
if line.strip():
pdf.multi_cell(0, 10, line.strip())
pdf.ln(2)
path = os.path.join(output_folder, filename)
pdf.output(path)
return path