Python codecs.open()とファイル操作



Python Codecs Open



記事の出典: https://blog.csdn.net/gufenchen/article/details/90553259

ファイルの読み取り:



codecs.open(filepath、method、encoding)

ファイルパス-ファイルパス



メソッド-オープンモード、rは読み取り、wは書き込み、rwは読み取りと書き込み

エンコーディング-ファイルのエンコーディング、utf-8を使用した中国語ファイル

A.Pythonのオープンファイルコードは次のとおりです。



f = open( 'd: test.txt'、 'w')
説明:
最初のパラメータは、パスを含むファイル名です
2番目のパラメータはオープンモードモードです

'r':読み取り専用(デフォルト。ファイルが存在しない場合はエラーをスローします)
'w':書き込みのみ(ファイルが存在しない場合は自動的にファイルを作成します)
'a':ファイルの最後に追加します
'r +':読み取りと書き込み

バイナリモードでファイルを開く必要がある場合は、モードの後に​​「rb」「wb」などの文字「b」を追加する必要があります。

次に、Pythonはファイルの内容を読み取りますf.read(サイズ)

sizeパラメーターは読み取りの数を示し、省略できます。 sizeパラメータを省略した場合は、ファイルのすべての内容が読み取られることを意味します。

F.readline()は、ファイルの行の内容を読み取ります。f.readlines()は、すべての行を配列[line1、line2、... lineN]に読み取ります。

この方法は、メモリへのすべてのファイルコンテンツの効率の向上を回避するためによく使用されます。

第三に、python書き込みファイルf.write(文字列)

ファイルに文字列を書き込みます。書き込みが終了した場合は、文字列に「 n」を追加してから、f.close()を追加してファイルを閉じる必要があります。

第四に、ファイル内のコンテンツの配置

f.read()が読み取られた後、ファイルポインタはファイルの終わりに到達します。 f.read()が再度見つかると、コンテンツが空であることがわかります。コンテンツ全体をもう一度読みたい場合は、ポジショニングポインタをファイルに移動する必要があります。 :

f.seek(0)
この関数の形式は次のとおりです(単位はバイト)。f.seek(offset、from_what)from_whatは読み取りを開始する位置を示し、offsetはf .seek(10、 3)は、3番目の文字が配置されてから10文字戻ることを意味します。

from_whatの値0はファイルの先頭を示しますが、省略してもかまいません。デフォルトは0です。ファイルの先頭です。完全な例を以下に示します。

f = open('/tmp/workfile', 'r+') f.write('0123456789abcdef') f.seek(5) # Go to the 6th byte in the file f.read(1) f.seek (-3, 2) # Go to the 3rd byte before the end f.read(1)


V.ファイルを閉じてリソースファイル操作を解放します。必ずファイルf.close()を閉じてください。他のプログラムが作成できるように、リソースを解放できます。

ASCIIまたはgbkエンコーディング形式のファイルの読み取りと書き込み、比較的単純な、次のように読み取りと書き込みを行います。

# coding=gbk f = open('c:/intimate.txt','r') # r indicates file open mode, ie read only s1 = f.read() s2 = f.readline() S3 = f.readlines() #read all content f.close() f = open('c:/intimate.txt','w') # w Write the file 11 f.write(s1) 12 f.writelines(s2) # no writeline 13 f.close()


VI。 f.writelinesは改行を出力しません。

Pythonユニコードファイルの読み取りと書き込み:

# coding=gbk import codecs f = codecs.open('c:/intimate.txt','a','utf-8') F.write(u'Chinese') s = 'Chinese' f.write(s.decode('gbk')) f.close() f = codecs.open('c:/intimate.txt','r','utf-8') s = f.readlines() f.close() for line in s: print line.encode('gbk') Python code file encoding

pyファイルのデフォルトはASCIIエンコーディングです。中国語は、表示時にASCIIからシステムのデフォルトのエンコーディング変換を実行し、エラーが発生します。SyntaxError:非ASCII文字。コードファイルの1行目または2行目にエンコーディングディレクティブを追加する必要があります。

#coding = utf-8 ## UTF-8エンコーディングでの漢字の保存
print'Chinese '上記のように直接入力された文字列は、コードファイルのエンコーディングに従って処理されます。 Unicodeエンコーディングを使用する場合、2つの方法があります。
s1 = u '' #uは、情報をUnicodeエンコーディングで格納することを示します
s2 = unicode( 'Chinese'、 'gbk')
unicodeは組み込み関数であり、2番目のパラメーターはソース文字列のエンコード形式を示します。

デコードは、任意の文字列が持つメソッドであり、文字列をUnicode形式に変換し、パラメータはソース文字列のエンコード形式を示します。

Encodeは、任意の文字列が持つメソッドでもあり、文字列を引数で指定された形式に変換します。

Python文字列エンコーディング

u '漢字はUnicodeタイプで構成されています。そうでない場合、構成はstr型です。

strのエンコーディングは、システム環境に関連しています。システム環境は、通常、sys.getfilesystemencoding()によって取得される値です。

したがって、UnicodeからStrまで、encodeメソッドを使用する必要があります

strからunicodeまで、decodeを使用します

例えば:

# coding=utf-8 #Default encoding format is utf-8 s = u'Chinese' #unicode encoded text Print s.encode('utf-8') #convert to utf-8 format output Print s #effect is the same as above, it seems to convert directly to the specified encoding by default


私の要約:

u=u'unicode encoded text' g=u.encode('gbk') #convert to gbk format Print g #This is garbled, because the current environment is utf-8, gbk encoded text is garbled Str=g.decode('gbk').encode('utf-8') #read g in gbk encoding format (because it is gbk encoded) and convert to utf-8 format output Print str #normal display Chinese


安全な方法:

S.decode('gbk','ignore').encode('utf-8') #Read in gbk code (of course, read the text in gbk encoding format) And ignore the wrong encoding, convert to utf-8 encoding output


デコードの関数プロトタイプはdecode([encoding]、[errors = 'strict'])であるため、2番目のパラメーターを使用してエラー処理戦略を制御できます。デフォルトのパラメータはstrictです。これは、不正な文字が検出された場合に例外をスローすることを意味します。

無視するように設定すると、不正な文字は無視されます
置換するように設定されている場合、不正な文字は?に置き換えられます。
xmlcharrefreplaceに設定すると、XMLへの文字参照が使用されます。