ICC-P Fichier pour la démo: process_movies.py
Code:
from dataclasses import dataclass
# On lit tout le contenu du fichier
with open("movies.txt", "r", encoding="utf-8") as file:
contents = file.read()
# Il y a un close() automatique à la fin du bloc with
# On split le fichier en lignes, \n est le séparateur
lines = contents.split("\n")
# Modélisation d'un type de film
@dataclass
class Movie:
title: str
year: int
duration: int
has_awards: bool
# La liste dans laquelle on va stocker les films
movies: list[Movie] = []
# Un dictionnaire qu'on va utiliser pour "nettoyer" les titres
substitutions = {
"&": "and",
"'": "’",
"vs.": "vs",
}
# On parcourt les lignes du fichier
for line in lines[2:]:
# On split la ligne en colonnes
parts = line.split(";")
# On extrait la durée, qui peut être vide
duration_str = parts[1]
if duration_str == "":
duration = 0
else:
duration = int(duration_str)
# On extrait le titre, en inversant les noms si nécessaire
title = parts[2]
if ", " in title:
title = " ".join(title.split(", ")[::-1])
# On remplace les caractères spéciaux
for key, value in substitutions.items():
title = title.replace(key, value)
# On crée le film et on l'ajoute à la liste
movie = Movie(title, int(parts[0]), duration, parts[8] == "Yes")
movies.append(movie)
# On trie les films par durée
movies.sort(key=lambda m: m.duration)
# On écrit les films dans le fichier de résultats
with open("results.txt", "w", encoding="utf-8") as file:
total_duration = 0
# On écrit les films qui ont reçu des prix
for movie in movies:
if movie.has_awards:
file.write(f"{movie.duration:3} min: “{movie.title}” ({movie.year})\n")
total_duration += movie.duration
# On écrit la durée totale
file.write(f"\nTotal duration: about {total_duration // 60} hours")
# Il y a un close() automatique à la fin du bloc with
# On lit tout le contenu du fichier
with open("movies.txt", "r", encoding="utf-8") as file:
contents = file.read()
# Il y a un close() automatique à la fin du bloc with
# On split le fichier en lignes, \n est le séparateur
lines = contents.split("\n")
# Modélisation d'un type de film
@dataclass
class Movie:
title: str
year: int
duration: int
has_awards: bool
# La liste dans laquelle on va stocker les films
movies: list[Movie] = []
# Un dictionnaire qu'on va utiliser pour "nettoyer" les titres
substitutions = {
"&": "and",
"'": "’",
"vs.": "vs",
}
# On parcourt les lignes du fichier
for line in lines[2:]:
# On split la ligne en colonnes
parts = line.split(";")
# On extrait la durée, qui peut être vide
duration_str = parts[1]
if duration_str == "":
duration = 0
else:
duration = int(duration_str)
# On extrait le titre, en inversant les noms si nécessaire
title = parts[2]
if ", " in title:
title = " ".join(title.split(", ")[::-1])
# On remplace les caractères spéciaux
for key, value in substitutions.items():
title = title.replace(key, value)
# On crée le film et on l'ajoute à la liste
movie = Movie(title, int(parts[0]), duration, parts[8] == "Yes")
movies.append(movie)
# On trie les films par durée
movies.sort(key=lambda m: m.duration)
# On écrit les films dans le fichier de résultats
with open("results.txt", "w", encoding="utf-8") as file:
total_duration = 0
# On écrit les films qui ont reçu des prix
for movie in movies:
if movie.has_awards:
file.write(f"{movie.duration:3} min: “{movie.title}” ({movie.year})\n")
total_duration += movie.duration
# On écrit la durée totale
file.write(f"\nTotal duration: about {total_duration // 60} hours")
# Il y a un close() automatique à la fin du bloc with
Last modified: Monday, 6 May 2024, 16:28