Python Language
基本入出力
サーチ…
input()とraw_input()を使用すると、
raw_input
は、ユーザーがテキストを入力するのを待ってから、その結果を文字列として返します。
foo = raw_input("Put a message here that asks the user for input")
上記の例では、 foo
はユーザーが入力したものを格納します。
input
はユーザーがテキストをinput
するのを待ってから、結果を文字列として返します。
foo = input("Put a message here that asks the user for input")
上記の例では、 foo
はユーザーが入力したものを格納します。
印刷機能の使用
Python 3では、印刷機能は関数の形をしています:
print("This string will be displayed in the output")
# This string will be displayed in the output
print("You can print \n escape characters too.")
# You can print escape characters too.
Python 2では、printはもともとは次のようなステートメントでした。
print "This string will be displayed in the output"
# This string will be displayed in the output
print "You can print \n escape characters too."
# You can print escape characters too.
注:Python 2でfrom __future__ import print_function
を使用すると、ユーザーはPython 3コードと同じprint()
関数を使用できます。これは、Python 2.6以上でのみ利用可能です。
ユーザに番号を促す機能
def input_number(msg, err_msg=None):
while True:
try:
return float(raw_input(msg))
except ValueError:
if err_msg is not None:
print(err_msg)
def input_number(msg, err_msg=None):
while True:
try:
return float(input(msg))
except ValueError:
if err_msg is not None:
print(err_msg)
それを使うには:
user_number = input_number("input a number: ", "that's not a number!")
または、「エラーメッセージ」を表示したくない場合は、次のようにします。
user_number = input_number("input a number: ")
末尾に改行なしの文字列を表示する
Python 2.xでは、 print
で行を続けるには、 print
文をカンマで終わらせます。自動的にスペースが追加されます。
print "Hello,",
print "World!"
# Hello, World!
Python 3.xでは、 print
関数には、指定された文字列の最後に出力されるオプションのend
パラメータがあります。デフォルトでは改行文字なので、これに相当します:
print("Hello, ", end="\n")
print("World!")
# Hello,
# World!
しかし、あなたは他の文字列を渡すことができます
print("Hello, ", end="")
print("World!")
# Hello, World!
print("Hello, ", end="<br>")
print("World!")
# Hello, <br>World!
print("Hello, ", end="BREAK")
print("World!")
# Hello, BREAKWorld!
出力をより詳細に制御するには、 sys.stdout.write
を使用します。
import sys
sys.stdout.write("Hello, ")
sys.stdout.write("World!")
# Hello, World!
stdinから読み込む
PythonプログラムはUNIXパイプラインから読み込むことができます。ここでは、 stdin
から読み込む方法の簡単な例を示します:
import sys
for line in sys.stdin:
print(line)
sys.stdin
はストリームであることに注意してください。これは、ストリームが終了したときにのみforループが終了することを意味します。
次のように、別のプログラムの出力をPythonプログラムにパイプすることができます:
$ cat myfile | python myprogram.py
この例では、 cat myfile
はstdout
出力するunixコマンドです。
あるいは、 fileinputモジュールを使うと便利です:
import fileinput
for line in fileinput.input():
process(line)
ファイルからの入力
入力はファイルから読み取ることもできます。ファイルは、組み込み関数open
を使用して開くことができます。 with <command> as <name>
構文( 'コンテキストマネージャ'と呼ばれます)とwith <command> as <name>
使用すると、 open
を使用してファイルのハンドルを手に入れやすくなります。
with open('somefile.txt', 'r') as fileobj:
# write code here using fileobj
これにより、コードの実行がブロックを離れると、ファイルは自動的に閉じられます。
ファイルは異なるモードで開くことができます。上記の例では、ファイルは読み取り専用として開かれています。既存のファイルを読み取り専用で開くにはr
使用します。あなたがバイトとしてそのファイルを読むには、 rb
使いrb
。既存のファイルにデータを追加するには、を使用a
ます。 w
を使用してファイルを作成するか、同じ名前の既存のファイルを上書きします。 r+
を使用すると、読み書きの両方でファイルを開くことができます。 open()
第1引数はファイル名であり、第2引数はモードです。モードを空白のままにすると、デフォルトはr
になります。
# let's create an example file:
with open('shoppinglist.txt', 'w') as fileobj:
fileobj.write('tomato\npasta\ngarlic')
with open('shoppinglist.txt', 'r') as fileobj:
# this method makes a list where each line
# of the file is an element in the list
lines = fileobj.readlines()
print(lines)
# ['tomato\n', 'pasta\n', 'garlic']
with open('shoppinglist.txt', 'r') as fileobj:
# here we read the whole content into one string:
content = fileobj.read()
# get a list of lines, just like int the previous example:
lines = content.split('\n')
print(lines)
# ['tomato', 'pasta', 'garlic']
ファイルのサイズが小さい場合、ファイル内容全体をメモリに読み込むことは安全です。ファイルが非常に大きい場合は、行単位またはチャンク単位で読み込み、入力を同じループで処理するほうがよい場合があります。それを行うには:
with open('shoppinglist.txt', 'r') as fileobj:
# this method reads line by line:
lines = []
for line in fileobj:
lines.append(line.strip())
ファイルを読むときは、オペレーティングシステム固有の改行文字を認識してください。 for line in fileobj
自動的にそれらfor line in fileobj
ますが、上記のように、読み込まれた行のstrip()
を呼び出すことは常に安全です。
上記の例では、開いているファイル( fileobj
)は常にファイル内の特定の場所を指しています。ファイルハンドルが最初に開かれると、ファイルハンドルはファイルの最初の位置、つまり位置0
指します。ファイルハンドルはtell
使っtell
現在の位置を表示することができます:
fileobj = open('shoppinglist.txt', 'r')
pos = fileobj.tell()
print('We are at %u.' % pos) # We are at 0.
すべてのコンテンツを読み込むと、ファイルハンドラの位置はファイルの最後にポイントされます:
content = fileobj.read()
end = fileobj.tell()
print('This file was %u characters long.' % end)
# This file was 22 characters long.
fileobj.close()
ファイルハンドラの位置は、必要なものに設定することができます:
fileobj = open('shoppinglist.txt', 'r')
fileobj.seek(7)
pos = fileobj.tell()
print('We are at character #%u.' % pos)
また、指定した通話中にファイル内容から任意の長さを読み取ることもできます。これを行うには、 read()
引数を渡します。引数なしでread()
を呼び出すと、ファイルの終わりまで読み込みます。引数を渡すと、モードに応じてそのバイト数または文字数が読み込まれます(それぞれrb
およびr
)。
# reads the next 4 characters
# starting at the current position
next4 = fileobj.read(4)
# what we got?
print(next4) # 'cucu'
# where we are now?
pos = fileobj.tell()
print('We are at %u.' % pos) # We are at 11, as we was at 7, and read 4 chars.
fileobj.close()
文字とバイトの違いを示すには:
with open('shoppinglist.txt', 'r') as fileobj:
print(type(fileobj.read())) # <class 'str'>
with open('shoppinglist.txt', 'rb') as fileobj:
print(type(fileobj.read())) # <class 'bytes'>