Pythonのファイル操作


open を使用してファイルを開いた後は、ファイル オブジェクトの close() メソッドを忘れずに呼び出す必要があります。たとえば、try/finally ステートメントを使用すると、ファイルを最終的に閉じることができるようになります。

file_object = open('thefile.txt')
try:
     all_the_text = file_object.read( )
finally:
     file_object.close( )

注: ファイルを開くときに例外が発生すると、ファイル オブジェクト file_object は close() メソッドを実行できないため、open ステートメントを try ブロックに配置することはできません。


#(ここ) をクリックして折りたたむか開きます

#coding:utf-8
#!/usr/bin/python
# Filename: fileRW.py
import os

context=""" hello world,hello
"r" 以读方式打开,只能读文件 , 如果文件不存在,会发生异常 
"w" 以写方式打开,只能写文件, 如果文件不存在,创建该文件
                                                     如果文件已存在,先清空,再打开文件"""
def createfileBYwrite(filename):
    f = open(filename,'w') #打开文件open()是file()的别名
    f.write(context) #把字符串写入文件
    f.close() #关闭文件

#注意,调用writelines写入多行在性能上会比使用write一次性写入要高。
def createfileBYwritelines(filename):
    f = open(filename,'w') #打开文件open()是file()的别名
    try:
        f.writelines(context) #把字符串写入文件
    finally: 
        f.close() #关闭文件

def readBYreadline(filename):
    f = open(filename)
    while True:
        line =f.readline()#当文件指针移动到末尾继续readline会出现错误,所以后面要加判断
        if line:
            print line,
        else:
            break
    f.close()

#需要通过循环访问readlines()返回列表中的元素
def readBYreadlines(filename):
    f = open(filename)
    try:
        lines = f.readlines()
        for line in lines:
            print line,
    finally:
        f.close()
    
#从文件中读取所有内容,赋予一个字符串变量
def readBYread(filename):
    f = open(filename)
    try:
        content = f.read()
    finally:
        f.close()
    print content 
    
if __name__== "__main__":
    filename="hello.txt"
    createfileBYwritelines(filename)
    readBYread(filename)
    #把文件删除掉
    if os.path.exists(filename):
        print "文件存在%s" %filename
        os.remove(filename)
    
    
 hello world,hello
"r" 以读方式打开,只能读文件 , 如果文件不存在,会发生异常 
"w" 以写方式打开,只能写文件, 如果文件不存在,创建该文件
                                                     如果文件已存在,先清空,再打开文件
文件存在hello.txt


2. ファイルの読み取り

テキスト ファイルの読み取り

input = open('data', 'r')
#第二个参数默认为r
input = open('data')

バイナリ ファイルの読み取り

input = open('data', 'rb')

すべての内容を読む

file_object = open('thefile.txt')
try:
     all_the_text = file_object.read( )
finally:
     file_object.close( )

固定バイトを読む

file_object = open('abinfile', 'rb')
try:
    while True:
         chunk = file_object.read(100)
        if not chunk:
            break
         do_something_with(chunk)
finally:
     file_object.close( )

各行を読む

list_of_all_the_lines = file_object.readlines( )
#ファイルがテキスト ファイルの場合は、ファイル オブジェクトを直接走査して各行を取得することもできます。


for line in file_object:
     process line

3. ファイルの書き込み

テキスト ファイルの書き込み

output = open('data', 'w')

バイナリ ファイルの書き込み

output = open('data', 'wb')

書き込みファイルを追加

output = open('data', 'w+')

データの書き込み

file_object = open('thefile.txt', 'w')
file_object.write(all_the_text)
file_object.close( )

複数行の書き込み

file_object.writelines(list_of_text_strings)

writelines を呼び出して複数行を書き込む方が、write を使用して書き込むよりもパフォーマンスが優れていることに注意してください。ワンハイになりましょう。


ログ ファイルを処理するとき、ログ ファイルが巨大で、一度にファイル全体をメモリに読み込んで処理することができないという状況に遭遇することがあります。 2 GB の物理メモリを搭載したコンピュータ。マシン上で 2 GB のログ ファイルを処理する場合、一度に処理できる内容は 200 MB だけにする必要があるかもしれません。

Python では、組み込みの File オブジェクトは、このようなことを実現するための readlines(sizehint) 関数を直接提供します。次のコードを例として挙げます:


file = open('test.log', 'r') sizehint = 209715200   # 200M position = 0 lines = file.readlines(sizehint) while not file.tell() - position < 0:        position = file.tell()        lines = file.readlines(sizehint)


readlines(sizehint) 関数が呼び出されるたびに、約 200MB のデータが返され、返されるデータは完全な行データである必要があります。ほとんどの場合、返されるデータのバイト数はわずかに異なります。 sizehint より小さい 指定された値が大きいです (readlines(sizehint) 関数が最後に呼び出された場合を除く)。通常、Python はユーザー指定の sizehint 値を内部キャッシュ サイズの整数倍に自動的に調整します。


1. Python を使用して新しいファイルを作成します。内容は 0 ~ 9 の整数です。各数値は 1 行を占めます:

#python
>>>f=open('f.txt','w')    # r只读,w可写,a追加
>>>for i in range(0,10):f.write(str(i)+'\n')
.  .  .
>>> f.close()


