Pythonデータの永続性-ファイルAPI

Pythonは組み込みを使用します input() そして print()標準の入出力操作を実行する関数。input()関数は、標準入力ストリームデバイス(キーボード)からバイトを読み取ります。

ザ・ print()一方、関数は、データを標準出力ストリームデバイス、つまりディスプレイモニターに送信します。Pythonプログラムは、標準ストリームオブジェクトを介してこれらのIOデバイスと対話しますstdin そして stdout sysモジュールで定義されています。

ザ・ input()関数は実際にはsys.stdinオブジェクトのreadline()メソッドのラッパーです。入力ストリームからのすべてのキーストロークは、「Enter」キーが押されるまで受信されます。

>>> import sys
>>> x=sys.stdin.readline()
Welcome to TutorialsPoint
>>> x
'Welcome to TutorialsPoint\n'

ご了承ください、 readline()関数は末尾に「\ n」文字を残します。標準入力ストリームからデータを読み取るread()メソッドもあります。Ctrl+D キャラクター。

>>> x=sys.stdin.read()
Hello
Welcome to TutorialsPoint
>>> x
'Hello\nWelcome to TutorialsPoint\n'

同様に、 print() stdoutオブジェクトのwrite()メソッドをエミュレートする便利な関数です。

>>> x='Welcome to TutorialsPoint\n'
>>> sys.stdout.write(x)
Welcome to TutorialsPoint
26

stdinおよびstdoutの事前定義されたストリームオブジェクトと同様に、Pythonプログラムは、ディスクファイルまたはネットワークソケットからデータを読み取り、データを送信できます。それらはストリームでもあります。read()メソッドを持つオブジェクトはすべて入力ストリームです。write()メソッドを持つオブジェクトはすべて出力ストリームです。ストリームとの通信は、組み込みのopen()関数を使用してストリームオブジェクトへの参照を取得することによって確立されます。

open()関数

この組み込み関数は次の引数を使用します-

f=open(name, mode, buffering)

nameパラメータは、ディスクファイルまたはバイト文字列の名前です。modeは、実行する操作のタイプ(読み取り、書き込み、追加など)を指定するオプションの1文字の文字列であり、バッファリングパラメータは0、1、または-1のいずれかです。バッファリングはオフ、オン、またはシステムのデフォルトです。

ファイルを開くモードは、以下の表のように列挙されています。デフォルトモードは「r」です

シニア番号 パラメータと説明
1

R

閲覧用に開く(デフォルト)

2

W

書き込み用に開き、最初にファイルを切り捨てます

3

X

新しいファイルを作成し、書き込み用に開きます

4

A

書き込み用に開き、ファイルが存在する場合はファイルの末尾に追加します

5

B

バイナリモード

6

T

テキストモード(デフォルト)

7

+

更新(読み取りと書き込み)のためにディスクファイルを開きます

データをファイルに保存するには、「w」モードで開く必要があります。

f=open('test.txt','w')

このファイルオブジェクトは出力ストリームとして機能し、write()メソッドにアクセスできます。write()メソッドはこのオブジェクトに文字列を送信し、その基になるファイルに格納されます。

string="Hello TutorialsPoint\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オブジェクトは、readline() EOF文字に遭遇するまで文字列を読み取ることができるメソッド。

ただし、同じファイルを「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 TutorialsPoint
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)

浮動小数点データの場合、使用する必要があります struct Pythonの標準ライブラリからのモジュール。

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

次の表は、オブジェクトのようなファイルで使用できるすべてのメソッドをまとめたものです。

シニア番号 方法と説明
1

close()

ファイルを閉じます。閉じたファイルは、これ以上読み取りまたは書き込みできません。

2

flush()

内部バッファをフラッシュします。

3

fileno()

整数ファイル記述子を返します。

4

next()

呼び出されるたびに、ファイルから次の行を返します。Python 3でnext()イテレータを使用します。

5

read([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)

ファイルに文字列を書き込みます。戻り値はありません。