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