σμimplied vol · KKmax(S−K,0)udβρᵢⱼfat tailsPnL · drawdownyield · TdSₜ = μSₜ dt + σSₜ dWₜC = S·N(d₁) − K·e⁻ʳᵀ·N(d₂)σₚ² = wᵀΣwd₁ = [ln(S/K) + (r + σ²⁄2)T] ⁄ σ√T∂V/∂t + ½σ²S²·∂²V/∂S² + rS·∂V/∂S − rV = 0Sharpe = (Rₚ − R_f) ⁄ σₚVaR₉₉ = μ − 2.33σρ = Cov(X,Y) ⁄ σₓσᵧE[Rₚ] = Σ wᵢ·E[Rᵢ]φ(x) = e^(−x²/2) ⁄ √2πE[Rᵢ] = R_f + βᵢ(E[Rₘ] − R_f)dXₜ = θ(μ − Xₜ)dt + σ dWₜσ²ₜ = ω + α·ε²ₜ₋₁ + β·σ²ₜ₋₁C − P = S − K·e⁻ʳᵀΔ = ∂V/∂S Γ = ∂²V/∂S²p = (e^(rΔt) − d) ⁄ (u − d)rₜ = ln(Pₜ ⁄ Pₜ₋₁)E[Xₜ₊₁ | ℱₜ] = Xₜf* = (bp − q) ⁄ bz = (x − μ) ⁄ σP(N=k) = λᵏe^(−λ) ⁄ k!Θ = −∂V/∂Tν = S·φ(d₁)·√Tmin wᵀΣw s.t. wᵀμ = μ*∫Σ∂∞λ
σμimplied vol · KKmax(S−K,0)udβρᵢⱼfat tailsPnL · drawdownyield · TdSₜ = μSₜ dt + σSₜ dWₜC = S·N(d₁) − K·e⁻ʳᵀ·N(d₂)σₚ² = wᵀΣwd₁ = [ln(S/K) + (r + σ²⁄2)T] ⁄ σ√T∂V/∂t + ½σ²S²·∂²V/∂S² + rS·∂V/∂S − rV = 0Sharpe = (Rₚ − R_f) ⁄ σₚVaR₉₉ = μ − 2.33σρ = Cov(X,Y) ⁄ σₓσᵧE[Rₚ] = Σ wᵢ·E[Rᵢ]φ(x) = e^(−x²/2) ⁄ √2πE[Rᵢ] = R_f + βᵢ(E[Rₘ] − R_f)dXₜ = θ(μ − Xₜ)dt + σ dWₜσ²ₜ = ω + α·ε²ₜ₋₁ + β·σ²ₜ₋₁C − P = S − K·e⁻ʳᵀΔ = ∂V/∂S Γ = ∂²V/∂S²p = (e^(rΔt) − d) ⁄ (u − d)rₜ = ln(Pₜ ⁄ Pₜ₋₁)E[Xₜ₊₁ | ℱₜ] = Xₜf* = (bp − q) ⁄ bz = (x − μ) ⁄ σP(N=k) = λᵏe^(−λ) ⁄ k!Θ = −∂V/∂Tν = S·φ(d₁)·√Tmin wᵀΣw s.t. wᵀμ = μ*∫Σ∂∞λ
uantCraft AcademyParcours
Ctrl K
AO
+1,2 k apprenants
ConnexionRejoindre ↗
Parcours
AO
+1,2 k apprenants
Connexion
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
Parcours Python›Module 1 · Les bases de Python pour les quants›Sujet 1.16·~40 minDébutant

Lire et écrire des fichiers texte

Position dans le parcoursModule 1 sur 11 · Sujet 16 sur 33
1.16 Lire et écrire des fichiers texte
—Score du lab— / 100XP total—Série—

Ouvrir un fichier avec `with`

Les variables disparaissent quand le programme se termine ; les fichiers non. open(path, mode) donne un objet fichier, et mode indique ce que vous voulez : "r" pour lire (par défaut), "w" pour écrire et "a" pour ajouter. Ouvrez toujours les fichiers avec un bloc with : with open(path) as file:. À la fin du bloc, Python ferme le fichier pour vous, même en cas d'erreur, pour que les données ne soient ni perdues ni à moitié écrites. Passez encoding="utf-8" pour que le texte soit lu et écrit de la même façon sur tous les ordinateurs.

# Write a file, then read it back
with open("fills.txt", "w", encoding="utf-8") as file:
    file.write("AAPL,184.25,200\n")
    file.write("MSFT,410.20,50\n")

with open("fills.txt", encoding="utf-8") as file:
    text = file.read()
print(repr(text))  # 'AAPL,184.25,200\nMSFT,410.20,50\n'

Lire ligne par ligne

file.read() renvoie tout le fichier dans une seule chaîne. Le plus souvent on parcourt l'objet fichier, qui donne une ligne à la fois et fonctionne même pour des fichiers trop gros pour la mémoire : for line in file:. Chaque ligne se termine encore par \n : nettoyez-la avec line.strip(). Une ligne vide devient la chaîne vide "" après nettoyage, qui est fausse, donc if text: l'ignore. file.readlines() et text.splitlines() donnent des listes de lignes quand on les veut toutes d'un coup.

