Mai mult
Modul corect de a scrie o linie de fișiere?
Am'm folosit pentru a face print >>f, "buna"`
Cu toate acestea, se pare că print >>
este obtinerea a depreciat. Ce este recomandat mod de a face linia de mai sus?
Actualizare:
În ceea ce privește toate aceste răspunsuri cu "\n"
...asta e universal sau Unix-specifice? De EXEMPLU, ar trebui să fac `"\r\n" pe Windows?
972
12
Acest lucru ar trebui să fie la fel de simplu ca:
Din Documentația:
Ceva util de citit:
deschis()
os
(în specialos.linesep
)Ar trebui să utilizați `print () funcția care este disponibil începând cu Python 2.6+
Pentru Python 3 nu't nevoie de "import", din anii `print () funcția este implicit.
Alternativa ar fi să utilizați:
Cu referire la Python documentația în ceea ce privește liniile:
De python-docs recomanda acest mod:
Deci, acest lucru este modul în care mă fac de obicei :)
Declarație de docs.python.org:
În ceea ce privește sistemul de operare.linesep:
Aici este exact nemodificat Python 2.7.1 interpret sesiune pe Windows:
Pe Windows:
Cum era de așteptat, sistemul de operare.linesep nu NU produce același rezultat ca în
'\n'
. Nu există nici un fel că s-ar putea produce același rezultat.'salut' + sistem de operare.linesep
este echivalent cu'salut\r\n', care este **NU** echivalent cu
'hi acolo\n'`.It's simplu: foloseste
\n
, care va fi tradus în mod automat de sistemul de operare.linesep. Și-l's a fost atât de simplu din primul port de Python pentru Windows.Nu există nici un punct în utilizarea sistemului de operare.linesep pe non-sistemele de operare Windows, și produce rezultate greșite pe Windows.
NU UTILIZAȚI sistemul de operare.linesep!
Nu cred că există o "corect" mod.
Mi-ar folosi:
In memoriam Tim Lingușitor.
În Python 3 este o funcție, dar în Python 2, puteți adăuga acest la partea de sus a fișier sursă:
Apoi faci
Dacă sunteți scris o mulțime de date și viteza este un motiv de îngrijorare ar trebui să te duci cu
f.scrie(...)
. Am făcut o scurtă comparație de viteză și a fost considerabil mai repede decâtprint(..., file=f)
atunci când se efectuează un număr mare de scrie.În medie
scrie` terminat în 2.45 s pe masina mea, întrucât
print`` a luat aproximativ 4 ori mai mult (9.76 s). Acestea fiind spuse, în cele mai multe scenarii reale acest lucru nu va fi o problemă.Dacă alegeți să mergeți cu
print(..., file=f)
veți găsi, probabil, că'll a vrut să suprime newline din timp în timp, sau să o înlocuiască cu altceva. Acest lucru poate fi realizat prin setarea opționalend
parametru, de exemplu;Oricum ai alege I'd sugerează utilizarea
cu
, deoarece acesta face codul mai ușor de citit.Update: Această diferență în performanță se explică prin faptul că
a scrie
este extrem de tampon și se întoarce înainte de orice scrie pe disc avea loc (a se vedea acest răspuns), întrucâtprint
(probabil) utilizează linia de tamponare. Un test simplu pentru acest lucru ar fi pentru a verifica performanta pentru mult timp, scrie la fel de bine, în cazul în care dezavantajele (în termeni de viteză) pentru linia de tamponare ar fi mai puțin pronunțată.Diferenta de performanta devine acum mult mai puțin pronunțată, cu un timp mediu de 2.20 pentru
scrie` și 3.10 s
print. Dacă aveți nevoie pentru a înlănțui un grup de siruri de caractere pentru a obține această lungă linie de performanta va avea de suferit, asa ca foloseste-cazuri în care
print`` ar fi mai eficient sunt un pic mai rare.Deoarece 3.5 puteți utiliza, de asemenea, [pathlib][1] pentru acest scop:
[1]: https://docs.python.org/3/library/pathlib.html#pathlib.Path.write_text
Când ai spus că Linia aceasta înseamnă seria unor personaje care s-au încheiat la '\n' caractere. Linie ar trebui să fie trecută la un moment dat, așa că ar trebui să ia în considerare '\n' la sfârșitul fiecărui rând. Aici este soluția:
în modul de adăugare după fiecare scrie cursorul trece la linie nouă, dacă doriți să utilizați 'g' modul ar trebui să adăugați '\n' caractere la sfârșitul scrie funcția ():
Se poate folosi, de asemenea,
io
modul ca în:Puteți încerca, de asemenea,
filewriter
pip instala filewriter
`` din filewriter import Scriitor
Scriitor(filename='my_file', ext='txt') << ["rândul 1 hi acolo", "randul 2"] `
Scrie în my_file.txt
Are o iterable sau un obiect cu `str sprijinul.
Când am nevoie pentru a scrie noi linii mult, am defini-o lambda care utilizează un "print" funcția:
Această abordare are avantajul că se poate utiliza toate caracteristicile care sunt disponibile cu "imprimare" funcția.
Actualizare: după Cum este menționat de către Gheorghi în secțiunea de comentarii, este posibil pentru a îmbunătăți această idee mai departe cu "parțial" funcția:
IMHO, asta e un mod mai funcțional și mai puțin criptic abordare.