Introduction
La fonction print de Python est un outil utile pour afficher des informations dans la console. Cependant, il existe des situations où vous souhaiterez plutôt enregistrer cette sortie dans un fichier. Cette capacité est particulièrement précieuse pour la journalisation (logging), la création de rapports ou l'enregistrement des résultats du programme pour une analyse ultérieure.
Dans ce lab, vous apprendrez à rediriger la sortie de la fonction print de Python vers un fichier. Vous commencerez par des opérations print de base, puis passerez à la redirection de cette sortie vers des fichiers dans différents modes, et enfin, vous explorerez quelques applications pratiques de cette technique.
Comprendre la fonction print() de base en Python
Avant de rediriger la sortie vers un fichier, comprenons d'abord comment fonctionne la fonction print() en Python. La fonction print() est l'une des fonctions les plus couramment utilisées pour afficher la sortie en Python.
Syntaxe de la fonction print()
La syntaxe de base de la fonction print() est la suivante :
print(value1, value2, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
Où :
value1, value2, ...: Les valeurs à imprimersep: Le séparateur entre les valeurs (par défaut, un espace)end: La chaîne ajoutée après la dernière valeur (par défaut, un saut de ligne)file: L'objet fichier où la sortie est dirigée (par défaut, la console)flush: Indique s'il faut vider le flux de force (par défaut, False)
Créons un script Python simple pour démontrer l'utilisation de base de la fonction print().
- Ouvrez le WebIDE et créez un nouveau fichier en cliquant sur le menu "File" et en sélectionnant "New File"
- Enregistrez le fichier sous le nom
print_basics.pydans le répertoire/home/labex/project - Ajoutez le code suivant au fichier :
## Basic print examples
print("Hello, Python!")
print("Multiple", "values", "with", "spaces")
print("Values", "with", "dashes", sep="-")
print("No newline at the end", end=" ")
print("This continues on the same line")
## Printing different data types
print("Integer:", 42)
print("Float:", 3.14)
print("Boolean:", True)
## Printing variables
name = "Alice"
age = 30
print("Name:", name, "Age:", age)
- Enregistrez le fichier en appuyant sur Ctrl+S ou en cliquant sur "File" > "Save"
- Exécutez le script en ouvrant un terminal et en tapant :
python3 print_basics.py
Vous devriez voir une sortie similaire à :
Hello, Python!
Multiple values with spaces
Values-with-dashes
No newline at the end This continues on the same line
Integer: 42
Float: 3.14
Boolean: True
Name: Alice Age: 30
Cet exemple démontre les fonctionnalités de base de la fonction print(), y compris comment imprimer différentes valeurs, personnaliser les séparateurs et contrôler les fins de ligne.
Formater la sortie avec print()
Vous pouvez également formater la sortie de la fonction print() en utilisant des f-strings (littéraux de chaîne formatés) ou la méthode format().
Ajoutons quelques exemples d'impression formatée à notre fichier :
- Ouvrez à nouveau le fichier
print_basics.py - Ajoutez le code suivant à la fin du fichier :
## Using f-strings (Python 3.6+)
name = "Bob"
age = 25
print(f"Name: {name}, Age: {age}")
## Using format() method
print("Name: {}, Age: {}".format(name, age))
## Formatting numbers
price = 19.99
quantity = 5
total = price * quantity
print(f"Price: ${price:.2f}, Quantity: {quantity}, Total: ${total:.2f}")
- Enregistrez le fichier et exécutez-le à nouveau :
python3 print_basics.py
La nouvelle sortie devrait inclure :
Name: Bob, Age: 25
Name: Bob, Age: 25
Price: $19.99, Quantity: 5, Total: $99.95
Maintenant que nous comprenons les bases de la fonction print(), nous pouvons passer à la redirection de sa sortie vers un fichier.
Redirection de la sortie de print() vers un fichier
Maintenant que nous comprenons comment fonctionne la fonction print(), explorons comment rediriger sa sortie vers un fichier au lieu de l'afficher dans la console. La clé est d'utiliser le paramètre file de la fonction print().
Écriture de la sortie dans un fichier
Pour rediriger la sortie de la fonction print() vers un fichier, nous devons :
- Ouvrir un fichier en mode écriture
- Passer l'objet fichier à la fonction
print()en utilisant le paramètrefile - Fermer le fichier lorsque nous avons terminé
Créons un nouveau script Python pour le démontrer :
- Créez un nouveau fichier nommé
print_to_file.pydans le répertoire/home/labex/project - Ajoutez le code suivant au fichier :
## Open a file in write mode
output_file = open("output.txt", "w")
## Redirect print output to the file
print("This is line 1 of our output file.", file=output_file)
print("This is line 2 of our output file.", file=output_file)
print("This is line 3 with numbers:", 42, 3.14, file=output_file)
## Close the file
output_file.close()
print("Output has been written to output.txt")
- Enregistrez le fichier et exécutez-le :
python3 print_to_file.py
- Vous devriez voir le message "Output has been written to output.txt" dans la console
- Vérifions le contenu du fichier
output.txt:
cat output.txt
Vous devriez voir :
This is line 1 of our output file.
This is line 2 of our output file.
This is line 3 with numbers: 42 3.14
Utilisation de l'instruction with (approche recommandée)
Une meilleure façon de travailler avec des fichiers en Python est d'utiliser l'instruction with, qui se charge automatiquement de fermer le fichier même si une exception se produit. Modifions notre exemple :
- Créez un nouveau fichier nommé
print_to_file_with.pydans le répertoire/home/labex/project - Ajoutez le code suivant au fichier :
## Using the 'with' statement to handle file operations
with open("output_with.txt", "w") as output_file:
print("This line is written using the 'with' statement.", file=output_file)
print("The file will be automatically closed after this block.", file=output_file)
print("Numbers and other data types:", 100, 3.14159, True, file=output_file)
print("Output has been written to output_with.txt")
- Enregistrez le fichier et exécutez-le :
python3 print_to_file_with.py
- Vérifiez le contenu du nouveau fichier :
cat output_with.txt
Vous devriez voir :
This line is written using the 'with' statement.
The file will be automatically closed after this block.
Numbers and other data types: 100 3.14159 True
L'instruction with est l'approche recommandée pour travailler avec des fichiers en Python car :
- Elle ferme automatiquement le fichier lorsque le bloc se termine
- Elle gère correctement les exceptions
- Elle rend votre code plus propre et plus lisible
Vous savez maintenant comment rediriger la sortie de la fonction print() vers un fichier en utilisant à la fois la gestion de fichiers traditionnelle et l'approche plus moderne de l'instruction with.
Ajout de la sortie aux fichiers existants
Dans l'étape précédente, nous avons utilisé le mode "w" lors de l'ouverture des fichiers, ce qui crée un nouveau fichier ou écrase un fichier existant. Cependant, vous souhaiterez parfois ajouter du nouveau contenu à la fin d'un fichier existant sans effacer son contenu actuel. À cette fin, nous utilisons le mode "a" (append - ajout).
Ajout à un fichier
Créons un script pour démontrer comment ajouter une sortie à un fichier existant :
- Créez un nouveau fichier nommé
append_to_file.pydans le répertoire/home/labex/project - Ajoutez le code suivant au fichier :
## First, create a file with some initial content
with open("append_example.txt", "w") as file:
print("This is the initial content of the file.", file=file)
print("Created on: 2023-09-01", file=file)
print("Initial content has been written to append_example.txt")
## Now, append to the file
with open("append_example.txt", "a") as file:
print("\nThis content is being appended to the file.", file=file)
print("Appended on: 2023-09-02", file=file)
print("Additional content has been appended to append_example.txt")
## Let's check the final content
print("\nFinal content of the file:")
with open("append_example.txt", "r") as file:
print(file.read())
- Enregistrez le fichier et exécutez-le :
python3 append_to_file.py
Vous devriez voir une sortie similaire à :
Initial content has been written to append_example.txt
Additional content has been appended to append_example.txt
Final content of the file:
This is the initial content of the file.
Created on: 2023-09-01
This content is being appended to the file.
Appended on: 2023-09-02
Création d'un simple fichier journal (log file)
Un cas d'utilisation courant pour l'ajout à des fichiers est la création de fichiers journaux, où de nouvelles entrées sont ajoutées sans supprimer les existantes. Créons un exemple de journalisation simple :
- Créez un nouveau fichier nommé
simple_log.pydans le répertoire/home/labex/project - Ajoutez le code suivant au fichier :
import datetime
def log_message(message):
"""Append a timestamped message to the log file."""
timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
with open("application.log", "a") as log_file:
print(f"[{timestamp}] {message}", file=log_file)
## Simulate some application events
log_message("Application started")
log_message("Processing data...")
## Simulate some user activity
user = "Alice"
log_message(f"User '{user}' logged in")
## Simulate an error
try:
result = 10 / 0
except Exception as e:
log_message(f"Error occurred: {e}")
log_message("Application shutting down")
print("Log entries have been written to application.log")
print("\nContents of the log file:")
with open("application.log", "r") as log_file:
print(log_file.read())
- Enregistrez le fichier et exécutez-le :
python3 simple_log.py
Vous devriez voir une sortie similaire à :
Log entries have been written to application.log
Contents of the log file:
[2023-09-10 15:30:45] Application started
[2023-09-10 15:30:45] Processing data...
[2023-09-10 15:30:45] User 'Alice' logged in
[2023-09-10 15:30:45] Error occurred: division by zero
[2023-09-10 15:30:45] Application shutting down
Notez que les horodatages réels refléteront votre date et heure actuelles.
Cet exemple de journalisation simple démontre une application pratique de l'ajout de sortie à un fichier. Chaque fois que le script s'exécute, il ajoute de nouvelles entrées de journal au fichier sans supprimer les précédentes. Ceci est utile pour suivre l'historique de l'exécution d'une application.
En utilisant le mode append avec la fonction print(), vous pouvez ajouter en continu du nouveau contenu à vos fichiers, ce qui est essentiel pour de nombreuses applications du monde réel comme la journalisation, la collecte de données et la tenue de registres.
Création d'une application pratique - Générateur de rapports
Dans cette dernière étape, nous allons créer une application plus pratique qui démontre comment utiliser la fonction print() avec la redirection de fichier pour générer un rapport formaté. Cet exemple montrera comment cette technique peut être appliquée dans des scénarios réels.
Construction d'un générateur de rapports de ventes
Créons un script qui génère un rapport de ventes basé sur des exemples de données :
- Créez un nouveau fichier nommé
sales_report_generator.pydans le répertoire/home/labex/project - Ajoutez le code suivant au fichier :
import datetime
## Sample sales data (product, quantity, price)
sales_data = [
{"product": "Laptop", "quantity": 5, "price": 899.99},
{"product": "Mouse", "quantity": 10, "price": 24.99},
{"product": "Keyboard", "quantity": 7, "price": 49.99},
{"product": "Monitor", "quantity": 3, "price": 149.99},
{"product": "Headphones", "quantity": 12, "price": 79.99}
]
def generate_sales_report(filename):
"""Generate a formatted sales report and save it to a file."""
today = datetime.datetime.now().strftime("%Y-%m-%d")
with open(filename, "w") as report_file:
## Print the report header
print("=" * 60, file=report_file)
print(f"SALES REPORT - Generated on {today}", file=report_file)
print("=" * 60, file=report_file)
print("", file=report_file)
## Print the table header
print(f"{'Product':<15} {'Quantity':<10} {'Price ($)':<10} {'Total ($)':<10}", file=report_file)
print("-" * 50, file=report_file)
## Print sales data and calculate totals
grand_total = 0
total_items = 0
for item in sales_data:
product = item["product"]
quantity = item["quantity"]
price = item["price"]
total = quantity * price
print(f"{product:<15} {quantity:<10} {price:<10.2f} {total:<10.2f}", file=report_file)
grand_total += total
total_items += quantity
## Print the summary
print("-" * 50, file=report_file)
print(f"{'Total':<15} {total_items:<10} {'':<10} {grand_total:<10.2f}", file=report_file)
print("", file=report_file)
print("=" * 60, file=report_file)
print("End of Report", file=report_file)
## Generate the report
report_filename = "sales_report.txt"
generate_sales_report(report_filename)
print(f"Sales report has been generated: {report_filename}")
print("\nContents of the sales report:")
with open(report_filename, "r") as file:
print(file.read())
- Enregistrez le fichier et exécutez-le :
python3 sales_report_generator.py
Vous devriez voir une sortie qui inclut :
Sales report has been generated: sales_report.txt
Contents of the sales report:
============================================================
SALES REPORT - Generated on 2023-09-10
============================================================
Product Quantity Price ($) Total ($)
--------------------------------------------------
Laptop 5 899.99 4499.95
Mouse 10 24.99 249.90
Keyboard 7 49.99 349.93
Monitor 3 149.99 449.97
Headphones 12 79.99 959.88
--------------------------------------------------
Total 37 6509.63
============================================================
End of Report
Cet exemple démontre comment créer un rapport bien formaté en utilisant la fonction print() avec la redirection de fichier. Le rapport comprend des en-têtes, des données formatées dans une mise en page tabulaire et des informations récapitulatives.
Création d'un système de rotation de journaux dynamique
Créons un autre exemple qui démontre un système de rotation de journaux, qui crée un nouveau fichier journal à chaque exécution du script :
- Créez un nouveau fichier nommé
rotating_log.pydans le répertoire/home/labex/project - Ajoutez le code suivant au fichier :
import datetime
import os
def create_log_file():
"""Create a new log file with a timestamp in the filename."""
timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
log_dir = "logs"
## Create logs directory if it doesn't exist
if not os.path.exists(log_dir):
os.makedirs(log_dir)
return os.path.join(log_dir, f"log_{timestamp}.txt")
def log_event(log_file, event_type, message):
"""Log an event to the specified log file."""
timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
with open(log_file, "a") as f:
print(f"[{timestamp}] [{event_type.upper()}] {message}", file=f)
## Create a new log file
log_filename = create_log_file()
print(f"Created new log file: {log_filename}")
## Simulate some application events
log_event(log_filename, "info", "Application started")
log_event(log_filename, "info", "Initializing modules...")
log_event(log_filename, "warning", "Configuration file not found, using defaults")
log_event(log_filename, "info", "Processing data batch #1")
log_event(log_filename, "error", "Failed to connect to database server")
log_event(log_filename, "info", "Retrying connection in 5 seconds")
log_event(log_filename, "info", "Connection established")
log_event(log_filename, "info", "Application shutting down")
print("\nLog file contents:")
with open(log_filename, "r") as f:
print(f.read())
- Enregistrez le fichier et exécutez-le :
python3 rotating_log.py
Vous devriez voir une sortie similaire à :
Created new log file: logs/log_20230910_153045.txt
Log file contents:
[2023-09-10 15:30:45] [INFO] Application started
[2023-09-10 15:30:45] [INFO] Initializing modules...
[2023-09-10 15:30:45] [WARNING] Configuration file not found, using defaults
[2023-09-10 15:30:45] [INFO] Processing data batch #1
[2023-09-10 15:30:45] [ERROR] Failed to connect to database server
[2023-09-10 15:30:45] [INFO] Retrying connection in 5 seconds
[2023-09-10 15:30:45] [INFO] Connection established
[2023-09-10 15:30:45] [INFO] Application shutting down
Cet exemple démontre une application plus avancée de la sortie de fichier en Python. Chaque fois que le script s'exécute, il crée un nouveau fichier journal avec un horodatage dans le nom, ce qui facilite l'organisation et la gestion des journaux.
Ces exemples pratiques montrent comment la redirection de la sortie de la fonction print() vers des fichiers peut être utilisée pour créer des applications utiles comme des générateurs de rapports et des systèmes de journalisation. Les techniques que vous avez apprises dans ce laboratoire peuvent être appliquées à de nombreux scénarios réels où vous devez enregistrer la sortie du programme pour une référence ou une analyse ultérieure.
Résumé
Dans ce laboratoire, vous avez appris à rediriger la sortie de la fonction print() de Python vers des fichiers au lieu de la console. Voici les concepts clés couverts :
- Les bases de la fonction
print(), y compris ses paramètres et options de formatage - Comment rediriger la sortie de
print()vers un fichier en utilisant le paramètrefile - La différence entre le mode écriture ("w") et le mode ajout ("a") lors de l'utilisation de fichiers
- Utilisation de l'instruction
withpour une gestion des fichiers plus sûre - Applications pratiques de la redirection de la sortie de fichier, notamment :
- Création de fichiers journaux (log files)
- Génération de rapports formatés
- Mise en œuvre d'un système de rotation de journaux
Ces techniques sont précieuses pour de nombreux scénarios réels, tels que :
- Journalisation des événements et des erreurs d'application
- Création de rapports de données
- Enregistrement de la sortie du programme pour une analyse ultérieure
- Génération de fichiers texte formatés
En maîtrisant la redirection de la sortie de la fonction print() vers des fichiers, vous avez acquis un outil puissant pour la programmation Python qui vous aidera à créer des applications plus polyvalentes et pratiques.



