i documenti esplicitamente dicono di non usarlo quando si scrive in un file
Questo non è esatto, il dottore dice di non utilizzare in testo modalità.
Il os.linesep
viene utilizzato quando si desidera ripetere le righe di un file di testo. Lo scanner interno riconosce lo os.linesep
e lo sostituisce con un singolo "\ n".
Per illustrazione, scriviamo un file binario che contiene 3 linee separate da "\ r \ n" (delimitatore di Windows):
import io
filename = "text.txt"
content = b'line1\r\nline2\r\nline3'
with io.open(filename, mode="wb") as fd:
fd.write(content)
Il contenuto del file binario è:
with io.open(filename, mode="rb") as fd:
for line in fd:
print(repr(line))
NB: Ho usato la modalità "rb" per leggere il file come file binario.
ottengo:
b'line1\r\n'
b'line2\r\n'
b'line3'
Se ho letto il contenuto del file utilizzando la modalità di testo, in questo modo:
with io.open(filename, mode="r", encoding="ascii") as fd:
for line in fd:
print(repr(line))
ottengo:
'line1\n'
'line2\n'
'line3'
Il delimitatore è sostituito da "\ n".
Il os.linesep
viene utilizzato anche in modalità di scrittura: qualsiasi carattere "\ n" è convertito al separatore di default del sistema riga: "\ r \ n" su Windows, "\ n", a POSIX, ecc
Con la funzione io.open
è possibile forzare il separatore di linea in base alle proprie esigenze.
Esempio: come scrivere un file di Windows di testo:
with io.open(filename, mode="w", encoding="ascii", newline="\r\n") as fd:
fd.write("one\ntwo\nthree\n")
Se stai leggendo questo file in modalità testo come questo:
with io.open(filename, mode="rb") as fd:
content = fd.read()
print(repr(content))
si ottiene:
b'one\r\ntwo\r\nthree\r\n'
Si wouldn funziona se la codifica è ascii incompatibile. 'len ('\ n'.encode (' utf-16 '))' è 4 –