ファイルの読み取りまたは書き込み中に、開かれたファイルで実行できる操作の種類はアクセス モードによって決まります。ファイルを開いた後にどのように使用されるかを指します。これらのモードは、ファイル内のファイル ハンドルの位置も定義します。これらのアクセス モードの定義は次のとおりです。
- 追加のみ (「a」): 書き込み用にファイルを開きます。追加と読み取り (「a+」): 読み取りと書き込みのためにファイルを開きます。
Python の追加モードでファイルを開くと、ハンドルはファイルの末尾に配置されます。書き込まれるデータは、既存のデータの最後に挿入されます。
例 1: 追加モードと書き込みモードを説明する Python プログラム。
Python3
C++で文字列を分割する
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)> |
>
>