最も簡単な方法の永続実際の開発しばしば遭遇シーンデータの永続化操作、およびデータは、ファイルにデータを保存することです。それは「ファイル」になる単語であるときは、ファイルシステムについての科学的知識を見てする必要があるかもしれませんが、ここでは、インクを無駄にしない、この概念を導入し、ウィキペディアを介して自分自身を知るしてください。
Pythonで実装ファイルの読み込みと書き込みの操作は実際には非常に単純ですが、Pythonは内蔵のを経由してオープン機能、私たちは、あなたがファイルへの読み込みと書き込みができ、オブジェクトファイル操作を取得するために、動作モード、およびその他の符号化された情報を、ファイル名を指定することができます。ここでの動作モードがオープン具体的には以下の表では、単により多くの何のファイル(文字またはバイナリデータ)の操作の種類(読み取り、書き込みまたはAPPEND)を行います。
操作模式 具体含义
'r' 读取 (默认)
'w' 写入(会先截断之前的内容)
'x' 写入,如果文件已经存在会产生异常
'a' 追加,将内容写入到已有文件的末尾
'b' 二进制模式
't' 文本模式(默认)
'+' 更新(既可以读又可以写)
初心者チュートリアルのウェブサイトから、それを示して下図のアプリケーションは、動作モードを設定する必要がある場合。
読み取りと書き込みのテキストファイル
テキストファイルを読み込み、「R&LT」にファイル名(相対パスまたは絶対パスを使用)とファイルモードに良いパスを持つとき、open関数を指定する必要があります(指定されていない場合、デフォルト値はですその後、R「)、その後、オペレーティングシステムのデフォルトのエンコーディングの読み取りファイルで使用される、指定されていない場合、デフォルト値はNoneです(符号化することにより、エンコードのパラメータを指定)、ファイルを保存するために用いられる符号化の符号化パラメータを指定した場合の保証はできませんコーディングに一貫性がある、それは文字を解読し、失敗を読み取ることができないことにつながる可能性があります。次の例では、プレーンテキストファイルを読み込む方法を示しています。
def main():
f = open('致橡树.txt', 'r', encoding='utf-8')
print(f.read())
f.close()
if __name__ == '__main__':
main()
open関数は、指定された場合、ファイルが存在しないか、開くことができない、そして異常な状態がクラッシュするプログラムを引き起こし、上記のコードがありますのでご注意ください。コード堅牢性のある程度にし、フォールトトレランスのために、我々は、以下に示すように、実行時に適切な処理で行うことができるPythonコード状況の例外メカニズムを使用することができます。
def main():
f = None
try:
f = open('致橡树.txt', 'r', encoding='utf-8')
print(f.read())
except FileNotFoundError:
print('无法打开指定的文件!')
except LookupError:
print('指定了未知的编码!')
except UnicodeDecodeError:
print('读取文件时解码错误!')
finally:
if f:
f.close()
if __name__ == '__main__':
main()
Pythonでは、私たちは、tryコードブロックが1つ以上発生する可能性のある異常な状況をキャプチャする以外に追いつくことができた後の状況は、トライコードブロックで、実行時に発生する可能性があることコーディングすることができます。たとえば、ファイルを読み取る上記のプロセスでは、ファイルが原因FileNotFoundErrorを見つけることができません指定された復号化がファイルを読み込むされるようUnicodeDecodeError発生していない場合は、未知のエンコーディングは、LookupErrorがにつながる、私たちは後ろに3に追いつくためにしてみてください1を除く三つの異なる異常を治療しました。最後に、我々は最終的に起因する、最終的にかかわらず、通常の手順のブロックまたは例外がにexit関数を実行する(あるいはSYSモジュール出口Python環境を呼び出します、finallyブロック内のコードに、外部リソースのプログラム取得の解放、近い開いているファイルにブロックを使用します私たちは、finallyブロックは通常、「常にコードブロックを実行する」というように、exit関数は、本質的にSystemExitを例外原因とされているため)に行われます、それは外部のリソースを解放動作するアプリケーションに最適です。あなたは、ファイルオブジェクトコンテキストで指定したキーワードでも、文脈文法を使用することができ、最終的にはリソースの解放を阻止するには、ファイルオブジェクトを閉じて、ファイルのコンテキストを離れるときに自動的にリソースを解放したくない場合は、コードを以下に示します。
def main():
try:
with open('致橡树.txt', 'r', encoding='utf-8') as f:
print(f.read())
except FileNotFoundError:
print('无法打开指定的文件!')
except LookupError:
print('指定了未知的编码!')
except UnicodeDecodeError:
print('读取文件时解码错误!')
if __name__ == '__main__':
main()
読み出し方法に加えて、ファイル・オブジェクトを使用してファイルはまた、ループにするために、使用することができる読み取りまたはファイルは、行がコンテナリストに方法readlines行を読み取ることによって行を読み取り、コードを以下に示します
import time
def main():
# 一次性读取整个文件内容
with open('致橡树.txt', 'r', encoding='utf-8') as f:
print(f.read())
# 通过for-in循环逐行读取
with open('致橡树.txt', mode='r') as f:
for line in f:
print(line, end='')
time.sleep(0.5)
print()
# 读取文件按行读取到列表中
with open('致橡树.txt') as f:
lines = f.readlines()
print(lines)
if __name__ == '__main__':
main()
テキストメッセージファイルを書き込むには良い機能を使用するときに開くように「W」にファイル名とファイル・モードを指定して、非常に簡単です。追加のファイルのコンテンツタイプを作成するために必要な場合には、モードが「」に設定する必要があることに注意してください。ファイルが書き込まれる場合、それは自動的にそれを上げるのではなく、ファイルが作成されますが存在しません。次の例は、1から9999の間の素数は(1〜99の間に素数がA.TXTに格納された3つのファイルに書き込まれた方法を示し、B.TXTに保存されている999から100の間の素数、 c.txtに格納されている1000と9999の間の素数)。
from math import sqrt
def is_prime(n):
"""判断素数的函数"""
assert n > 0
for factor in range(2, int(sqrt(n)) + 1):
if n % factor == 0:
return False
return True if n != 1 else False
def main():
filenames = ('a.txt', 'b.txt', 'c.txt')
fs_list = []
try:
for filename in filenames:
fs_list.append(open(filename, 'w', encoding='utf-8'))
for number in range(1, 10000):
if is_prime(number):
if number < 100:
fs_list[0].write(str(number) + '\n')
elif number < 1000:
fs_list[1].write(str(number) + '\n')
else:
fs_list[2].write(str(number) + '\n')
except IOError as ex:
print(ex)
print('写文件时发生错误!')
finally:
for fs in fs_list:
fs.close()
print('操作完成!')
if __name__ == '__main__':
main()
読み取りと書き込みバイナリは
読み込み、書き込みのテキストファイルは、次のコードの実装に、それは非常に単純である画像ファイルをコピーする機能をバイナリファイルを読み書きする方法を知っています。
def main():
try:
with open('guido.jpg', 'rb') as fs1:
data = fs1.read()
print(type(data)) # <class 'bytes'>
with open('吉多.jpg', 'wb') as fs2:
fs2.write(data)
except FileNotFoundError as e:
print('指定的文件无法打开.')
except IOError as e:
print('读写文件时出现错误.')
print('程序执行结束.')
if __name__ == '__main__':
main()
読み書きにJSONファイル
上記の説明では、ファイルにリストやデータ・ディクショナリを保存したい場合は、我々はすでにどのように行う必要があり、その後、問題があると、ファイルにテキストデータとバイナリデータを保存する方法を知っていますそれは?答えは、JSON形式でデータを保存することです。JSONは「JavaScriptのオブジェクト表記法」の頭文字で、もともとは一つの言語のJavaScriptオブジェクトリテラル構文を作成しました、今、JSONはプレーンテキストであるため、その理由は、非常に簡単です、クロスランゲージ、広く使われているクロスプラットフォームのデータを交換されました任意のプログラミング言語のプレーンテキスト内の任意のシステムは問題ではありません。現在、JSONは基本的には、異種システム間でデータをやり取りするためのデファクトスタンダードとしてXMLを交換しました。JSONの知識は、JSONはより公式サイトを参照することができ、このウェブサイトを使用することも可能なツールパーティのライブラリやJSONデータ・フォーマットを処理し、各言語は、以下のJSONの簡単な例であることを理解することができます。
{
"name": "骆昊",
"age": 38,
"qq": 957658,
"friends": ["王大锤", "白元芳"],
"cars": [
{"brand": "BYD", "max_speed": 180},
{"brand": "Audi", "max_speed": 280},
{"brand": "Benz", "max_speed": 320}
]
}
私たちは辞書にはPythonでJSONの上に、気づいたことがあり、次の2つの表に示すように、実際にJSONデータ型とデータ型Pythonは対応関係を見つけることは非常に簡単ですが、実際には同じと同じです。
JSON Python
object dict
array list
string str
number (int / real) int / float
true / false True / False
null None
Python JSON
dict object
list, tuple array
str string
int, float, int- & float-derived Enums number
True / False true / false
None null
私たちは、Pythonのjsonモジュールは、次のようにコードがあり、ファイルに辞書やリストJSON形式で保存することができます。
import json
def main():
mydict = {
'name': '骆昊',
'age': 38,
'qq': 957658,
'friends': ['王大锤', '白元芳'],
'cars': [
{'brand': 'BYD', 'max_speed': 180},
{'brand': 'Audi', 'max_speed': 280},
{'brand': 'Benz', 'max_speed': 320}
]
}
try:
with open('data.json', 'w', encoding='utf-8') as fs:
json.dump(mydict, fs)
except IOError as e:
print(e)
print('保存数据完成!')
if __name__ == '__main__':
main()
JSONモジュール4つの重要な機能、すなわち、があります。
dump - 将Python对象按照JSON格式序列化到文件中
dumps - 将Python对象处理成JSON格式的字符串
load - 将文件中的JSON数据反序列化成对象
loads - 将字符串的内容反序列化成Python对象
ここでは、逆シリアル化と呼ばれる2つの概念、シリアライズと呼ばれる一つは、ありました。ウィキペディア、二つの概念上のフリー百科事典ウィキペディアを説明する:「コンピュータサイエンスデータにシリアル化(直列化)がそうすることを、形式で格納または送信されるデータ構造またはオブジェクトの状態を変換するための処理手段それらは元の状態に戻る必要がある場合、及びデータバイト再取得のシーケンスにより、これらのバイトは、元のオブジェクト(コピー)のコピーを生成するために使用することができる。この処理動作とは対照的に、即ち、バイトのシリーズからデータ構造を抽出する操作は、(直列化復元)直列化復元されています。」
ネットワーク・データ・サービスの現在、大半あなたは国内を理解したい場合(またはネットワークAPIいわゆる)知識のHTTPプロトコル、HTTPプロトコルに基づいたJSON形式のデータを提供している、あなたは、「はじめにHTTPプロトコル」ルアンYifeng教師を見ることができますネットワークデータサービスは、あなたがウェブサイトを検索{API}を参照することができ、海外の集計データとアバターデータと他のサイトを見てみることができます。次の例は、この例に、JSONモジュールと表示ニュースの見出しを経由してJSONデータを解析するためにどのように全国ニュースを取得するためにネットワークAPIにアクセスするために(パッケージには、サードパーティ製のネットワーク・アクセス・モジュールは十分に良好であった)国内日帰り旅行が提供する用途データを要求するモジュールを使用する方法を示しますAPIKEYがサイトに独自のアプリケーションを必要とするニュースデータ・インタフェース、。
import requests
import json
def main():
resp = requests.get('http://api.tianapi.com/guonei/?key=APIKey&num=10')
data_model = json.loads(resp.text)
for news in data_model['newslist']:
print(news['title'])
if __name__ == '__main__':
main()
これだけ直列化されたデータは、プロトコルデータ系列の配列に特異的な、あなたも漬物やシェルフモジュールが、これらの二つのモジュールの使用を使用することができます以外シリアライズとデシリアライズJSONモジュールにPythonで実装されていますPythonは識別することができます。これら二つのモジュールについての知識は、ネットワーク自体のデータを見ることができます。あなたがPythonの例外メカニズムについてのより多くの知識を習得したい場合はまた、あなたが記事上記segmentfault見ることができる「と結論:Pythonの例外処理を、」記事だけではなく、また、一連のをまとめ、パイソンの使用例外メカニズムを説明しますベストプラクティス、それは読む価値があります。