Når du læser eller skriver til en fil, styrer adgangstilstand den type handlinger, der er mulige i den åbnede fil. Det refererer til, hvordan filen vil blive brugt, når den er åbnet. Disse tilstande definerer også placeringen af filhåndtaget i filen. Definitionen af disse adgangstilstande er som følger:
- Tilføj kun ('a'): Åbn filen til skrivning. Tilføj og læs ('a+'): Åbn filen til læsning og skrivning.
Når filen åbnes i tilføjelsestilstand i Python, er håndtaget placeret i slutningen af filen. Dataene, der skrives, vil blive indsat til sidst, efter de eksisterende data.
Eksempel 1: Python-program til at illustrere Tilføj vs skrivetilstand.
Python3
azurblå abonnement
file1>=> open>(>'myfile.txt'>,>'w'>)> L>=> [>'This is Delhi
'>,>'This is Paris
'>,>'This is London'>]> file1.writelines(L)> file1.close()> # Append-adds at last> file1>=> open>(>'myfile.txt'>,>'a'>)># append mode> file1.write(>'Today
'>)> file1.close()> file1>=> open>(>'myfile.txt'>,>'r'>)> print>(>'Output of Readlines after appending'>)> print>(file1.read())> print>()> file1.close()> # Write-Overwrites> file1>=> open>(>'myfile.txt'>,>'w'>)># write mode> file1.write(>'Tomorrow
'>)> file1.close()> file1>=> open>(>'myfile.txt'>,>'r'>)> print>(>'Output of Readlines after writing'>)> print>(file1.read())> print>()> file1.close()> |
>
>
Produktion:
Output of Readlines after appending This is Delhi This is Paris This is LondonToday Output of Readlines after writing Tomorrow>
Eksempel 2: Tilføj data fra en ny linje
I ovenstående eksempel på filhåndtering , kan det ses, at dataene ikke er tilføjet fra den nye linje. Dette kan gøres ved at skrive den nye linje ' '-tegnet til filen.
Python3
# Python program to illustrate> # append from new line> file1>=> open>(>'myfile.txt'>,>'w'>)> L>=> [>'This is Delhi
'>,>'This is Paris
'>,>'This is London'>]> file1.writelines(L)> file1.close()> # Append-adds at last> # append mode> file1>=> open>(>'myfile.txt'>,>'a'>)> # writing newline character> file1.write(>'
'>)> file1.write(>'Today'>)> # without newline character> file1.write(>'Tomorrow'>)> file1>=> open>(>'myfile.txt'>,>'r'>)> print>(>'Output of Readlines after appending'>)> print>(file1.read())> print>()> file1.close()> |
>
>
Produktion:
Output of Readlines after appending This is Delhi This is Paris This is London TodayTomorrow>
Bemærk: ' ' behandles som et specialtegn på to bytes.
Eksempel 3: Brug af With-sætning i Python
med erklæring bruges i undtagelseshåndtering for at gøre koden renere og meget mere læsbar. Det forenkler styringen af fælles ressourcer som filstrømme. I modsætning til ovenstående implementeringer er der ingen grund til at kalde file.close() ved brug med sætning. Selve med-erklæringen sikrer korrekt anskaffelse og frigivelse af ressourcer.
Python3
# Program to show various ways to> # append data to a file using> # with statement> L>=> [>'This is Delhi
'>,>'This is Paris
'>,>'This is London
'>]> # Writing to file> with>open>(>'myfile.txt'>,>'w'>) as file1:> ># Writing data to a file> >file1.write(>'Hello
'>)> >file1.writelines(L)> # Appending to file> with>open>(>'myfile.txt'>,>'a'>) as file1:> >file1.write(>'Today'>)> # Reading from file> with>open>(>'myfile.txt'>,>'r+'>) as file1:> ># Reading form a file> >print>(file1.read())> |
>
>
Produktion:
Hello This is Delhi This is Paris This is London Today>
Bemærk: At vide mere om med statement Klik her .
Brug af shutil-modulet:
Denne tilgang bruger metoden shutil.copyfileobj() til at tilføje indholdet af en anden fil (kildefil) til 'file.txt'. Dette kan være nyttigt, hvis du vil tilføje indholdet af en fil til en anden uden først at skulle læse indholdet ind i hukommelsen.
Nærme sig:
Koden bruger funktionen shutil.copyfileobj() til at kopiere indholdet af source_file-objektet til en ny fil kaldet file.txt. With-sætningen bruges til at åbne og automatisk lukke filen ved at bruge filobjektet f.
Tidskompleksitet:
Tidskompleksiteten af funktionen shutil.copyfileobj() er proportional med størrelsen på filen, der kopieres, da den skal læse og skrive hver byte i filen. Derfor er kodens tidskompleksitet O(n), hvor n er størrelsen på kildefilen.
Rumkompleksitet:
Kodens pladskompleksitet er O(1), da den ikke allokerer yderligere hukommelse ud over, hvad der kræves til filobjekterne source_file og f. Funktionen shutil.copyfileobj() kopierer filindholdet i bidder, så den behøver ikke at indlæse hele filen i hukommelsen på én gang.
Samlet set har koden en lineær tidskompleksitet og konstant rumkompleksitet, hvor tidskompleksiteten er proportional med størrelsen på filen, der kopieres.
Python3
import> shutil> with>open>(>'file.txt'>,>'a'>) as f:> >shutil.copyfileobj(source_file, f)> |
>
>