Exploration des Générateurs pour la Gestion de Fichiers .ini
Objectifs
Les objectifs de cette vidéo sont de :
- Comprendre l'avantage des générateurs pour masquer la complexité de fonctions.
- Apprendre à utiliser Pathlib pour gérer les répertoires et fichiers.
- Savoir comment parser et traiter efficacement les fichiers .ini.
- Améliorer la gestion de la mémoire en utilisant des itérables.
Résumé
Découvrez comment les générateurs en Python peuvent masquer la complexité de la gestion des fichiers .ini, offrant une solution simple et efficace pour créer des API.
Description
Dans cette leçon, nous explorons l'utilisation avancée des générateurs en Python, en nous concentrant particulièrement sur la gestion des fichiers .ini. Nous débutons par une révision des concepts de base des générateurs, puis nous progressons vers des applications plus complexes telles que le parsing et la récupération de données clés/valeurs dans des fichiers de configuration. Grâce à Pathlib, nous montrons comment scanner efficacement un répertoire et traiter chaque fichier .ini avec un générateur.
Les générateurs permettent de masquer la complexité interne de la fonction, simplifiant ainsi l'API pour l'utilisateur final. En traitant les lignes des fichiers, en excluant les commentaires et les sections inutiles, et en utilisant des techniques de gestion de mémoire efficaces, nous démontrons comment obtenir un flux continu de données. Enfin, nous abordons des techniques de débogage pour gérer les anomalies rencontrées lors du parsing des fichiers.
Les thèmes variés agrémentés d'exemples simples et clairs enrichissent toutes les notions exposées de façon particulièrement pédagogique. 👍
L'approche didactique m'a permis de beaucoup mieux comprendre tout un tas de concepts plus ou moins bien assimilés auparavant avec une vue d'ensemble nettement plus limpide aujourd'hui. 🤓
Merci pour cette belle prestation. 🙏
Je suis vraiment tres satisfait par cette première formation suivie sur Python.
#CODE en python 3.10.0 64 bits (VScode 1.62.3)
import datetime
import asyncio
import aiohttp
import requests
# ----------------------------------------------------------------------------------------------------------------------------
def req_bloquante(num):
print(f"Get {num}")
uid = requests.get("https://httpbin.org/uuid").json()["uuid"]
print(f"Res {num}: {uid}")
def faire_toutes_les_requetes():
for x in range(51):
req_bloquante(x)
print("=====> ### Bloquant : ")
start = datetime.datetime.now()
faire_toutes_les_requetes()
exec_time = (datetime.datetime.now() - start).seconds
print(f"Downloading all take {exec_time} seconds\n")
# ----------------------------------------------------------------------------------------------------------------------------
async def requeteSansBloquer(semaphore, num, session):
print(f"Get {num}")
# await semaphore.acquire() # putting this await semaphore commande the Res is ordering but process very slow ~60 sec
async with session.get("https://httpbin.org/uuid") as response:
uid = (await response.json())["uuid"]
# await asyncio.sleep(delay=3) #delay = number of seconds
# semaphore.release()
print(f"Res {num}: {uid}")
# return uid # ?
async def main():
semaphore = asyncio.Semaphore(value=1)
tasks = []
async with aiohttp.ClientSession(
loop=loop, connector=aiohttp.TCPConnector(ssl=False)
) as session:
for x in range(51):
tasks.append(requeteSansBloquer(semaphore, x, session))
await asyncio.gather(*tasks)
print("This is after the loop...")
if __name__ == "__main__":
print("=====> ### Non Bloquant : ")
start = datetime.datetime.now()
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
exec_time = (datetime.datetime.now() - start).microseconds
print(f"Downloading all take {exec_time} micro seconds\n")