Pythonはファイルに追加します
ファイルの読み取りまたは書き込み中に、開かれたファイルで実行できる操作の種類はアクセス モードによって決まります。ファイルを開いた後にどのように使用されるかを指します。これらのモードは、ファイル内のファイル ハンドルの位置も定義します。これらのアクセス モードの定義は次のとおりです。
- 追加のみ (「a」): 書き込み用にファイルを開きます。追加と読み取り (「a+」): 読み取りと書き込みのためにファイルを開きます。
Python の追加モードでファイルを開くと、ハンドルはファイルの末尾に配置されます。書き込まれるデータは、既存のデータの最後に挿入されます。
例 1: 追加モードと書き込みモードを説明する Python プログラム。
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()> |
出力:
Output of Readlines after appending This is Delhi This is Paris This is LondonToday Output of Readlines after writing Tomorrow
例 2: 新しい行からデータを追加
上記の例では、 ファイル処理 , 改行からデータが追加されていないことがわかります。これは、改行文字「 」をファイルに書き込むことで実行できます。
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()> |
出力:
Output of Readlines after appending This is Delhi This is Paris This is London TodayTomorrow
注記: 「 」は 2 バイトの特殊文字として扱われます。
例 3: Python での With ステートメントの使用
ステートメント付き 例外処理で使用され、コードがすっきりして読みやすくなります。ファイル ストリームなどの共通リソースの管理が簡素化されます。上記の実装とは異なり、with ステートメントを使用する場合は file.close() を呼び出す必要はありません。 with ステートメント自体により、リソースの適切な取得と解放が保証されます。
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())> |
出力:
Hello This is Delhi This is Paris This is London Today
注記: with ステートメントについて詳しく知りたい場合 ここをクリック 。
shutil モジュールの使用:
このアプローチでは、shutil.copyfileobj() メソッドを使用して、別のファイル (source_file) の内容を「file.txt」に追加します。これは、最初に内容をメモリに読み取ることなく、あるファイルの内容を別のファイルに追加する場合に便利です。
アプローチ:
このコードでは、shutil.copyfileobj() 関数を使用して、source_file オブジェクトの内容を file.txt という新しいファイルにコピーします。 with ステートメントは、ファイル オブジェクト f を使用してファイルを開いたり、自動的に閉じたりするために使用されます。
時間計算量:
shutil.copyfileobj() 関数の時間計算量は、ファイルのすべてのバイトを読み書きする必要があるため、コピーされるファイルのサイズに比例します。したがって、コードの時間計算量は O(n) です。ここで、n はsource_file のサイズです。
空間の複雑さ:
ファイル オブジェクトsource_file および f に必要なメモリを超える追加メモリは割り当てられないため、コードのスペース複雑度は O(1) です。 shutil.copyfileobj() 関数はファイルの内容をチャンクにコピーするため、ファイル全体を一度にメモリにロードする必要はありません。
全体として、コードには線形の時間計算量と一定の空間計算量があり、時間計算量はコピーされるファイルのサイズに比例します。
Python3
import> shutil> with> open> (> 'file.txt'> ,> 'a'> ) as f:> > shutil.copyfileobj(source_file, f)> |