Python:ファイル読み書き及び中国語エンコード処理

4526 ワード

原文の住所:http://hi.baidu.com/mdj_hu/item/4 d 7 d 08003 d 38 e 62 e 1 fe 2400 de 4です.
pythonにおけるファイルの読み書きと中国語の符号化処理方法
一、ファイルコードを開くと次のようになります.>>f=open(d:\test.txt)は、「w」と説明します.一番目のパラメータはファイル名で、パスを含みます.二つ目のパラメータは開いているモードmode'r':読み取り専用(デフォルト.ファイルが存在しない場合はエラーを投げます)'w':書き込みだけ(ファイルが存在しない場合は自動的にファイルを作成します)'a':ファイルの末尾'r+':読み書きはバイナリでファイルを開く必要がある場合は、modeの後ろに文字"b"を追加します. 
二、読取内容f.read(size)パラメータsizeは、読み取りの数を示しており、省略することができる.sizeパラメータを省略すると、ファイルを読み込むすべての内容を表します.f.readline()ファイルの一行の内容f.readline()を読み取って、すべての行を配列の中に読みます.すべてのファイルの内容をメモリにロードしないようにするために、この方法はしばしば使用され、効率を向上させます. 
三、ファイルf.writeに書き込み、文字列をファイルに書き込みます.書き込みが終了したら、文字列の後に「」を追加して、ファイルをクローズします. 
四、ファイル中のコンテンツポジショニングf.read()を読み込んだ後、ファイルポインタがファイルの最後に到達し、もう一度f.read()を実行すると、読み取った内容が空であることが分かります.もう一度すべての内容を読み込むには、位置決めポインタをファイルの先頭に移動しなければなりません.
f.seek(0)この関数のフォーマットは以下の通りです.whatは読み取りを開始する位置を表し、offsetはfrom_を表します.whatは、f.seek(10,3)というように、一定量の距離を移動して、3番目の文字に位置し、10文字を後に移動します.fromwhat値が0の時はファイルの開始を表します.省略してもいいです.デフォルトは0です.つまりファイルの先頭です.以下に完全な例を示します.>>f=open('/tmp/workfile','r+')
>>f.write('012345789 abcdef')
>>f.seek(5)     # Go to the 6 th byte in the file
>>f.read(1)        
'5
>>>f.seek(-3,2)ハGo to the 3 rd byte before the end
>>f.read(1)
'd 
五、ファイルを閉じてリソースファイルを解放しました.操作が終わりました.必ずファイルを閉じることを覚えてください.
************************************************
ファイルの読み書き
ASCIIまたはgbkコード形式のファイルだけを読み書きするのは簡単です.次のように読みます.
1ハcoding=gbk

3 f=open('c:/intimate.txt'、'r')菗はファイルのオープンモードを示しています.つまり読み取り専用です.
4 s 1=f.read()
5 s 2=f.readline()
6 s 3=f.readlines()葃読所有内容

8 f.close()

10 f=open('c:/intimate.txt'、'w')菗wは書類を書きます.
11 f.write(s 1)
12 f.writelines(s 2)菗有writeline
13 f.close()
f.writelinesは改行符を出力しません.
unicodeファイルの読み書き:
1ハcoding=gbk
2 import codecs

4 f=codecs.open('c:/intimate.txt','a','utf-8')
5 f.write(u'中国語')
6 s='中国語'
7 f.write(s.decode('gbk')
8 f.close()

10 f=codecs.open('c:/intimate.txt',r','utf-8')
11 s=f.readlines()
12 f.close()
13 for line in s:
14    print line.encode('gbk')
1 pythonコードファイルのコード化
pyファイルはデフォルトはASCIIコードで、中国語は表示時にASCIIからシステム標準コードへの変換を行います.この時にエラーが発生します.SyntaxError:Non-ASCII character.コードファイルの1行目または2行目にコード表示を追加する必要があります.
1𔽣coding=utf-8苏33487;はutf-8で符号化して中国語の文字を保存します.
2 print'中文'は上のように直接入力された文字列はコードファイルの符号化によって処理されます.unicodeで符号化するなら、次の3つの方法があります.
1 s 1=u'中文'铅uはunicodeコードで情報を保存することを表します.
2 s 2=unicode('中国語'、'gbk')
unicodeは内蔵関数で、2番目のパラメータはソース文字列の符号化フォーマットを示します.
decodeは任意の文字列が持つ方法で、文字列をunicode形式に変換し、パラメータはソース文字列の符号化フォーマットを示します.
encodeも任意の文字列が持つ方法であり、文字列をパラメータ指定の書式に変換します.
2文字列のコード
u'漢字'で作られたのはunicodeタイプで、使わないと構造がstrタイプです. 
strのコードはシステム環境に関するもので、一般的にはsys.get filesystemencoding()の値です. 
だからunicodeからstrに変えて、encodeの方法を使います. 
strからunicodeに変わるので、decodeを使います.
たとえば:
1𔽣coding=utf-8   #デフォルトの符号化フォーマットはutf-8です.

3 s=u'中文'落unicodeコードの文字
4 print s.encode('utf-8')   #utf-8形式に変換して出力します. 
5 print s〓〓の効果は上と同じで、デフォルトで直接指定のコードに変換するようです.
私のまとめ:
u=u'unicodeコード文字'
g=u.encode('gbk')菗はgbkフォーマットに変換します.
print g〓〓この時は文字化けです.現在の環境はutf-8です.gbk符号化文字は文字化けです.
str=g.decode('gbk').encode('utf-8')   #gbk符号化形式でg(彼がgbk符号化されているので)を読み、utf-8形式に変換して出力します.
print str〓〓〓は正常に中国語を表示します.
安全な方法:
s.decode('gbk','ignore').encode('utf-8')\20751;儒はgbkで符号化して読み(もちろんgbk符号化フォーマットの文字を読みました)を行い、エラーの符号化を無視して、utf-8符号化出力に変換します. 
decodeの関数プロトタイプはdecode(encoding)、errors='strict')ですので、第二のパラメータでエラー処理を制御することができます.デフォルトのパラメータはstrictです.不正な文字が発生した時に異常を投げることを表します. 
ignoreに設定すると、不正な文字は無視されます. 
もしreplaceに設定したら、使いますか?不正な文字を置換します. 
xml charre freplaceに設定すると、XMLの文字参照が使用されます.
************
別の方法:
f=file(「/home/abc.txt」)
for i in f:
    print
************************************************
ところで、私はwindowsの下でDOSの中で実験してもまだ使いにくいです.最後は下記のコードを使って文字化けを出力しないので、具体的にはどういうことですか?
# coding=gbk
import codecs

f = codecs.open('data2.txt','r','utf-8')
s = f.readlines()
f.close()
for line in s:
    print line.encode('gbk','ignore')#  ,