python3入力と出力
最初の数章では、我々は実際にPythonの入力と出力機能に触れてきました。 この章では、我々は、Python、特定の入力および出力を紹介します。
出力形式は美化します
Pythonの方法2つの出力値:式文と印刷()関数。
第三の方法は、ファイルオブジェクトのwrite()メソッドを使用することで、標準出力ファイルを参照sys.stdoutが使用することができます。
あなたはより多様な形式で出力したい場合は、出力値をフォーマットするstr.format()関数を使用することができます。
あなたは、出力の文字列値に変身したい場合は、達成するためのrepr()またはSTR()関数を使用することができます。
- STR():関数は、式のユーザが読める形式を返します。
- repr()は:読み込み可能な表現インタプリタのフォームを生成します。
例えば
>>> s = 'Hello, w3big' >>> str(s) 'Hello, w3big' >>> repr(s) "'Hello, w3big'" >>> str(1/7) '0.14285714285714285' >>> x = 10 * 3.25 >>> y = 200 * 200 >>> s = 'x 的值为: ' + repr(x) + ', y 的值为:' + repr(y) + '...' >>> print(s) x 的值为: 32.5, y 的值为:40000... >>> # repr() 函数可以转义字符串中的特殊字符 ... hello = 'hello, w3big\n' >>> hellos = repr(hello) >>> print(hellos) 'hello, w3big\n' >>> # repr() 的参数可以是 Python 的任何对象 ... repr((x, y, ('Google', 'w3big'))) "(32.5, 40000, ('Google', 'w3big'))"
広場やキューブテーブルを出力する2つの方法があります。
>>> for x in range(1, 11): ... print(repr(x).rjust(2), repr(x*x).rjust(3), end=' ') ... # 注意前一行 'end' 的使用 ... print(repr(x*x*x).rjust(4)) ... 1 1 1 2 4 8 3 9 27 4 16 64 5 25 125 6 36 216 7 49 343 8 64 512 9 81 729 10 100 1000 >>> for x in range(1, 11): ... print('{0:2d} {1:3d} {2:4d}'.format(x, x*x, x*x*x)) ... 1 1 1 2 4 8 3 9 27 4 16 64 5 25 125 6 36 216 7 49 343 8 64 512 9 81 729 10 100 1000
注:最初の例では、各列の間の空間は、印刷によって追加されました()。
この例では、右に文字列で、左側のスペースを埋めることができRJUST文字列オブジェクト()メソッドを、示しています。
このようなとして、ljust()と中央()と同様の方法があります。 これらの方法は、彼らはただ新しい文字列を返し、何も書き込みません。
次のように別の方法をzfillは()、それは、左の桁0に記入します。
>>> '12'.zfill(5) '00012' >>> '-3.14'.zfill(7) '-003.14' >>> '3.14159265359'.zfill(5) '3.14159265359'
次のようにstr.format()基本的な使用法は次のとおりです。
>>> print('{}网址: "{}!"'.format('本教程', 'www.w3big.com')) 本教程网址: "www.w3big.com!"
そして、かっこ内(フォーマットフィールドと呼ばれる)の文字がformatパラメータ()で置き換えられます。
次のようにカッコ内の数字の位置フォーマットは()、入ってくるオブジェクトをポイントするために使用されます。
>>> print('{0} 和 {1}'.format('Google', 'w3big')) Google 和 w3big >>> print('{1} 和 {0}'.format('Google', 'w3big')) w3big 和 Google
形式のキーワード引数()した場合、その値は、パラメータの名前を指します。
>>> print('{name}网址: {site}'.format(name='本教程', site='www.w3big.com')) 本教程网址: www.w3big.com
場所とキーワード引数を任意に組み合わせることができます。
>>> print('站点列表 {0}, {1}, 和 {other}。'.format('Google', 'w3big', other='Taobao')) 站点列表 Google, w3big, 和 Taobao。'!r'が(アスキーを使用して、()) '!A'、(文字列を()を使用して)と(のrepr()を使用)は、変換前の値をフォーマットするために使用することができるの!」:
>>> import math >>> print('常量 PI 的值近似为: {}。'.format(math.pi)) 常量 PI 的值近似为: 3.141592653589793。 >>> print('常量 PI 的值近似为: {!r}。'.format(math.pi)) 常量 PI 的值近似为: 3.141592653589793。
オプション ':'の名前が続き、フォーマット識別子は、フィールドことができます。 これは、より良い値の形式を可能にします。 次の例は、小数点以下3桁にパイを保持します。
>>> import math >>> print('常量 PI 的值近似为 {0:.3f}。'.format(math.pi)) 常量 PI 的值近似为 3.142。
では ':'整数を通過した後、あなたは少なくとも非常に多くのドメイン幅があることを確認することができます。 造園の形態で使用する場合に役立ちます。
>>> table = {'Google': 1, 'w3big': 2, 'Taobao': 3} >>> for name, number in table.items(): ... print('{0:10} ==> {1:10d}'.format(name, number)) ... w3big ==> 2 Taobao ==> 3 Google ==> 1
あなたが長い書式文字列を持っている、とあなたがそれらを分離したくない場合は、変数名ではなく、場所によってフォーマットするときは良いことでしょう。
最も簡単なのは、キーにアクセスするには、 '[]'辞書を渡し、その後、角括弧を使用することです。
>>> table = {'Google': 1, 'w3big': 2, 'Taobao': 3} >>> print('w3big: {0[w3big]:d}; Google: {0[Google]:d}; ' 'Taobao: {0[Taobao]:d}'.format(table)) w3big: 2; Google: 1; Taobao: 3
また、同じ機能を実現するためにテーブル '**'の前に変数を使用することができます。
>>> table = {'Google': 1, 'w3big': 2, 'Taobao': 3} >>> print('w3big: {w3big:d}; Google: {Google:d}; Taobao: {Taobao:d}'.format(**table)) w3big: 2; Google: 1; Taobao: 3
古いスタイルの文字列フォーマット
%演算子は、文字列の書式を実現することができます。 それはsprintfのに似ているように左に書式文字列引数()式、および置換の右、その後、返される文字列にフォーマット例:
>>> import math >>> print('常量 PI 的值近似为:%5.3f。' % math.pi) 常量 PI 的值近似为:3.142。
str.format()関数は比較的新しいですので、ほとんどのPythonコードはまだ%演算子を使用しています。 この古い形式は、最終的に言語から削除されますので、しかし、あなたはより多くのstr.formatを使用する必要があります()。
キーボード入力を読みます
Pythonは入力の入力()関数は、標準のテキスト行を読み取るように設定されて提供し、デフォルトの標準入力はキーボードです。
入力は、入力としてPythonの式を受け取り、操作の結果を返すことがあります。
#!/usr/bin/python3 str = input("请输入:"); print ("你输入的内容是: ", str)
これは、入力に対応した以下の結果が得られます。
请输入:本教程 你输入的内容是: 本教程
ファイルを読み書き
オープン()ファイルオブジェクトを返し、次のように基本的な構文は次のとおりです。
open(filename, mode)
- ファイル名:ファイル名変数は、ファイル名にアクセスしたい値を含む文字列です。
- モード:読み取り、書き込み、追記:モードモードは、開いているファイルを決定します。 次のようにすべての可能な値の完全なリストを参照してください。 この非必須パラメータは、デフォルトのファイル・アクセス・モードは読み取り専用です(r)を。
ファイルの異なるモードの完全なリストを開きます。
モード | 説明 |
---|---|
R | 読み取り専用モードでファイルを開きます。 ポインタファイルは、ファイルの先頭に配置されます。 これがデフォルトのモードです。 |
RB | 読み取り専用のバイナリ形式でのファイルを開きます。 ファイルの先頭にポインタを提出します。 これがデフォルトのモードです。 |
R + | 読み取りと書き込みのためにファイルを開きます。 ファイルの先頭にポインタを提出します。 |
RB + | バイナリ形式の読み込みと書き込みのためにファイルを開きます。 ファイルの先頭にポインタを提出します。 |
ワット | 書き込み専用ファイルを開きます。 ファイルがすでに存在する場合、それは上書きされます。 ファイルが存在しない場合は、新しいファイルを作成します。 |
WB | 唯一のバイナリフォーマットで書き込むためのファイルを開きます。 ファイルがすでに存在する場合、それは上書きされます。 ファイルが存在しない場合は、新しいファイルを作成します。 |
ワット+ | 読み取りと書き込みのためにファイルを開きます。 ファイルがすでに存在する場合、それは上書きされます。 ファイルが存在しない場合は、新しいファイルを作成します。 |
WB + | バイナリ形式の読み込みと書き込みのためにファイルを開きます。 ファイルがすでに存在する場合、それは上書きされます。 ファイルが存在しない場合は、新しいファイルを作成します。 |
A | 追加するためにファイルを開きます。 ファイルが既に存在する場合、ファイルポインタはファイルの最後に配置されます。 換言すれば、新たなコンテンツは、既存のコンテンツに書き込まれた後。 ファイルが存在しない場合は、書き込み用の新しいファイルを作成します。 |
AB | バイナリ形式の追加のためのファイルを開きます。 ファイルが既に存在する場合、ファイルポインタはファイルの最後に配置されます。 換言すれば、新たなコンテンツは、既存のコンテンツに書き込まれた後。 ファイルが存在しない場合は、書き込み用の新しいファイルを作成します。 |
+ | 読み取りと書き込みのためにファイルを開きます。 ファイルが既に存在する場合、ファイルポインタはファイルの最後に配置されます。 これは、ファイルが開かれるモードが追加されます。 ファイルが存在しない場合は、読み書きのための新しいファイルを作成します。 |
AB + | バイナリ形式の追加のためのファイルを開きます。 ファイルが既に存在する場合、ファイルポインタはファイルの最後に配置されます。 ファイルが存在しない場合は、読み書きのための新しいファイルを作成します。 |
次の例では、文字列内のファイルfoo.txtのに書き込まれます。
#!/usr/bin/python3 # 打开一个文件 f = open("/tmp/foo.txt", "w") f.write( "Python 是一个非常好的语言。\n是的,的确非常好!!\n" ) # 关闭打开的文件 f.close()
- 最初のパラメータは開きたいファイルの名前です。
- 文字2番目のパラメータは、ファイルを使用する方法について説明します。 書き込まれたデータは自動的に最後に追加されます。ファイルが読み取り専用の場合、および ''追加ファイルの内容のために(ファイルは、それが削除されますが存在する場合)モードでは、「R」のみ書き込むための 'W'することができます。読み取りと書き込みの両方のためには 'r +'。 mode引数はオプションです; 'r'はデフォルト値になります。
、ファイルfoo.txtというを開き、次のように表示されます:
$ cat /tmp/foo.txt Python 是一个非常好的语言。 是的,的确非常好!!
ファイルオブジェクトのメソッド
この例では、残りの部分をfのと呼ばれるファイルオブジェクトを作成していることを前提としています。
f.read()
ファイルの内容を読み取るには、データの一定数を読み出すため、f.read(サイズ)を呼び出し、その後、文字列またはバイトオブジェクトとして返さ。
サイズは、オプションの数値パラメータです。 サイズは無視されるか、または負である場合には、ファイルの内容全体が読み取られ、返されます。
次の例では、ファイルfoo.txtのは、(上記の例で作成されている)が存在することを前提としています。
#!/usr/bin/python3 # 打开一个文件 f = open("/tmp/foo.txt", "r") str = f.read() print(str) # 关闭打开的文件 f.close()
上記のプログラムは、出力は次のようになります。
Python 是一个非常好的语言。 是的,的确非常好!!
f.readline()
f.readline()はファイルから1行を読み取ります。 改行文字 '\ n'が。 それが最後の行に読み込まれていたことを説明し、場合f.readline()は空の文字列を返します。
#!/usr/bin/python3 # 打开一个文件 f = open("/tmp/foo.txt", "r") str = f.readline() print(str) # 关闭打开的文件 f.close()
上記のプログラムは、出力は次のようになります。
Python 是一个非常好的语言。
f.readlines()
f.readlines()は、ファイルに含まれるすべての行を返します。
オプションのパラメータのsizehintがあれば、長さを指定されたバイトを読み、これらのバイトはラインで割りました。
#!/usr/bin/python3 # 打开一个文件 f = open("/tmp/foo.txt", "r") str = f.readlines() print(str) # 关闭打开的文件 f.close()
上記のプログラムは、出力は次のようになります。
['Python 是一个非常好的语言。\n', '是的,的确非常好!!\n']
もう一つの方法は、ファイルオブジェクトを反復処理し、次に各行を読み取ります。
#!/usr/bin/python3 # 打开一个文件 f = open("/tmp/foo.txt", "r") for line in f: print(line, end='') # 关闭打开的文件 f.close()
上記のプログラムは、出力は次のようになります。
Python 是一个非常好的语言。 是的,的确非常好!!
この方法は非常に簡単ですが、それは良好な制御を提供していません。 異なるため処理機構の両方が、それが混在することが最善ではありません。
f.write()
f.write(文字列)ファイルに書き込まれた文字列、および書き込まれた文字数を返します。
#!/usr/bin/python3 # 打开一个文件 f = open("/tmp/foo.txt", "w") num = f.write( "Python 是一个非常好的语言。\n是的,的确非常好!!\n" ) print(num) # 关闭打开的文件 f.close()
上記のプログラムは、出力は次のようになります。
29
あなたが文字列でないことのいくつかを書きたい場合は、変換する必要があります:
#!/usr/bin/python3 # 打开一个文件 f = open("/tmp/foo1.txt", "w") value = ('www.w3big.com', 14) s = str(value) f.write(s) # 关闭打开的文件 f.close()
上記のプログラム、オープンfoo1.txtファイル:
$ cat /tmp/foo1.txt ('www.w3big.com', 14)
f.tell()
f.tell()は、ファイルカウントの先頭からのバイト数で、ファイルオブジェクトの位置が現在位置して返します。
f.seek()
あなたは、ファイルの現在位置を変更したい場合は、f.seek(オフセット、from_what)関数を使用することができます。
それが0の先頭である場合、それは1の端部は、例えば、現在位置を示すファイル2である場合From_what値は、示しています。
- (X、0)シーク:スタート位置から、それはファイルの最初の文字の最初の行はxの文字を移動し始めます
- シーク(Xを、1):現在位置から後方への移動のx文字を表します
- ファイルの先端からモバイルのx文字を示しています(-x、2)シーク
from_whatデフォルト値、すなわち、ファイルの先頭に0です。 ここでは完全な例です:
>>> f = open('/tmp/foo.txt', 'rb+') >>> f.write(b'0123456789abcdef') 16 >>> f.seek(5) # 移动到文件的第六个字节 5 >>> f.read(1) b'5' >>> f.seek(-3, 2) # 移动到文件的倒数第三字节 13 >>> f.read(1) b'd'
f.close()
テキストファイルでのみ検索するファイルの開始に関して(それらの開いているファイルモードをbはありません)。あなたがファイルで終了したら、ファイルを閉じて、システムリソースを解放するためにf.close()をを呼び出し、ファイルをリコールしようとした場合、例外がスローされます。
>>> f.close() >>> f.read() Traceback (most recent call last): File "<stdin>", line 1, in ? ValueError: I/O operation on closed file <pre> <p> 当处理一个文件对象时, 使用 with 关键字是非常好的方式。在结束后, 它会帮你正确的关闭文件。 而且写起来也比 try - finally 语句块要简短:</p> <pre> >>> with open('/tmp/foo.txt', 'r') as f: ... read_data = f.read() >>> f.closed True
Fileオブジェクトは、isatty()とtrucate()のような他の方法、ありますが、これらは通常は少ないです。
pickleモジュール
Pythonのpickleモジュールは、基本的なデータ系列とデシリアライズを実装しています。
私たちは、永続的なストレージにファイルに情報を実行しているシリアル化操作pickleモジュール対象プログラムを保存することができました。
デシリアライゼーションpickleモジュールによって、我々は、ファイルからオブジェクトを保存するプログラムを作成することができます。
基本インタフェース:
pickle.dump(obj, file, [,protocol])
このオブジェクトのピクルスと、既読としてファイルを開くことができるようにするには:
x = pickle.load(file)
注:ファイルから文字列を読み込み、その元のPythonオブジェクトの再構築。
ファイル:読み取りとファイルオブジェクト()とreadlineの()インタフェース。
実施例1:
#!/usr/bin/python3 import pickle # 使用pickle模块将数据对象保存到文件 data1 = {'a': [1, 2.0, 3, 4+6j], 'b': ('string', u'Unicode string'), 'c': None} selfref_list = [1, 2, 3] selfref_list.append(selfref_list) output = open('data.pkl', 'wb') # Pickle dictionary using protocol 0. pickle.dump(data1, output) # Pickle the list using the highest protocol available. pickle.dump(selfref_list, output, -1) output.close()
例2:
#!/usr/bin/python3 import pprint, pickle #使用pickle模块从文件中重构python对象 pkl_file = open('data.pkl', 'rb') data1 = pickle.load(pkl_file) pprint.pprint(data1) data2 = pickle.load(pkl_file) pprint.pprint(data2) pkl_file.close()