python-ファイルとストリーム

11940 ワード

1.ファイルを開く方法
Open関数はファイルを開くために使用されます.構文は次のとおりです.
  open (name[,mode[,buffering]])
  open('test.txt'.r)
Open関数は、一意の強制パラメータとしてファイル名を使用し、ファイルオブジェクトを返します.モードパラメータとバッファパラメータはオプションです.
Open関数のモードとバッファ関数について説明します
1.1ファイルモード
 
'r':読み取りモード
'w':書き込みモード
'a':追加モード
'b':バイナリモード
'+':読み取り/書き込みモード
 
「b」モードは、ファイルの処理方法を変更する.音声クリップや画像などの他のタイプのファイル(バイナリファイル)を処理するために使用される場合、モードパラメータに「b」を追加する必要があります.パラメータ「rb」は、バイナリファイルを読み込むために使用できます.
1.2緩衝
Open関数の3番目のパラメータ(オプション)は、ファイルのバッファを制御します.パラメータが0(またはFalse)の場合、I/O(入出力ストリーム)はバッファリングされません(すべての読み書き操作はハードディスクの場合).1(またはtrue)の場合、
I/Oはバッファリングされています(pythonはハードディスクの代わりにメモリを使用し、プログラムをより速くし、flushまたはcloseを使用するだけでハードディスク上のデータを更新することができます).1より大きい数値は、バッファのサイズ(単位バイト)を表します.-1
(または負の数)は、デフォルトのバッファサイズを使用することを意味します.
2.基本的なファイル方法
ファイルを開く方法はすでに紹介されていますが、次は彼らで役に立つことをします.次に、ファイルオブジェクト(ストリームと呼ばれる場合もあるクラスファイルオブジェクト)の基本的な方法について説明します.
2.1読み取りと書き込み
ファイル(またはストリーム)の最も重要な能力は、データを提供または受信することです.fという名前のクラスファイルオブジェクトがある場合は、f.writeメソッドとf.readメソッド(文字列形式)を使用してデータを書き込み、読み出すことができます.
f.write(string)が呼び出されるたびに、提供されるパラメータstringはファイルの既存の部分の後ろに追加されます.
f = open("somefile.txt", "w")
f.write('Hello, ')
f.write('Python!')
f.close()

--------
  :
Hello,Python!

ファイルを読むのは簡単です.ストリームに何文字(バイト)を読むかを教えるだけでいいです.
次のようになります.
 1 f = open("somefile.txt", "r")
 2 print(f.read(4))
 3 print(f.read())
 4 f.close()
 6 ------------
 7  8 D:\Python27\python.exe D:/pythonwork/test01/file_1.py
 9 hell
10 o, python!

注意:openを呼び出すときは、「r」がデフォルトであるため、モードの説明を省略できます.
**ランダムアクセス
以上の例では,ファイルをストリームとして操作し,すなわちデータを最初から最後までの順序でしか読めない.実際にファイル内で読み取りファイルの場所を勝手に移動することも可能であり、クラスファイルオブジェクトのメソッドseekとtellを使用して興味のある部分に直接アクセスすることができます(このメソッドはランダムアクセスと呼ばれます).
seek(offset[,whence]):この方法は、現在の位置(読み取りと書き込みを行う位置)をoffestとwhenceで定義された位置に移動します.offsetクラスは、オフセット量を表すバイト(文字)数です.whenceのデフォルトは0で、オフセット量がファイルの先頭から計算されることを示します(オフセット量は非負でなければなりません).whenceは、1(現在の位置に対する移動、オフセットoffsetが負であってもよい)または2(ファイルの末尾に対する移動)に設定される場合があります.
例は次のとおりです.
f = open("somefile.txt", "w")
f.write('0123456789')
f.seek(5)
f.write("hello, python!")
f.close()
f = open("somefile.txt", "r")
print(f.read())

------------------------
  :
D:\Python27\python.exe D:/pythonwork/test01/file_1.py
01234hello, python!

tellメソッドは、現在のファイルの場所を次のように返します.
f = open("somefile.txt", "r")
print(f.read(3))
print(f.read(2))
print(f.tell())

---------
  :
D:\Python27\python.exe D:/pythonwork/test01/file_1.py
012
34
5

注意:f.tellメソッドが返す数値は、この場合、長い整数です.しかし、すべての状況がそうではない.
2.2読み書き行
ファイルeを使用できます.readlineは、個別のローを読み込みます.readlineメソッドは、1つのファイル内のすべてのローを読み出し、リストとして返すことができます.
writelineメソッドはreadlineメソッドとは逆です.文字列のリスト(実際には任意のシーケンスまたは反復可能なオブジェクトでもよい)に渡され、すべての文字列がファイル(またはストリーム)に書き込まれます.プログラムは新しいローを追加しないので、自分で追加する必要があります.
注意:改行文字として他の記号を使用するプラットフォームでは、r(Mac)とr(Windows)で置き換えます.
2.3ファイルを閉じる
closeメソッドを使用してファイルを閉じることを忘れないでください.
実際には、このような状況のために設計された文、すなわちwith文があります.
  with open("somefile.txt") as somefile:
    do_something(somefile)
