Stocker des données récupérées depuis un script Python

BDD ou autre ?

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour, j'ai une petite question.

J'ai un fichier de plus de 10.000 lignes. Dans ce fichier, chaque ligne respecte un format (exemple : M17XXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXX XXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXX XXX XXXX XXXX XXX XXXXXXXXXXXXXXXXX AZR+242 2210130122013AZR+242 2210131122013AZR+242 2210102012014AZR+242 2210103012014).

Actuellement j'extrais des informations de ce fichier : exemple le nombre de code AZR+242 etc … Je fais pour le moment dans le non durable, quand script est fermé je perds toutes mes infos (stockées dans des variables). Mon souhait serait de pouvoir conserver ces infos quelque part pour afficher les résultats même si le script a été fermé. Soit pour les réutiliser dans un script python qui sortirait des graphiques, soit dans une page html/php.

Je pensais donc utiliser une bdd : est-ce une bonne idée ou ai-je plutôt intérêt à utiliser autre chose ? (fichiers, autre ?). Si oui, quel SGBD utiliser ? Je pensais éventuellement à SQLite, sur l'IRC on m'a parlé de MongoDB, cela peut aussi être autre chose. Qu'en pensez-vous ?

Pour info : l'outil sera en mono-utilisateur aussi bien en écriture qu'en lecture.

Merci d'avance =)

Dans le doute, reboot.

+0 -0

Salut,

Une base de données me semble préférable vu que tu disposeras d'une API pour la manipuler, contrairement aux fichiers que tu devras analyser manuellement.

Concernant le type de base, tout dépend de l'organisation de tes données. Comme ça, on ne peut rien te conseiller. Que représentent ces données ?

+0 -0
Auteur du sujet

Salut,

Les données que je vais stocker seront :

  • le format des lignes (il y a une petite variante si le début de la ligne est M17, M18 ou M19)
  • le compteur de codes (AZR+242, etc…) et une historique de celui-ci pour comparer d'une année sur l'autre
  • des tables de correspondances de type : tel code = tant de points, etc…

Voila le gros des données qui seront sauvegardées

Dans le doute, reboot.

+0 -0

Cette réponse a aidé l'auteur du sujet

Si tes traitements sont simples, il n'y a pas une grande utilité à utiliser une BDD. Il est beaucoup plus simple de sérialiser les données qui t'intéressent (pourquoi pas au format JSON, ou pickle si nécessaire). Ensuite, d'une simple opération de lecture + désérialisation, ton programme se retrouve dans le même état qu'après le traitement original.

+1 -0
Auteur du sujet

Salut, merci pour l'idée. Je suis toujours en réflexion. Je ne sais pas encore trop sur quoi partir. Ce qui m'embête c'est que j'ai de nombreux compteurs de codes (AZR+242 et pleins d'autres). Je suis plutôt débutant dans le dév' et je patauge un peu. J'ajoute ton idée dans ma réflexion :)

Dans le doute, reboot.

+0 -0

Cette réponse a aidé l'auteur du sujet

C'est très simple: tu peux considérer ton environnement (ie les variables que tu utilise) comme une sorte de dictionnaire. Du coup, il suffit se mettre lesdites variables dans un dico, par ex :

1
2
3
4
env = {}
env['ma_var_1'] = ma_var_1
env['ma_var_2'] = ma_var_2
# etc.

Ensuite, tu sérialise, typiquement :

1
2
3
4
5
# serialisation en JSON, ne convient pas pour tous les types de donnes, 
# sinon employer pickle, ou eventuellement un format specialise
import json
with open('data.json', 'w') as fp:
    json.dump(env, fp)

Et lors du code qui utilise tes données, tu charges les données comme ceci :

1
2
3
import json
with open('data.json', 'r') as fp:
    env = json.load(fp)

Ah, et puis renseigne toi sur le builtin vars, ça pourrait te simplifier la vie, par exemple en faisant après le chargement de ton environnement :

1
2
vars().update(env)  # toutes des variables se retrouvent dans l'environnement global
                    # attention a ne pas écraser des variables existantes...

D'ailleurs, tu peux le faire dans l'autre sens aussi pour sérialiser le contenu de ton environnement, mais attention à ce qu'il contient.

+1 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte