コンテンツにスキップ

Python基礎その7(ファイル操作)

この章のキーワード

  • テキストファイル
  • 拡張子
  • 拡張子が表示されてない場合
  • メモ帳(windows)
  • テキストエディット(Mac)
  • open関数
  • 読み取りモード
  • for line in file:
  • closeメソッド
  • 改行コード
  • rstripメソッド
  • end=""
  • 書き込みモード
  • writeメソッド
  • “\n”
  • 特殊文字
  • 追記モード

1.テキストファイル

ファイルと拡張子

エクスプローラ(Macの場合はファインダ)を立ち上げると、パソコンの中にどんなファイルがあるかを見ることができます。

Untitled

ファイル名の.(ドット)以下の部分、たとえばbear.pngだったらpngの部分は 拡張子(かくちょうし) と呼び、ファイルの種類を表します。このフォルダに見えているるように、pngとjpgは画像ファイルです。

index.htmlのhtmlはWebブラウザの書類であることを示しています。マニュアル.txtのtxtは テキストファイル であることを示しています。テキストファイルは、文字だけのファイルのことです。テキストファイルには文字の大きさや色は保存できず、とてもシンプルなファイルです。シンプルなのでプログラムから扱いやすいという特徴があります。

テキストファイルを作ってみよう

まずは、手作業でテキストファイルを作ってみましょう。

Windowsの場合

スタートメニューから「メモ帳」を起動してこのように文字を打ち込んでください。(windows10では、「メモ帳」はスタートメニューの「windowsアクセサリ」のフォルダの中にあります。)打ち込んだら、Pythonのプログラムを保存するのと同じ場所に abc.txt として保存してください。

Untitled

Macの場合

Launchpadなどから「テキストエディット」を起動してこのように文字を打ち込みます。打ち込む前に、 「フォーマット」メニューから[標準テキスト] を選んでください。これをしないとテキストファイルになりません。打ち込んだらPythonのプログラムを保存するのと同じ場所に abc.txt として保存してください。

スクリーンショット 2022-04-28 17.16.15.png

2.ファイルを読み込もう

さきほどのabc.txtと同じ場所にfileread.pyというプログラムを作りましょう。

file = open("abc.txt","r")
for line in file:
print(line)
file.close()

実行するとこのように表示されます。abc.txtの中身が表示されています。エラーが出た場合は、fileread.pyと同じ場所にabc.txtがあるかどうかを確認してください。

Untitled

※それぞれの行の間に空行が入って表示されるいることに注目してください。

解説

ファイルを開く

open 関数でabc.txtファイルを開いて変数 file に入れます。2番めの引数 "r" は、”read”の略で、「読み取りモード」を意味します。ここでは、abc.txtをプログラムから扱えるようにしただけでまだデータにアクセスしていません。

file = open("abc.txt","r")

1行ずつ読み込む

for line in file: では、fileの1行が変数lineに入ります。行数ぶんだけ繰り返されます。毎回printされるのでファイルのすべてのデータが出力されます。

for line in file:
print(line)

ファイルを閉じる

ファイルを開いたあとは、必ず閉じる必要があります。ファイルを開いているときは、他のソフトからはそのファイルを開くことができない状態にあります。そのためにファイルの操作が終わったら必ず閉じるようにします。closeは、英語で「閉じる」という意味です。

file.close()

(参考)その他の読み込み方

ファイルからデータを読み込む方法は、 for line in file: 以外にもあります。

  • ファイル全体を読み込む: readメソッド
file = open("abc.txt","r")
all = file.read()
print(all)
file.close()
#abcde
#fghij
#klmno
#
  • ファイル全体を行単位で分割してリストとして取得する: readlinesメソッド
file = open("abc.txt","r")
lines = file.readlines()
print(lines)
file.close()
#['abcde\n', 'fghij\n', 'klmno\n']
  • ファイルから1行だけ読み込む: readlineメソッド
file = open("abc.txt","r")
line = file.readline()
print(line)
file.close()
#abcde
#

3.改行を取り除こう

さきほどのプログラムを改善してみます。もとのテキストファイルでは、それぞれの行は間隔はありませんでした。なのに、表示されたものはabcdeとfghijの間、fghijとklmnoの間に空行が入っています。これは、print関数が自動で最後に行う改行と、もともとのテキストファイルの行末に入っている改行とがダブってしまうからです。 for line in file: でテキストファイルから取ってきた文字列 line には、目には見えませんが、一番後ろに 改行コード と呼ばれるものがくっついています。

**ファイル"abc.txt"の中身のイメージ**
abcde■ ←目には見えないけど、各行末には改行コードがある。
fghij■
klmno■

そのままprintすると、printの自動改行とダブってしまいます。(下記はイメージ)

Untitled

このようなコードにすると空行が出ずに表示されます。

file = open("abc.txt","r")
for line in file:
print(line.rstrip())
file.close()

Untitled

解説

行末の改行コードを取り除く

文字列のメソッド .rstrip() を実行すると、文字列の右側の改行コードや空白文字を取り除くことができます。rstripは、”r”ight(ライト、右側)とstrip(ストリップ、取り除く)をあわせた名前です。

print(line.rstrip())

4.ファイルへ書き込もう

ファイルへ文字を書き込むには以下のようにします。

file = open("abc2.txt","w")
file.write("abcde")
file.close()

これを実行すると、abc2.txtという次のようなファイルが作られます。

Untitled

解説

書き込みモードでファイルを開く

今回は、 open 関数の第2引数が "w" になっています。これは、write(ライト)の略で、「書き込みモード」を意味しています。

file = open("abc2.txt","w")

文字列を書き込む

ファイルのメソッド write で文字を書き込むことができます。

file.write("abcde")

ファイルを閉じるのを忘れない!

今回もファイルを閉じるのを忘れないようにしましょう。

file.close()

5.改行コードを書き込もう

テキストファイルにプログラムから改行コードを書き込みたいときは、このようにします。

file = open("abc3.txt","w")
file.write("abcde")
file.write("\n")
file.write("fghij")
file.write("\n")
file.write("klmno")
file.close()

これを実行して作られたabc2.txtには改行が入っています。

Untitled

解説

特殊文字を使う

改行コードは、 "\n" という書き方で表すことができます。 \ はバックスラッシュと読みます。バックスラッシュは、他の文字につけた文字の性質を変えることができます。

Windowsでは、キーボードの「¥」を押すことで入力できます。Macの場合はOptionキーを押しながら「¥」を押します。

\n のnはnewlineの略です。「新しい行にする」というような意味です。

file.write("\n")

主な特殊文字

特殊文字は他にも次のようなものがあります。特殊文字の書き方はPythonなどの言語によらずほとんど同じなのでおぼえておくと役に立ちます。

特殊文字意味
\n改行文字
\tタブ文字
\\\そのもの
\"”そのもの

やってみよう1

下記の文字列をファイルに書き込んでください。

"\n" means return

6.ファイルに追記しよう

「書き込みモード」で同じファイルに書き込むと、もとの内容が消されて新しく書いた内容でデータが上書きされます。もとの内容を消さずに追加して書き込むには、このようにします。

file = open("abc4.txt","a")
file.write("abcde")
file.write("\n")
file.close()

このプログラムを何度も実行すると、abc4.txtにはどんどんabcedが増えていきます。

Untitled

解説

追記モードでファイルを開く

open 関数の第2引数が "a" になっています。これは、append(アペンド)の略で、「追記モード」を意味しています。

file = open("abc4.txt","a")