with文は、ファイルを開き、変数に値を割り当てることができます.その後、文抽出のファイルにデータを書き込むことができます(または、他の操作を実行します).例外による終了であっても、文が終了すると自動的にファイルが閉じられます.
***コンテキストマネージャ
with文は実際には一般的な構造であり、いわゆるコンテキストマネージャ(context manager)を使用することができます.コンテキストマネージャはサポートされています.enter_および_exit_この2つのメソッドのオブジェクト.
  _enter_メソッドはパラメータを持たず、with文ブロックに入ると呼び出され、戻り値はasキーの後の変数にバインドされます.
2.4基本ファイルの使用方法
 1 import pprint
 2 
 3 
 4 with open("somefile.txt") as somefile:
 5      s1 = somefile.read(7)
 6      print(s1)
 7      s2 = somefile.read(4)
 8      print(s2)
 9 
10 
11 with open("somefile.txt") as somefile:
12      s3 = somefile.read()
13      print(s3)
14 
15 
16 with open("somefile.txt") as somefile:
17      for i in range(3):                     #     
18          print('%s: %s'%(str(i), somefile.readline().strip()))
19 
20 
21 print(pprint.pprint(open("somefile.txt").readlines()))
22 
23 
24 #    
25 with open("somefile.txt", "w") as somefile:
26      somefile.write("this
is no
haiku
")


D:\Python27\python.exe D:/pythonwork/test01/flie_2.py
this
is
 no

this
is no
haiku
0: this
1: is no
2: haiku
['this
', 'is no
', 'haiku']
None

テキストファイルのケースの変更
1 with open("somefile.txt", "r+") as somefile:
2      lines = somefile.readlines()
3      lines[1] = "isn't b
" 4 somefile.writelines(lines)

3.ファイルの内容を反復する
3.1バイト単位で処理
最も一般的なファイルコンテンツを反復する方法はwhileループでreadメソッドを使用することです.次の例を示します.
 1 #         
 2 def process(string):
 3     print("Processing: ", string)
 4 
 5 
 6 with open("somefile.txt", "r") as somefile:
 7     char = somefile.read(1)
 8     while char:
 9         process(char)
10         char = somefile.read(1)

付与文char=f.read(1)は繰り返し使用され,コードの繰り返しは通常悪いことと考えられる.このような状況を回避するために、while true/break文を使用します.
1 with open("somefile.txt", "r") as somefile:
2     while True:
3         char = somefile.read(1)
4         if not char:
5             break
6         process(char)

3.2行による操作
whileでreadlineを使用する
1 with open("somefile.txt", "r") as somefile:
2     while True:
3         line = somefile.readline().strip()
4         if not line:
5             break
6         process(line)

readlinesで行を反復
1 with open("somefile.txt", "r") as somefile:
2     for line in somefile.readlines():
3         process(line.strip())

3.3 fileinputを使用して怠惰な行反復を実現する
1 for line in fileinput.input("somefile.txt"):
2     process(line)

3.4ファイル反復器
変数を使用せずにファイルオブジェクトを保存するには、ファイルを反復します.
1 for line in open("somefile.txt"):
2     process(line)

ファイル反復器では、通常の反復器と同じ操作を実行できます.次のようになります.
 1 with open("somefile2.txt", 'r+') as somefile:
 2     somefile.write('First line
') 3 somefile.write('Second line
') 4 somefile.write('Third line
') 5 lines = somefile 6 print(lines) 7 8 # list 9 lines = list(open("somefile2.txt")) 10 print(lines) 11 12 first, second, third = open("somefile2.txt") 13 print(first) 14 print(second) 15 print(third)


D:\Python27\python.exe D:/pythonwork/test01/flie_2.py
['First line
', 'Second line
', 'Third line
']
First line

Second line

Third line

この例では、次の点に注意することが重要です.
  • printを使用してファイルにコンテンツを書き込むと、提供された文字列の後に新しい行が追加されます.
  • 開いているファイルのパケット解除操作にシーケンスを使用して、各行を個別の変数に挿入します(これは、ファイルに何行あるかは一般的にはわかりませんが、ファイルオブジェクトの「反復性」を示しています)
  • ファイルを書いた後にファイルを閉じるのは、データがハードディスクに更新されることを確保するためです.with open(filename)as filename:
  • を使用することを推奨します.