os.fspath(), os.fsencode() și os.fsdecode() în Python

Sistem de operare (os) Python 3.2+ (fspath: 3.6+)

Conversii între obiecte cale, texte și bytes, după codificarea sistemului de fișiere.

Sintaxă
os.fspath(cale)
os.fsencode(nume)
os.fsdecode(nume)

Ce face os.fspath(), os.fsencode() și os.fsdecode()

fspath(p) transformă orice obiect de tip cale (Path sau o clasă cu metoda __fspath__) în str sau bytes; textele și octeții sunt returnați neschimbați. Este util în funcții care trebuie să accepte orice fel de cale.

fsencode() transformă un nume de fișier în bytes, iar fsdecode() în text, folosind codificarea sistemului de fișiere și tratarea erorilor surrogateescape, astfel încât chiar și numele cu octeți invalizi pot fi convertite fără pierderi.

Parametri

Parametru Descriere
cale / nume Calea sau numele.

Ce returnează

str sau bytes.

Exemple

Exemplul 1: Conversii

import os
from pathlib import Path
print(os.fspath(Path("date") / "a.txt"), os.fspath(b"x"))
print(os.fsencode("Brașov.txt"))
print(os.fsdecode(b"Bra\xc8\x99ov.txt"))
print(repr(os.fsdecode(b"gresit\xff.txt")), os.fsencode(os.fsdecode(b"gresit\xff.txt")))
try:
    os.fspath(42)
except TypeError as e:
    print("Eroare:", e)

Rezultat

date/a.txt b'x'
b'Bra\xc8\x99ov.txt'
Brașov.txt
'gresit\udcff.txt' b'gresit\xff.txt'
Eroare: expected str, bytes or os.PathLike object, not int

Greșeli frecvente

  • Folosești str(cale) pentru a accepta căi: transformă în text și obiecte care nu sunt căi. os.fspath dă eroare clară pentru valori greșite.

Comenzi înrudite