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
 
Last modified: Monday, 6 May 2024, 16:28