|
|
import os
|
|
|
|
|
|
def replace_apostrophe(text):
|
|
|
"""Remplacer les apostrophes simples par des apostrophes typographiques droites"""
|
|
|
return text.replace("'", "’")
|
|
|
|
|
|
def extract_data_from_txt(file_path):
|
|
|
sources = set() # Pour stocker les œuvres (title, year)
|
|
|
characters = set() # Pour stocker les personnages (character, img_path)
|
|
|
images = set() # Pour stocker les chemins d'images
|
|
|
quotes = [] # Pour stocker les citations (quote, oeuvre, personnage, année, chemin d'image)
|
|
|
|
|
|
with open(file_path, 'r', encoding='utf-8') as file:
|
|
|
for line in file:
|
|
|
if line.strip(): # Ignore les lignes vides
|
|
|
data = line.split(";")
|
|
|
if len(data) >= 5: # Vérifie que la ligne a bien toutes les colonnes
|
|
|
quote = replace_apostrophe(data[0].strip()) # Citation
|
|
|
oeuvre = replace_apostrophe(data[1].strip()) # Œuvre
|
|
|
character = replace_apostrophe(data[2].strip()) # Personnage
|
|
|
year = data[3].strip() # Année de parution
|
|
|
img_path = data[4].strip() # Chemin de l'image
|
|
|
|
|
|
sources.add((oeuvre, year))
|
|
|
characters.add((character, img_path))
|
|
|
images.add(img_path)
|
|
|
quotes.append((quote, oeuvre, character, year, img_path))
|
|
|
|
|
|
return list(sources), list(characters), list(images), quotes
|
|
|
|
|
|
def create_sql_insert_file(sources, characters, images, quotes, output_sql_file):
|
|
|
with open(output_sql_file, 'w', encoding='utf-8') as file:
|
|
|
# Insertion des images dans la table Image
|
|
|
file.write("-- Insertion des images dans la table Image\n")
|
|
|
image_id_map = {}
|
|
|
for i, img_path in enumerate(images, start=1):
|
|
|
file.write(f"INSERT INTO Image (id_img, imgPath) VALUES ({i}, '{img_path}');\n")
|
|
|
image_id_map[img_path] = i # Stocker l'id généré pour l'image
|
|
|
|
|
|
# Insertion des œuvres dans la table Source
|
|
|
file.write("\n-- Insertion des œuvres dans la table Source\n")
|
|
|
source_id_map = {}
|
|
|
for i, (oeuvre, year) in enumerate(sources, start=1):
|
|
|
file.write(f"INSERT INTO Source (id_source, title, dateS) VALUES ({i}, '{oeuvre}', {year});\n")
|
|
|
source_id_map[oeuvre] = i # Stocker l'id généré pour l'œuvre
|
|
|
|
|
|
# Insertion des personnages dans la table Caracter
|
|
|
file.write("\n-- Insertion des personnages dans la table Caracter\n")
|
|
|
character_id_map = {}
|
|
|
for j, (character, img_path) in enumerate(characters, start=1):
|
|
|
id_img = image_id_map[img_path] # Associer l'image au personnage
|
|
|
file.write(f"INSERT INTO Caracter (id_caracter, caracter, id_img) VALUES ({j}, '{character}', {id_img});\n")
|
|
|
character_id_map[character] = j # Stocker l'id généré pour le personnage
|
|
|
|
|
|
# Insertion des citations dans la table Quote
|
|
|
file.write("\n-- Insertion des citations dans la table Quote\n")
|
|
|
for k, (quote, oeuvre, character, year, img_path) in enumerate(quotes, start=1):
|
|
|
id_source = source_id_map[oeuvre] # Récupérer l'id_source de l'œuvre
|
|
|
id_caracter = character_id_map[character] # Récupérer l'id_caracter du personnage
|
|
|
file.write(f"INSERT INTO Quote (id_quote, content, likes, langue, isValide, reason, id_caracter, id_source, id_user_verif) "
|
|
|
f"VALUES ('{k}', '{quote}', 0, 'fr', false, 'insertion de test', {id_caracter}, {id_source}, 'U001');\n")
|
|
|
|
|
|
print(f"Fichier SQL créé : {output_sql_file}")
|
|
|
|
|
|
# Remplacer "chemin_vers_ton_fichier_txt" par le chemin de ton fichier
|
|
|
txt_file_path = 'citation.txt'
|
|
|
output_sql_path = 'insert_all_data.sql'
|
|
|
|
|
|
# Extraire les données (sources, personnages, images, citations) du fichier texte
|
|
|
sources, characters, images, quotes = extract_data_from_txt(txt_file_path)
|
|
|
|
|
|
# Créer le fichier .sql avec les insertions
|
|
|
create_sql_insert_file(sources, characters, images, quotes, output_sql_path)
|