2. ファイルの内容を追加、0 ~ 9 のランダムな整数 10 個:
#python
>>>import random
>>>f=open('f.txt','a')
>>>for i in range(0,10):f.write(str(random.randint(0,9)))
.  .  .
>>>f.write('\n')
>>>f.close()


3. ファイルの内容を追加、0 ~ 9 のランダムな整数、1 行あたり 10 個の数字、合計 10 行:
#python
>>> import random
>>> f=open('f.txt','a')
>>> for i in range(0,10):
.  .  .     for i in range(0,10):f.write(str(random.randint(0,9))) 
.  .  .     f.write('\n')    
.  .  .
>>> f.close()


4. 標準出力をファイルに送信します:
#python
>>> import sys
>>> sys.stdout = open("stdout.txt", "w")
>>>  . . .


5. ファイルの読み取りと書き込み

1. ファイルを開く:

f = file(name[,mode[,buffering]])

エントリパラメータ: name ファイル名

モードオプション、文字列

バッファリング バッファリングするかどうか (0=バッファリングなし、1=バッファリング、>1 int 数値 = バッファサイズ)

戻り値: ファイルオブジェクト

mode オプション:

"r" 読み取りモードで開き、ファイルのみを読み取ることができます。ファイルが存在しない場合、例外が発生します。

"w" 書き込みモードで開くと、ファイルへの書き込みのみが可能です。ファイルが存在しない場合は、ファイルを作成します。ファイルが既に存在する場合は、最初にファイルをクリアしてから、ファイルを開きます。

" rb" バイナリ読み取りモードでオープンします。ファイルは読み取りのみ可能です。ファイルが存在しない場合は例外が発生します。

"wb" はバイナリ書き込みモードでオープンします。ファイルは書き込みのみ可能です。ファイルが存在しない場合は、ファイルを作成します。

ファイルがすでに存在する場合は、ファイルが作成されます。存在する場合は、最初にクリアしてからファイルを開きます

"rt" Openテキスト読み取りモードでは、ファイルの読み取りのみが可能です。ファイルが存在しない場合は、例外が発生します。

"wt" テキスト書き込みモードで開き、ファイルが存在しない場合は、ファイルの書き込みのみが可能です。ファイルを作成します

ファイルが存在する場合は、まずファイルをクリアしてからファイルを開きます

# "RB" を使用してバイナリ読み取りで開きます。ファイルの読み取りと書き込みが可能です。 wb " バイナリ書き込みモードで開きますファイルが存在しない場合は、ファイルを作成します。

# ファイルを閉じます

#f.close()

ファイルの読み取りと書き込みが完了したら、ファイルを閉じる必要があります。

3. ファイルの内容をクリアします

f.truncate()

注: "r " で始まる場合のみ"rb " "w" "wb" "wb "書き込み可能モードで開かれたファイルのみがこの機能を実行できます。

4. ファイル ポインタの位置とクエリ

(1) ファイル ポインタ:

ファイルを開いた後、そのオブジェクトは f に保存されます。読み取りおよび書き込み操作を実行するために、ファイルの現在位置を記憶します。この位置は、ファイル ポインター (ファイルの先頭から計算される Long 型のバイト数) と呼ばれます。

(2) ファイルを開いたときの位置:

「r」「r」「rb」読み取りモード、「w」「w」「wb」書き込みモードで開いたファイル、

最初、ファイル ポインタはファイルの先頭を指します。

(3) ファイル ポインタの値を取得します:

L = f.tell()

(4) ファイル ポインタを移動します

f.seek( offset, option)

option=0の場合、ファイルポインタがファイル先頭から「オフセット」バイトを指すことを意味します。

オプション =1 の場合、ファイル ポインタがファイルの現在位置を指し、「オフセット」バイトだけ後方に移動することを意味します。

オプション =2 の場合、ファイル ポインタがファイルの末尾を指し、「オフセット」バイトを前方に移動することを意味します。

5. ファイルからのコンテンツの読み取り

1 テキスト ファイル (「rt」モードで開かれたファイル) の読み取り

s = f.readline( )

戻り値: s は文字列で、ファイルから読み取られた行 (行終端文字を含む) です。

説明: (1) len( s ) =0 の場合、ファイルの終わりに達したことを意味します。

(2) ファイルの最後の行の場合は、行末記号は使用しないでください

2 バイナリ ファイルの読み取り (「rb」、「rb」、「wb」モードで開かれたファイル)

s = f .read( n )

写真、ビデオ、およびその他のファイルの場合、読み取りおよび書き込みには b モードを使用する必要があります

注: (1) len( s ) =0 の場合、ファイルの終わりに到達したことを意味します。

2) ファイルが読み取られた後、ファイル ポインタは len(s) バイトだけ後方に移動します。

(3) トラックが損傷している場合、例外が発生します。

6. ファイルに文字列を書き込みます

f.write( s )

パラメータ: 書き込まれる s入力文字列

説明: (1) ファイルの書き込み後、ファイル ポインタは len(s) バイトだけ後方に移動します。

(2) トラックが破損している場合、またはディスクがいっぱいの場合、例外が発生します。

戻り値: s は文字列で、ファイルから読み取られた内容です

7. ファイルを削除します

import os

os.remove(ファイル)