Python dołącza do pliku

Podczas odczytu lub zapisu do pliku tryb dostępu reguluje rodzaj operacji możliwych do wykonania na otwartym pliku. Odnosi się do sposobu wykorzystania pliku po jego otwarciu. Tryby te definiują również położenie uchwytu pliku w pliku. Definicja tych trybów dostępu jest następująca:

    Tylko dołącz („a”): Otwórz plik do zapisu. Dołącz i przeczytaj („a+”): Otwórz plik do odczytu i zapisu.

Kiedy plik jest otwierany w trybie dołączania w Pythonie, uchwyt znajduje się na końcu pliku. Zapisywane dane zostaną wstawione na końcu, po danych już istniejących.

Przykład 1: Program w języku Python ilustrujący tryb dodawania i zapisu.

Python3




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()>

Wyjście:

Output of Readlines after appending This is Delhi This is Paris This is LondonToday Output of Readlines after writing Tomorrow 

Przykład 2: Dołącz dane z nowej linii

W powyższym przykładzie Obsługa plików , widać, że dane nie są dodawane od nowej linii. Można to zrobić wpisując do pliku znak nowej linii „ ”.

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()>

Wyjście:

Output of Readlines after appending This is Delhi This is Paris This is London TodayTomorrow 

Notatka: „ ” jest traktowane jako znak specjalny składający się z dwóch bajtów.

Przykład 3: Używanie instrukcji With w Pythonie

z oświadczeniem jest używany w obsłudze wyjątków, aby kod był czystszy i znacznie bardziej czytelny. Upraszcza zarządzanie typowymi zasobami, takimi jak strumienie plików. W przeciwieństwie do powyższych implementacji, podczas korzystania z instrukcji with nie ma potrzeby wywoływania metody file.close(). Sama instrukcja with zapewnia prawidłowe pozyskiwanie i uwalnianie zasobów.

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())>

Wyjście:

Hello This is Delhi This is Paris This is London Today 

Notatka: Aby dowiedzieć się więcej o z oświadczeniem Kliknij tutaj .

Korzystanie z modułu Shuil:

Podejście to wykorzystuje metodę Shutil.copyfileobj() w celu dołączenia zawartości innego pliku (pliku_źródłowego) do „pliku.txt”. Może to być przydatne, jeśli chcesz dołączyć zawartość jednego pliku do drugiego bez konieczności wcześniejszego wczytywania zawartości do pamięci.

Zbliżać się:
W kodzie zastosowano funkcję Shutil.copyfileobj() w celu skopiowania zawartości obiektu source_file do nowego pliku o nazwie file.txt. Instrukcja with służy do otwierania i automatycznego zamykania pliku przy użyciu obiektu pliku f.

Złożoność czasowa:
Złożoność czasowa funkcji Shutil.copyfileobj() jest proporcjonalna do rozmiaru kopiowanego pliku, ponieważ musi ona czytać i zapisywać każdy bajt pliku. Dlatego złożoność czasowa kodu wynosi O(n), gdzie n jest rozmiarem pliku źródłowego.

Złożoność przestrzeni:
Złożoność przestrzenna kodu wynosi O(1), ponieważ nie przydziela on żadnej dodatkowej pamięci poza tym, co jest wymagane dla obiektów plikowych plik_źródłowy i f. Funkcja Shutil.copyfileobj() kopiuje zawartość pliku fragmentami, dzięki czemu nie ma potrzeby ładowania całego pliku do pamięci na raz.

Ogólnie rzecz biorąc, kod ma liniową złożoność czasową i stałą złożoność przestrzenną, gdzie złożoność czasowa jest proporcjonalna do rozmiaru kopiowanego pliku.

Python3




import> shutil> with> open> (> 'file.txt'> ,> 'a'> ) as f:> > shutil.copyfileobj(source_file, f)>