Python-data-persistence-file-api
Pythonデータの永続性-ファイルAPI
Pythonは組み込みの* input()および print()*関数を使用して、標準の入出力操作を実行します。 input()関数は、標準入力ストリームデバイスからバイトを読み取ります。 キーボード。
一方、* print()関数は、標準出力ストリームデバイスにデータを送信します。 ディスプレイモニター。 Pythonプログラムは、sysモジュールで定義された標準ストリームオブジェクト *stdin および stdout を介してこれらのIOデバイスと対話します。
- input()*関数は、実際にはsys.stdinオブジェクトのreadline()メソッドのラッパーです。 入力ストリームからのすべてのキーストロークは、Enterキーが押されるまで受信されます。
>>> import sys
>>> x=sys.stdin.readline()
Welcome to finddevguides
>>> x
'Welcome to finddevguides\n'
- readline()関数は、末尾の「\ n」文字を残すことに注意してください。 *Ctrl + D 文字で終了するまで標準入力ストリームからデータを読み取るread()メソッドもあります。
>>> x=sys.stdin.read()
Hello
Welcome to finddevguides
>>> x
'Hello\nWelcome to finddevguides\n'
同様に、* print()*はstdoutオブジェクトのwrite()メソッドをエミュレートする便利な関数です。
>>> x='Welcome to finddevguides\n'
>>> sys.stdout.write(x)
Welcome to finddevguides
26
stdinおよびstdoutの事前定義されたストリームオブジェクトと同様に、Pythonプログラムは、ディスクファイルまたはネットワークソケットからデータを読み取り、そこにデータを送信できます。 それらもストリームです。 read()メソッドを持つオブジェクトはすべて入力ストリームです。 write()メソッドを持つオブジェクトはすべて出力ストリームです。 ストリームとの通信は、open()関数が組み込まれたストリームオブジェクトへの参照を取得することで確立されます。
open()関数
この組み込み関数は次の引数を使用します-
f=open(name, mode, buffering)
nameパラメータは、ディスクファイルの名前またはバイト文字列です。modeは、実行する操作のタイプ(読み取り、書き込み、追加など)を指定するオプションの1文字の文字列であり、バッファリングパラメータは0、1、または-1のいずれかです。バッファリングはオフ、オン、またはシステムのデフォルトです。
ファイルを開くモードは、以下の表のように列挙されます。 デフォルトモードは「r」です。
Sr.No | Parameters & Description |
---|---|
1 |
R 読み取り用に開く(デフォルト) |
2 |
W 最初にファイルを切り詰めて書き込み用に開く |
3 |
X 新しいファイルを作成し、書き込み用に開きます |
4 |
A 書き込み用に開き、ファイルが存在する場合はファイルの最後に追加します |
5 |
B バイナリモード |
6 |
T テキストモード(デフォルト) |
7 |
+ 更新(読み取りと書き込み)のためにディスクファイルを開く |
データをファイルに保存するには、「w」モードで開く必要があります。
f=open('test.txt','w')
このファイルオブジェクトは出力ストリームとして機能し、write()メソッドにアクセスできます。 write()メソッドはこのオブジェクトに文字列を送信し、その下のファイルに保存されます。
string="Hello finddevguides\n"
f.write(string)
バッファに残っているデータが完全にストリームに転送されるように、ストリームを閉じることが重要です。
file.close()
任意のテストエディター(メモ帳など)を使用して「test.txt」を開き、ファイルが正常に作成されたことを確認します。
「test.txt」の内容をプログラムで読み取るには、「r」モードで開く必要があります。
f=open('test.txt','r')
このオブジェクトは入力ストリームとして動作します。 Pythonは* read()*メソッドを使用してストリームからデータをフェッチできます。
string=f.read()
print (string)
ファイルの内容がPythonコンソールに表示されます。 Fileオブジェクトは、EOF文字に遭遇するまで文字列を読み取ることができる* readline()*メソッドもサポートします。
ただし、同じファイルを「w」モードで開いて追加のテキストを保存すると、以前の内容は消去されます。 ファイルが書き込み権限で開かれると、そのファイルは新しいファイルであるかのように扱われます。 既存のファイルにデータを追加するには、追加モードに「a」を使用します。
f=open('test.txt','a')
f.write('Python Tutorials\n')
ファイルには、以前の文字列と新しく追加された文字列が含まれています。 ファイルオブジェクトは、リストオブジェクトの各文字列をファイルに書き込む* writelines()*メソッドもサポートしています。
f=open('test.txt','a')
lines=['Java Tutorials\n', 'DBMS tutorials\n', 'Mobile development tutorials\n']
f.writelines(lines)
f.close()
例
- readlines()*メソッドは、それぞれがファイル内の行を表す文字列のリストを返します。 ファイルの終わりに達するまで、ファイルを1行ずつ読み取ることもできます。
f=open('test.txt','r')
while True:
line=f.readline()
if line=='' : break
print (line, end='')
f.close()
出力
Hello finddevguides
Python Tutorials
Java Tutorials
DBMS tutorials
Mobile development tutorials
バイナリモード
デフォルトでは、ファイルオブジェクトの読み取り/書き込み操作は、テキスト文字列データに対して実行されます。 メディア(mp3)、実行可能ファイル(exe)、画像(jpg)など、他の種類のファイルを処理する場合は、読み取り/書き込みモードに「b」プレフィックスを追加する必要があります。
次のステートメントは、文字列をバイトに変換し、ファイルに書き込みます。
f=open('test.bin', 'wb')
data=b"Hello World"
f.write(data)
f.close()
テキスト文字列のバイトへの変換は、encode()関数を使用して行うこともできます。
data="Hello World".encode('utf-8')
バイナリファイルを読み取るには、 ‘rb’ モードを使用する必要があります。 read()メソッドの戻り値は、印刷前に最初にデコードされます。
f=open('test.bin', 'rb')
data=f.read()
print (data.decode(encoding='utf-8'))
整数データをバイナリファイルに書き込むには、整数オブジェクトを* to_bytes()*メソッドでバイトに変換する必要があります。
n=25
n.to_bytes(8,'big')
f=open('test.bin', 'wb')
data=n.to_bytes(8,'big')
f.write(data)
バイナリファイルから読み戻すには、read()関数の出力をfrom_bytes()関数で整数に変換します。
f=open('test.bin', 'rb')
data=f.read()
n=int.from_bytes(data, 'big')
print (n)
浮動小数点データの場合、Pythonの標準ライブラリの struct モジュールを使用する必要があります。
import struct
x=23.50
data=struct.pack('f',x)
f=open('test.bin', 'wb')
f.write(data)
read()関数から文字列をアンパックして、バイナリファイルからfloatデータを取得します。
f=open('test.bin', 'rb')
data=f.read()
x=struct.unpack('f', data)
print (x)
同時読み取り/書き込み
ファイルを(「w」または「a」を使用して)書き込み用に開いた場合、そのファイルから読み取ることはできず、その逆も同様です。 これを行うと、UnSupportedOperationエラーがスローされます。 他の操作を行う前にファイルを閉じる必要があります。
両方の操作を同時に実行するには、modeパラメータに「+」文字を追加する必要があります。 したがって、「w +」または「r +」モードでは、ファイルを閉じずにwrite()およびread()メソッドを使用できます。 Fileオブジェクトは、ストリームを任意のバイト位置に巻き戻すseek()関数もサポートしています。
f=open('test.txt','w+')
f.write('Hello world')
f.seek(0,0)
data=f.read()
print (data)
f.close()
次の表は、オブジェクトのようなファイルで使用できるすべてのメソッドをまとめたものです。
Sr.No | Method & Description |
---|---|
1 |
close() ファイルを閉じます。 閉じられたファイルは、これ以上読み取りまたは書き込みできません。 |
2 |
flush() 内部バッファをフラッシュします。 |
3 |
fileno() 整数のファイル記述子を返します。 |
4 |
next() 呼び出されるたびにファイルから次の行を返します。 Python 3でnext()イテレータを使用します。 |
5 |
read([size]) ファイルから最大でsizeバイトを読み取ります(sizeバイトを取得する前に読み取りがEOFに達した場合は少なくなります)。 |
6 |
readline([size]) ファイルから1行全体を読み取ります。 末尾の改行文字は文字列に保持されます。 |
7 |
readlines([sizehint]) readline()を使用してEOFまで読み取り、行を含むリストを返します。 |
8 |
seek(offset[, whence]) ファイルの現在位置を設定します。 0-開始1-現在2-終了。 |
9 |
seek(offset[, whence]) ファイルの現在位置を設定します。 0-開始1-現在2-終了。 |
10 |
tell() ファイルの現在位置を返します |
11 |
truncate([size]) ファイルのサイズを切り捨てます。 |
12 |
write(str) ファイルに文字列を書き込みます。 戻り値はありません。 |