# Read line by line, skipping blank lines
with open("fills.txt", "a", encoding="utf-8") as file:
    file.write("\n")                # a blank line

total = 0.0
with open("fills.txt", encoding="utf-8") as file:
    for line in file:
        text = line.strip()
        if not text:
            continue
        symbol, price, quantity = text.split(",")
        total += float(price) * int(quantity)
print(round(total, 2))              # 57360.0

Écrire et ajouter

file.write(text) écrit exactement la chaîne donnée et renvoie le nombre de caractères. Elle n'ajoute pas de saut de ligne : terminez chaque ligne par "\n" vous-même. Le mode "w" vide d'abord le fichier (et le crée s'il n'existe pas) : ouvrir un fichier existant avec "w" jette son ancien contenu. Le mode "a" conserve l'existant et ajoute à la fin. On ne peut écrire que des chaînes : convertissez d'abord les nombres, par exemple avec une f-string comme f"{price:.2f}".

# "w" starts over, "a" adds to the end
with open("log.txt", "w", encoding="utf-8") as file:
    file.write("start\n")
with open("log.txt", "a", encoding="utf-8") as file:
    file.write("order 1 filled\n")
    file.write(f"pnl {12.5:+.2f}\n")

with open("log.txt", encoding="utf-8") as file:
    print(file.read().splitlines())  # ['start', 'order 1 filled', 'pnl +12.50']

with open("log.txt", "w", encoding="utf-8") as file:
    pass                             # opening with "w" emptied it
with open("log.txt", encoding="utf-8") as file:
    print(repr(file.read()))         # ''

Chemins et fichiers absents

Un chemin relatif comme "fills.txt" est cherché dans le dossier courant du programme ; utilisez os.path.join(folder, name) pour construire des chemins sans se soucier des séparateurs. Ouvrir en lecture un fichier inexistant lève FileNotFoundError, que l'on peut intercepter avec try/except quand l'absence est un cas attendu. Pour les petits fichiers, pathlib.Path(path).read_text() et .write_text(text) ouvrent, lisent ou écrivent et ferment en un seul appel.

import os
from pathlib import Path

# A missing file is an exception you can handle
def count_lines(path):
    try:
        with open(path, encoding="utf-8") as file:
            return len(file.read().splitlines())
    except FileNotFoundError:
        return 0

print(count_lines("fills.txt"))      # 3
print(count_lines("nope.txt"))       # 0

# pathlib does open + read + close in one call
path = Path(os.path.join(".", "fills.txt"))
print(path.read_text(encoding="utf-8").splitlines()[0])  # AAPL,184.25,200
"w" efface, et un fichier vaut ce que vaut son formatVérifiez bien le mode avant d'exécuter du code qui écrit : "w" sur le mauvais chemin détruit des données sans retour possible. Choisissez un format simple (un enregistrement par ligne, champs séparés par des virgules) et écrivez ensemble le lecteur et l'écrivain pour qu'ils soient d'accord. Vous allez bientôt rencontrer le format CSV, qui formalise exactement cette idée.
  • with open(path, mode, encoding="utf-8") as file: ouvre le fichier et le ferme toujours.
  • for line in file: lit une ligne à la fois ; line.strip() retire le saut de ligne.
  • "w" vide le fichier, "a" ajoute ; write n'ajoute pas de saut de ligne.

À suivre : les fichiers CSV, la façon standard de stocker des tableaux de prix et de transactions.

Lab : ce qui est noté

  • Charger une liste de suivi depuis un fichier avec read_symbols25 pts
  • Transformer un fichier d'exécutions en tuples avec parse_trades25 pts
  • Enregistrer un rapport de gains et pertes avec write_report25 pts
  • Ajouter à un journal sans le perdre avec append_lines25 pts
Explorateur · lab-16-1
▾ lab-16-1
…
bash · dans le navigateur
learner@quantcraft:~/lab-16-1$
Python pas encore chargéPythonLn 1, Col 1Spaces: 4UTF-8

Réinitialiser ce sujet ?

Tout le contenu de lab-16-1 revient aux fichiers de départ et le terminal est vidé. Votre solution actuelle sera perdue : cette action est irréversible.

Sera réinitialisé
  • main.py → code de départ
  • Historique du terminal et sortie des tests
  • Modifications non soumises
Sera conservé
  • Meilleur score du lab
  • Votre XP et votre série
  • Progression du cours et notes

Connectez-vous pour exécuter votre code.

Tous les cours sont gratuits à lire. Créez un compte ou connectez-vous pour exécuter du code, lancer les tests et soumettre ce lab.

  • IDE dans le navigateur avec terminal bash — rien à installer
  • Correction instantanée, XP et votre place dans le parcours
Créer un compteSe connecter
OU
Continuer avec GitHub