ホームページ >バックエンド開発 >Python チュートリアル >Pythonファイルの読み書きとファイルの文字エンコードの設定方法を詳しく解説

Pythonファイルの読み書きとファイルの文字エンコードの設定方法を詳しく解説

巴扎黑
巴扎黑オリジナル
2017-08-18 13:56:192514ブラウズ

ファイルの読み取りと書き込みの操作は、さまざまなプログラミング言語でよく使われる重要な部分です。今日は、Python のファイルの読み取りと書き込みの操作と注意が必要な点について詳しく説明します。

1. Python はファイルを開きます

コードは次のとおりです:

f = open("d:\test.txt", "w")

説明:

最初のパラメータはパスを含むファイル名です。

2 番目のパラメータはオープンモードモードです

​​

'r' : 読み取り専用 (デフォルト。ファイルが存在しない場合はエラーをスローします)

'w': 書き込み専用 (ファイルが存在しない場合は自動的にファイルを作成します)

'a': ファイルの末尾に追加します

'r+': 読み取りおよび書き込み

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

2. Pythonファイルの内容を読み込みます f.read([size])

パラメータ size 読み込み回数を示しますが省略可能です。 size パラメータを省略した場合は、ファイルの内容全体を読み取ることを意味します。

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

f = open('./pythontab.txt', 'r')
content = f.read()
print content

この方法は、効率を向上させるために、すべてのファイルの内容をメモリにロードすることを回避するためによく使用されます。

3. Python はファイル f.write(string) に書き込みます

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

f = open('./pythontab.txt', 'r+')
f.write('Hello, Pythontab.com')
f.close()

注: 書き込みが終了したら、文字列の後に改行を示す「n」を追加できます。最後に f.close() を使用してファイルを閉じます。そうしないと、特に同時実行性が高い状況では、例外が発生する可能性があります。

4. ファイル内のコンテンツの配置

f.read() の読み取り後、ファイル ポインタがファイルの末尾に到達すると、f.read() が再度使用されると、読み込まれたコンテンツが空であることがわかります。もう一度読みたい場合 すべてのコンテンツに対して、位置決めポインタをファイルの先頭に移動する必要があります:

f.seek(0)

この関数の形式は次のとおりです (単位はバイト): f .seek(offset, from_what) from_what は読み取りの開始位置を表します。offset from_what から一定距離移動することを意味します。たとえば、f.seek(10, 3) は 3 文字目に位置し、10 文字戻ることを意味します。

from_whatの値が0の場合、ファイルの先頭を示します。デフォルトはファイルの先頭です。完全な例を以下に示します。

f = open('./pythontab.txt', 'r+')
f.write('Hello, Pythontab.com')
f.seek(5)     # 定位到第6个byte
f.read(1)        
f.seek (-3, 2) #定位到第2个字符并再向前移动3个字符
f.read(1)

5. ファイルを閉じます

ファイルを閉じてリソースを解放します。ファイル操作が完了したら、必ずファイル f.close() を閉じてください。これにより、リソースが解放されます。 ASCII または gbk エンコード形式で使用する他のプログラム ファイルの読み取りと書き込みは次のとおりです:

# coding=gbk
f = open('./pythontab.txt','r') # r 指示文件打开模式,即只读
s1 = f.read()
s2 = f.readline()
s3 = f.readlines() #读出所有内容
f.close()
f = open('./pythontab.txt','w') # w 写文件
11 f.write(s1)
12 f.writelines(s2) # 没有writeline
13 f.close()

6. f.writelines は改行文字を出力しません

Python の Unicode ファイルの読み取りと書き込み:

# coding=gbk
import codecs
f = codecs.open('./pythontab.txt','a','utf-8')
f.write(u'中文')
s = '中文'
f.write(s.decode('gbk'))
f.close()
f = codecs.open('./pythontab.txt','r','utf-8')
s = f.readlines()
f.close()
for line in s:
    print line.encode('gbk')

7. Python コード ファイルのエンコーディング

py ファイルのデフォルトは ASCII エンコーディングです。中国語は表示時に ASCII からシステムのデフォルト エンコーディングに変換され、次のエラーが発生します: SyntaxError: Non-ASCII Character。コード ファイルの 1 行目または 2 行目にエンコード命令を追加する必要があります:

#coding=utf-8 ##utf-8 エンコードで中国語の文字を保存

print ' Chinese' 上記のように直接入力された文字列は次のとおりです。コードファイルのエンコーディングを処理する場合、Unicode エンコーディングを使用する場合は、次の 2 つの方法があります。

s1 = u'中国語' #u は、情報を格納するために Unicode エンコーディングを使用することを意味します

s2 = unicode('中国語',' gbk')

unicode は組み込み関数であり、2 番目のパラメーターはソース文字列のエンコード形式を示します。

decode は、文字列を Unicode 形式に変換するメソッドです。パラメータは、ソース文字列のエンコード形式を示します。

encode も任意の文字列に備わっているメソッドで、文字列をパラメータで指定された形式に変換します。

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

Unicode 型を構築するには「中国語文字」を使用します。それ以外の場合は、str 型を構築します

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

したがって、unicode から str に変換するには、encode メソッドを使用する必要があります

str から Unicode に変換するには、decode を使用する必要があります

例:

# coding=utf-8   #默认编码格式为utf-8
s = u'中文' #unicode编码的文字
print s.encode('utf-8')   #转换成utf-8格式输出 
print s #效果与上面相同,似乎默认直接转换为指定编码

要約:

u=u'unicode encoded text'

g=u.encode( 'gbk') #gbk形式に変換

print g #現在の環境がutf-8でgbkエンコードされたテキストが文字化けしているため、コードが文字化けしています

str=g.decode ('gbk').encode('utf- 8') # g を gbk エンコード形式で読み取り (gbk エンコードされているため)、utf-8 形式に変換して出力します

print str #中国語の通常表示

Safeメソッド:

s.decode('gbk' ,'ignore').encode('utf-8') #gbk エンコーディングで読み取り (もちろんテキストは gbk エンコーディング形式で読み取ります)、間違ったエンコーディングを無視して utf に変換します-8 エンコーディングと出力

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

に設定されている場合、無効な文字は無視されます。

に設定されている場合、xmlcharrefreplace に設定されている場合、XML は無視されます。文字参照が使用されます。

以上がPythonファイルの読み書きとファイルの文字エンコードの設定方法を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。