ホームページ >バックエンド開発 >Python チュートリアル >Python3 の基本的な入出力例の分析

Python3 の基本的な入出力例の分析

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBオリジナル
2016-06-16 08:42:521347ブラウズ

一般に、Python プログラムはキーボードから入力を読み取るか、ファイルから入力を読み取ることができ、プログラムの結果を画面に出力したり、後で使用できるようにファイルに保存したりできます。この記事では、Python の最も基本的な I/O 関数を紹介します。

1. コンソール I/O

1. キーボード入力を読み取ります

組み込み関数 input([prompt]) は、標準入力から行を読み取り、文字列 (末尾の改行文字を削除) を返すために使用されます。

s = input("Enter your input:")

注: raw_input() 関数 は、Python 3.x バージョンではキャンセルされました。

2. 画面に印刷

最も簡単な出力方法は print ステートメントを使用することで、ゼロ個以上のカンマ区切りの式を渡すことができます。

print([object, ...][, sep=' '][, end='endline_character_here'][, file=redirect_to_here]) 

角括弧はオプションです。sep は区切り文字を表し、end は終了文字を表し、file はリダイレクトされたファイルを表します。 sep、end、file の値を指定する場合は、キーワード パラメーターを使用する必要があります。

print('hello', 'world', sep='%')  # 输出 hello%world 
print('hello', 'world', end='*')  # 输出 hello world*,并且不换行 

2. ファイル I/O

ファイルの読み取りと書き込みを行う前に、まず open() 関数を使用してファイルを開きます。この関数はファイル オブジェクトを返します。

f = open(filename,mode)

mode パラメーターが指定されていない場合、ファイルはデフォルトで「r」モードで開かれます。パターン内の文字は次のとおりです:

r: 読み取り専用
w: 書き込みのみ。ファイルがすでに存在する場合は上書きします。ファイルが存在しない場合は、新しいファイルを作成します
+: 読み取りおよび書き込み (単独では使用できません)
a: 追加するファイルを開きます。書き込み専用です。ファイルが存在しない場合は新しいファイルを作成します
b: バイナリモードで開く(単独では使用できません)

したがって、可能なモードはおおよそ r、w、r+、w+、rb、wb、rb+、wb+、a、a+、ab、ab+ です。w と a のみがファイルを作成できることに注意してください。

通常、ファイルはテキスト モードで開かれます。つまり、ファイルから読み書きされる文字は、特定のエンコード形式 (デフォルトは UTF-8) の文字列でエンコードされます。ファイルがバイナリ モードで開かれた場合、データはバイト オブジェクトとして読み書きされます:

f = open('a.txt','wb+') 
f.write('I like apple!')  # 报错 
f.write(b'I like apple!') # 以bytes对象的形式进行读写 

Bytes オブジェクトは、0 から 127 までの変更不可能な整数のシーケンス、または純粋な ASCII 文字です。その目的は、バイナリ データを保存することです。

バイト リテラルは、文字列の先頭に「b」を追加することで作成できます。
bytes() 関数を使用して bytes オブジェクトを作成することもできます。

注: bytes() 関数の初期化子が文字列の場合、エンコーディングを指定する必要があります。

b1 = b'This is string' 
b2 = bytes('This is string', 'UTF-8')  # 必须指定编码格式 

文字列オブジェクトとバイト オブジェクトには互換性がありません。バイトを str に変換するには、バイト オブジェクトをデコードする必要があります。decode() メソッドを使用します。

b = bytes('This is string', 'UTF-8') 
print(b, b.decode(), sep='\n') 
# 输出: 
# b'This is string' 
# This is string 

ファイル オブジェクトのメソッド (f がファイル オブジェクトであると仮定):

f.read(size): size バイトのデータを読み取り、文字列またはバイト オブジェクトとして返します。 size はオプションのパラメータです。size が指定されていない場合は、ファイルのすべての内容が読み取られます。
f.readline(): 行を読み取ります。文字列の末尾には改行文字 (n) が残り、ファイルの末尾に到達すると空の文字列が返されます。
f.readlines(): すべての行を読み取り、それをリストに格納します。各要素は list(f) と同等です。
f.write(string): 文字列をファイルに書き込み、書き込まれた文字数を返します。ファイルをバイナリ モードで書き込む場合は、文字列をバイト オブジェクトに変換する必要があります。
f.tell(): ファイル オブジェクトの現在位置、つまりファイルの先頭からのバイト数を返します。
f.seek(offset, from_what): ファイル オブジェクトの場所を変更します。 offset は、参照位置を基準としたオフセットです。from_what は、値 0 (ファイル ヘッダー、デフォルト)、1 (現在位置)、2 (ファイルの終了) をとり、参照位置を示します。
f.close(): ファイルオブジェクトを閉じます。

