この章のキーワード
- テキストファイル
- 拡張子
- 拡張子が表示されてない場合
- メモ帳(windows)
- テキストエディット(Mac)
- open関数
- 読み取りモード
- for line in file:
- closeメソッド
- 改行コード
- rstripメソッド
- end=""
- 書き込みモード
- writeメソッド
- “\n”
- 特殊文字
- 追記モード
この章のキーワード
エクスプローラ(Macの場合はファインダ)を立ち上げると、パソコンの中にどんなファイルがあるかを見ることができます。
ファイル名の.(ドット)以下の部分、たとえばbear.pngだったらpngの部分は 拡張子(かくちょうし) と呼び、ファイルの種類を表します。このフォルダに見えているるように、pngとjpgは画像ファイルです。
index.htmlのhtmlはWebブラウザの書類であることを示しています。マニュアル.txtのtxtは テキストファイル であることを示しています。テキストファイルは、文字だけのファイルのことです。テキストファイルには文字の大きさや色は保存できず、とてもシンプルなファイルです。シンプルなのでプログラムから扱いやすいという特徴があります。
まずは、手作業でテキストファイルを作ってみましょう。
スタートメニューから「メモ帳」を起動してこのように文字を打ち込んでください。(windows10では、「メモ帳」はスタートメニューの「windowsアクセサリ」のフォルダの中にあります。)打ち込んだら、Pythonのプログラムを保存するのと同じ場所に abc.txt として保存してください。
Launchpadなどから「テキストエディット」を起動してこのように文字を打ち込みます。打ち込む前に、 「フォーマット」メニューから[標準テキスト] を選んでください。これをしないとテキストファイルになりません。打ち込んだらPythonのプログラムを保存するのと同じ場所に abc.txt として保存してください。
さきほどのabc.txtと同じ場所にfileread.pyというプログラムを作りましょう。
file = open("abc.txt","r")for line in file: print(line)file.close()
実行するとこのように表示されます。abc.txtの中身が表示されています。エラーが出た場合は、fileread.pyと同じ場所にabc.txtがあるかどうかを確認してください。
※それぞれの行の間に空行が入って表示されるいることに注目してください。
open
関数でabc.txtファイルを開いて変数 file
に入れます。2番めの引数 "r"
は、”read”の略で、「読み取りモード」を意味します。ここでは、abc.txtをプログラムから扱えるようにしただけでまだデータにアクセスしていません。
file = open("abc.txt","r")
for line in file:
では、fileの1行が変数lineに入ります。行数ぶんだけ繰り返されます。毎回printされるのでファイルのすべてのデータが出力されます。
for line in file: print(line)
ファイルを開いたあとは、必ず閉じる必要があります。ファイルを開いているときは、他のソフトからはそのファイルを開くことができない状態にあります。そのためにファイルの操作が終わったら必ず閉じるようにします。closeは、英語で「閉じる」という意味です。
file.close()
ファイルからデータを読み込む方法は、 for line in file:
以外にもあります。
file = open("abc.txt","r")all = file.read()print(all)file.close()
#abcde#fghij#klmno#
file = open("abc.txt","r")lines = file.readlines()print(lines)file.close()
#['abcde\n', 'fghij\n', 'klmno\n']
file = open("abc.txt","r")line = file.readline()print(line)file.close()
#abcde#
さきほどのプログラムを改善してみます。もとのテキストファイルでは、それぞれの行は間隔はありませんでした。なのに、表示されたものはabcdeとfghijの間、fghijとklmnoの間に空行が入っています。これは、print関数が自動で最後に行う改行と、もともとのテキストファイルの行末に入っている改行とがダブってしまうからです。 for line in file:
でテキストファイルから取ってきた文字列 line
には、目には見えませんが、一番後ろに 改行コード と呼ばれるものがくっついています。
**ファイル"abc.txt"の中身のイメージ**abcde■ ←目には見えないけど、各行末には改行コードがある。fghij■klmno■
そのままprintすると、printの自動改行とダブってしまいます。(下記はイメージ)
このようなコードにすると空行が出ずに表示されます。
file = open("abc.txt","r")for line in file: print(line.rstrip())file.close()
文字列のメソッド .rstrip()
を実行すると、文字列の右側の改行コードや空白文字を取り除くことができます。rstripは、”r”ight(ライト、右側)とstrip(ストリップ、取り除く)をあわせた名前です。
print(line.rstrip())
ファイルへ文字を書き込むには以下のようにします。
file = open("abc2.txt","w")file.write("abcde")file.close()
これを実行すると、abc2.txtという次のようなファイルが作られます。
今回は、 open
関数の第2引数が "w"
になっています。これは、write(ライト)の略で、「書き込みモード」を意味しています。
file = open("abc2.txt","w")
ファイルのメソッド write
で文字を書き込むことができます。
file.write("abcde")
今回もファイルを閉じるのを忘れないようにしましょう。
file.close()
テキストファイルにプログラムから改行コードを書き込みたいときは、このようにします。
file = open("abc3.txt","w")file.write("abcde")file.write("\n")file.write("fghij")file.write("\n")file.write("klmno")file.close()
これを実行して作られたabc2.txtには改行が入っています。
改行コードは、 "\n"
という書き方で表すことができます。 \
はバックスラッシュと読みます。バックスラッシュは、他の文字につけた文字の性質を変えることができます。
Windowsでは、キーボードの「¥」を押すことで入力できます。Macの場合はOptionキーを押しながら「¥」を押します。
\n
のnはnewlineの略です。「新しい行にする」というような意味です。
file.write("\n")
特殊文字は他にも次のようなものがあります。特殊文字の書き方はPythonなどの言語によらずほとんど同じなのでおぼえておくと役に立ちます。
特殊文字 | 意味 |
---|---|
\n | 改行文字 |
\t | タブ文字 |
\\ | \そのもの |
\" | ”そのもの |
下記の文字列をファイルに書き込んでください。
"\n" means return
「書き込みモード」で同じファイルに書き込むと、もとの内容が消されて新しく書いた内容でデータが上書きされます。もとの内容を消さずに追加して書き込むには、このようにします。
file = open("abc4.txt","a")file.write("abcde")file.write("\n")file.close()
このプログラムを何度も実行すると、abc4.txtにはどんどんabcedが増えていきます。
open
関数の第2引数が "a"
になっています。これは、append(アペンド)の略で、「追記モード」を意味しています。
file = open("abc4.txt","a")