Livres au local script

De April MediaWiki
Aller à la navigationAller à la recherche

Voici le script python utilisé pour convertir le fichier CSV (lui-même obtenu à partir dun fichier ODT) au format mediawiki pour le Wiki de l'April.

# encoding: utf-8
"""
Script pour la conversion d'un fichier CSV en contenu mediawiki pour lister les livres
empruntables au local de l'April.

Il faut avoir un fichier au format CSV qui a les colonnes nécessaires avec les bons
titres. Éventuellement, il faut renommer les colonnes spécifiées au début du script.
Il faut spécifier le titre du fichier à lire.
Il faut rediriger la sortie du script vers un fichier (c'est plus pratique).

Le résultat représente la liste des livres complète.

Attention, la page du wiki contient un exemple vide à la fin de la liste !


Date: 2023-10-04
Licence: AGPLv3+
"""

import csv

# Chemin complet vers le fichier à traiter
FILE_PATH = "2023-09-biblio-April.csv"

# Liste des entêtes à trouver dans le fichier
#   Les entêtes sont retrouvés via leur titre
#   Si un entête à une value "None", il est obligatoire
#   Si un entête à une value "optional", il est facultatif
headers = {
    "Titre": None,
    "Maison d’édition ": None,
    "Autrice(s), auteur(s)": None,
    "Date de parution": None,
    "Nombre de pages": None,
    "ISBN": None,
    "Lien vers la page officielle du livre": None,
    "(disponible, emprunté par …)": None,
    "Date de l’emprunt le cas échéant": None,
    "Langue (français si non précisé": None,
    "Nombre d’exemplaires si différent de 1)": None,
    "Remarque éventuelle": None,
}

with open(FILE_PATH) as file_handle:
    reader = csv.reader(file_handle)
    for index, row in enumerate(next(reader, [])):
        for header in headers:
            if row.lower() == header.lower():
                headers[header] = index
    # On vérifie qu'on a trouvé toutes les colonnes obligatoires
    for header in headers:
        if headers[header] is None:
            print(f"La colonne '{header}' n'a pas été trouvée.")
            exit(-1)
    for header in headers:
        if headers[header] == "optional":
            headers[header] = None
    if reader is not None:
        for row in reader:
            # On liste un livre, on prépare donc son texte au format mediawiki
            book = f"== {row[headers['Titre']]} ==\n\n"
            book += f"* Maison d'édition : {row[headers['Maison d’édition ']]}\n\n"
            book += f"* Autrices, auteurs : {row[headers['Autrice(s), auteur(s)']]}\n\n"
            book += f"* Date de parution : {row[headers['Date de parution']]}\n\n"
            book += f"* Nombre de pages : {row[headers['Nombre de pages']]}\n\n"
            book += f"* ISBN : {row[headers['ISBN']]}\n\n"
            book += f"* Lien web vers la page officielle du livre : {row[headers['Lien vers la page officielle du livre']]}\n\n"
            book += f"* État (disponible, emprunté) : {row[headers['(disponible, emprunté par …)']] or 'disponible'}\n\n"
            book += f"* Date de l'emprunt : {row[headers['Date de l’emprunt le cas échéant']]}\n\n"
            book += f"* Langue (français si non précisé) : {row[headers['Langue (français si non précisé']]}\n\n"
            book += f"* Nombre d'exemplaires (si différent de 1) : {row[headers['Nombre d’exemplaires si différent de 1)']]}\n\n"
            book += f"* Remarque éventuelle : {row[headers['Remarque éventuelle']]}\n\n"
            # On affiche le résultat
            print(book)

Ce script permet de mettre à jour le contenu de la page Livres_au_local