これらは非常に一般的に使用されるメソッドです。もちろん、ファイル オブジェクトにはこれら以外のメソッドもあります。開くモードに応じて、open() によって返されるファイル オブジェクトのタイプも異なります:

TextIOWrapper: テキスト モード。TextIOWrapper オブジェクトを返します。
BufferedReader: バイナリ、つまり rb を読み取り、BufferedReader オブジェクトを返します。
BufferedWriter: バイナリ (wb、ab など) を書き込んで追加し、BufferedWriter オブジェクトを返します。
BufferedRandom: 読み取り/書き込みモード、つまり + を含むモードは、BufferedRandom オブジェクトを返します。
これらのファイル オブジェクトに対して dir() または help() を実行すると、そのすべてのメソッドを確認できます。

補足:

1. テキスト モードでは、seek() メソッドはファイルの開始位置を基準にして位置決めを行います。 (ファイルの末尾を見つける以外は、seek(0, 2) を使用できます)
2. ファイル オブジェクトをループして反復して 1 行ずつ読み取ることができます:

for line in f: 
print(line, end='') 

3. フォーマットされた出力

一般的に言えば、単にスペースで分割するのではなく、出力形式をより詳細に制御する必要があります。ここには 2 つの方法があります:

最初のものはあなた自身によって制御されます。文字列のスライス、連結操作、および文字列に含まれるその他の便利な操作を使用します。
2 つ目は、str.format() メソッドを使用する方法です。
以下に例を示します:

# 第一种方式:自己控制 
for x in range(1, 11): 
  print(str(x).rjust(2), str(x*x).rjust(3), end=' ') 
  print(str(x*x*x).rjust(4)) 
 
# 第二种方式:str.format() 
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 

第一种方式中,字符串对象的 str.rjust() 方法的作用是将字符串靠右,并默认在左边填充空格,类似的方法还有 str.ljust() 和 str.center() 。这些方法并不会写任何东西,它们仅仅返回新的字符串,如果输入很长,它们并不会截断字符串。我们注意到,同样是输出一个平方与立方表,使用str.format()会方便很多。

str.format()的基本用法如下:

>>> print('We are the {} who say "{}!"'.format('knights', 'Ni')) 
We are the knights who say "Ni!" 

括号及括号里的字符将会被 format() 中的参数替换.。括号中的数字用于指定传入对象的位置:

>>> print('{0} and {1}'.format('Kobe', 'James')) 
Kobe and James 
>>> print('{1} and {0}'.format('Kobe', 'James')) 
James and Kobe 

如果在 format() 中使用了关键字参数,那么它们的值会指向使用该名字的参数:

>>> print('The {thing} is {adj}.'.format(thing='flower', adj='beautiful')) 
The flower is beautiful. 

可选项':'和格式标识符可以跟着 field name,这样可以进行更好的格式化:

>>> import math 
>>> print('The value of PI is {0:.3f}.'.format(math.pi)) 
The value of PI is 3.142. 

在':'后传入一个整数,可以保证该域至少有这么多的宽度,用于美化表格时很有用:

>>> table = {'Jack':4127, 'Rose':4098, 'Peter':7678} 
>>> for name, phone in table.items(): 
...   print('{0:10} ==> {1:10d}'.format(name, phone)) 
...  
Peter   ==>    7678 
Rose    ==>    4098 
Jack    ==>    4127 

我们还可以将参数解包进行格式化输出。例如,将table解包为关键字参数:

table = {'Jack':4127, 'Rose':4098, 'Peter':7678} 
print('Jack is {Jack}, Rose is {Rose}, Peter is {Peter}.'.format(**table)) 
# 输出:Jack is 4127, Rose is 4098, Peter is 7678. 

补充:

% 操作符也可以实现字符串格式化。它将左边的参数作为类似 sprintf() 式的格式化字符串,而将右边的代入:

import math 
print('The value of PI is %10.3f.' %math.pi) 
# 输出:The value of PI is   3.142. 

因为这种旧式的格式化最终会从Python语言中移除,应该更多的使用 str.format() 。

附:文本模式与二进制模式

1、在Windows系统中,文本模式下,默认是将Windows平台的行末标识符 \r\n 在读时转为 \n ,而在写时将 \n 转为 \r\n 。 这种隐藏的行为对于文本文件是没有问题的,但是对于二进制数据像 JPEG 或 EXE 是会出问题的。在使用这些文件时请小心使用二进制模式。

2、在类Unix/Linux系统中,行末标识符为 \n,即文件以 \n 代表换行。所以Unix/Linux系统中在文本模式和二进制模式下并无区别。

本文所述实例读者可以实际动手操作测试一下,以加深印象,从而进一步牢固掌握Python基础。

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