Python には、ファイルの作成、書き込み、読み取りのための組み込み関数が用意されています。 Pythonで扱えるファイルには通常のテキストファイルとバイナリファイル(0と1のバイナリ言語で書かれたもの)の2種類があります。
- テキスト ファイル: このタイプのファイルでは、テキストの各行は EOL (End of Line) と呼ばれる特殊文字で終了します。これは、デフォルトでは Python の改行文字 (「
」) です。バイナリ ファイル: このタイプのファイルでは、行にターミネータがなく、データは機械が理解できるバイナリ言語に変換された後に保存されます。
注記: ファイル処理について詳しく知りたい場合 ここをクリック 。
目次
アクセスモード
アクセス モードは、開かれたファイルで実行できる操作の種類を制御します。ファイルを開いた後にどのように使用されるかを指します。これらのモードは、ファイル内のファイル ハンドルの位置も定義します。ファイル ハンドルはカーソルのようなもので、ファイル内のどこからデータを読み書きする必要があるかを定義します。ファイルを読み取るためのさまざまなアクセス モードは次のとおりです。
- 書き込み専用 (「w」) : 書き込み用にファイルを開きます。既存のファイルの場合、データは切り詰められ、上書きされます。ハンドルはファイルの先頭に配置されます。ファイルが存在しない場合はファイルを作成します。書き込みおよび読み取り (「w+」) : ファイルを読み取りおよび書き込み用に開きます。既存のファイルの場合、データは切り詰められ、上書きされます。ハンドルはファイルの先頭に配置されます。追加のみ ('a') : 書き込み用にファイルを開きます。ファイルが存在しない場合は作成されます。ハンドルはファイルの最後に配置されます。書き込まれるデータは、既存のデータの最後に挿入されます。
注記: アクセスモードについて詳しく知りたい場合 ここをクリック 。
ファイルを開く
これは open() 関数を使用して行われます。この機能のためにモジュールをインポートする必要はありません。 構文:
File_object = open(r'File_Name', 'Access_Mode')>
ファイルは Python プログラム ファイルと同じディレクトリに存在する必要があります。そうでない場合は、ファイル名の代わりにファイルの完全なアドレスを書き込む必要があります。 注記: ファイル名文字列内の文字が特殊文字として扱われないように、ファイル名の前に r が置かれます。たとえば、ファイル アドレスに emp がある場合、 はタブ文字として扱われ、アドレスが無効であるというエラーが発生します。 r は文字列を raw にします。つまり、文字列に特殊文字が含まれていないことを示します。ファイルが同じディレクトリ内にあり、アドレスが設定されていない場合、r は無視できます。
Python3
# Open function to open the file 'MyFile1.txt'> # (same directory) in read mode and> file1>=> open>('MyFile.txt', 'w')> > # store its reference in the variable file1> # and 'MyFile2.txt' in D:Text in file2> file2>=> open>(r'D:TextMyFile2.txt', 'w>+>')> |
>
>
ここでは、file1 が MyFile1 のオブジェクトとして作成され、file2 が MyFile2 のオブジェクトとして作成されます。
ファイルを閉じる
close() 関数はファイルを閉じ、そのファイルによって獲得されたメモリ領域を解放します。ファイルが不要になった場合、または別のファイル モードで開く場合に使用されます。 構文:
File_object.close()>
Python3
# Opening and Closing a file 'MyFile.txt'> # for object name file1.> file1>=> open>('MyFile.txt', 'w')> file1.close()> |
>
>
ファイルへの書き込み
ファイルに書き込む方法は 2 つあります。
- write() : 文字列 str1 をテキスト ファイルの 1 行に挿入します。
File_object.write(str1)>
- writelines() : 文字列要素のリストの場合、各文字列がテキスト ファイルに挿入されます。複数の文字列を一度に挿入するために使用されます。
File_object.writelines(L) for L = [str1, str2, str3]>
注記: 「 」は 2 バイトの特殊文字として扱われます。 例:
Python3
# Python program to demonstrate> # writing to file> # Opening a file> file1>=> open>(>'myfile.txt'>,>'w'>)> L>=> ['This>is> Delhi
', 'This>is> Paris
', 'This>is> London
']> s>=> 'Hello
'> # Writing a string to file> file1.write(s)> # Writing multiple strings> # at a time> file1.writelines(L)> # Closing file> file1.close()> # Checking if the data is> # written to file or not> file1>=> open>(>'myfile.txt'>,>'r'>)> print>(file1.read())> file1.close()> |
>
>
出力:
Hello This is Delhi This is Paris This is London>
ファイルに追加する
ファイルを追加モードで開くと、ハンドルはファイルの末尾に配置されます。書き込まれるデータは、既存のデータの最後に挿入されます。書き込みモードと追加モードの違いを明確にするために、以下の例を見てみましょう。
Python3
# Python program to illustrate> # Append vs write mode> 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 London Today Output of Readlines after writing Tomorrow>
ステートメント付き
Python の with ステートメントは、コードをクリーンで読みやすくするために例外処理で使用されます。ファイル ストリームなどの共通リソースの管理が簡素化されます。上記の実装とは異なり、with ステートメントを使用する場合は file.close() を呼び出す必要はありません。 with ステートメント自体により、リソースの適切な取得と解放が保証されます。 構文:
with open filename as file:>
Python3
# Program to show various ways to> # write 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)> # 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>
注: with ステートメントの詳細については、ここをクリックしてください。
for ステートメントを使用して:
手順:
for ステートメントを使用して Python でファイルに書き込むには、次の手順に従います。
open() 関数を適切なモード (書き込みを表す「w」) で使用してファイルを開きます。
for ステートメントを使用して、ファイルに書き込むデータをループします。
ファイル オブジェクトの write() メソッドを使用して、データをファイルに書き込みます。
ファイル オブジェクトの close() メソッドを使用してファイルを閉じます。
この例では、with open(‘file.txt’, ‘w’) as f ステートメントを使用して、書き込み用にファイルが開かれます。書き込むデータはdataと呼ばれるリストに格納されます。 for ステートメントは、リスト内のデータの各行をループするために使用されます。 f.write(line + ‘ ’) ステートメントは、最後に改行文字 ( ) を付けてデータの各行をファイルに書き込みます。最後に、with ブロックが終了すると、ファイルは自動的に閉じられます。
Python3
文字を文字列Javaに変換
# Open the file for writing> with>open>(>'file.txt'>,>'w'>) as f:> ># Define the data to be written> >data>=> [>'This is the first line'>,>'This is the second line'>,>'This is the third line'>]> ># Use a for loop to write each line of data to the file> >for> line>in> data:> >f.write(line>+> '
'>)> ># Optionally, print the data as it is written to the file> >print>(line)> # The file is automatically closed when the 'with' block ends> |
>
>出力
This is the first line This is the second line This is the third line>
アプローチ:
このコードは、with ブロックを使用して file.txt というファイルを書き込みモードで開き、ブロックの終了時にファイルが適切に閉じられるようにします。ファイルに書き込まれる行を表すデータと呼ばれる文字列のリストを定義します。次に、コードは for ループを使用してデータ内の各文字列を反復処理し、write() メソッドを使用して各文字列をファイルに書き込みます。このコードは、各文字列がファイル内の新しい行に書き込まれるように、各文字列に改行文字を追加します。コードはオプションで、ファイルに書き込まれる各文字列を出力します。
時間計算量:
元のコードと代替コードの時間計算量は両方とも O(n) です。ここで、n はファイルに書き込まれる行数です。これは、両方のコードがデータ リストの各行を反復処理してファイルに書き込む必要があるためです。
空間の複雑さ:
元のコードと代替コードの空間複雑さは同じ O(n) です。ここで、n はファイルに書き込まれる行数です。これは、両方のコードで、ファイルに書き込まれる行を表す文字列のリストを作成する必要があるためです。