Met de methode “met open() als bestand”, hoe schrijf je meer dan één keer?

Normaal gesproken zou ik het volgende doen om een bestand te schrijven:

the_file = open("somefile.txt","wb")
the_file.write("telperion")

maar om de een of andere reden schrijft iPython (Jupyter) de bestanden NIET. Het is best raar, maar de enige manier om het werkend te krijgen is als ik het op deze manier schrijf:

with open('somefile.txt', "wb") as the_file:
    the_file.write("durin's day\n")
with open('somefile.txt', "wb") as the_file:
    the_file.write("legolas\n")

Maar het is duidelijk dat het het bestandsobject opnieuw gaat maken en herschrijven.

Waarom werkt de code in het eerste blok niet? Hoe kon ik het tweede blok laten werken?


Antwoord 1, autoriteit 100%

De w-vlag betekent “open voor schrijven en kap het bestand af”; u wilt waarschijnlijk het bestand openen met de vlag a, wat betekent “het bestand openen om toe te voegen”.

Het lijkt er ook op dat je Python 2 gebruikt. Je zou de vlag bniet moeten gebruiken, behalve in het geval dat je binaire inhoud schrijft in plaats van platte tekst. In Python 3 zou je code een fout produceren.

Dus:

with open('somefile.txt', 'a') as the_file:
    the_file.write("durin's day\n")
with open('somefile.txt', 'a') as the_file:
    the_file.write("legolas\n")

Wat betreft de invoer die niet wordt weergegeven in het bestand met behulp van de filehandle = open('file', 'w'), komt dit omdat de bestandsuitvoer wordt gebufferd – er wordt alleen een groter stuk geschreven naar een tijd. Om ervoor te zorgen dat het bestand aan het einde van een cel wordt leeggemaakt, kunt u filehandle.flush()als laatste instructie gebruiken.

Other episodes