Python入門トップページ


目次

  1. コマンドラインでの実行時に書き出す
  2. プログラム内でのファイルの入出力
    1. ファイルに出力する
    2. ファイルに追記する
    3. ファイルを読み込む
    4. ファイルを読み込んで文字列として変数に格納する
    5. ファイルから数値を読み込む
    6. ファイルから数値を読み込みリストに格納する
  3. OSの違いを吸収するディレクトリ指定方法
    1. Windowsでディレクトリを指定してみる
    2. Mac (Linux) でディレクトリを指定してみる
    3. OS モジュールを使う
    4. OS の違いを吸収できるファイルの開き方
  4. JSONファイルの読み込みと書き出し

ファイルの読み書きをしてみよう

OSの違いを吸収するディレクトリ指定方法

プログラム本体の保存場所と同じ階層に「data」という名前のディレクトリ(フォルダ)を作成し,「data.txt」を準備します.ここで注意すべきことは Window 環境ではディレクトリの区切りに「\(バックスラッシュ,日本語環境では円マーク)」,Mac や Linux では「/(スラッシュ)」が使われているということです.ディレクトリとファイル名を指定してファイルを開くときに,OSによってディレクトリの区切り文字が異なるので,その違いを吸収できる書き方を考えよう.

データファイル (data.txt)
1 2 3

Windowsでディレクトリを指定してみる

Windows 環境ではディレクトリの区切りに「\」が使われる.この「\」自体を文字として扱うためには「\\」のように記述する必要があります.よって,次のようにディレクトリとファイル名を指定すると良いでしょう.

ファイルを開く
f = open('data\\data.txt', 'r')
msg = f.readline()
f.close()
print(msg)
1 2 3

しかしながら,「\」だけや,Mac (Linux) の区切り文字「/」でも正しく動作します.

ファイルを開く
f = open('data\data.txt', 'r')
msg = f.readline()
f.close()
print(msg)
1 2 3
ファイルを開く
f = open('data/data.txt', 'r')
msg = f.readline()
f.close()
print(msg)
1 2 3

目次に戻る

Mac (Linux) でディレクトリを指定してみる

Mac や Linux ではディレクトリの区切り文字に「/」が用いられるので,Windows で動作した「\\」や「\」ではエラーになる

ファイルを開く
f = open('data\\data.txt', 'r')
msg = f.readline()
f.close()
print(msg)
FileNotFoundError
ファイルを開く
f = open('data\data.txt', 'r')
msg = f.readline()
f.close()
print(msg)
FileNotFoundError

Mac や Linux では「/」で動作します.

ファイルを開く
f = open('data/data.txt', 'r')
msg = f.readline()
f.close()
print(msg)
1 2 3

目次に戻る

OS モジュールを使う

Python の標準モジュール os モジュールを使うと OS の違いを吸収できるようになります.まずプログラムの先頭でモジュールを読み込んでおきます.

モジュールを読み込む
import os

現在のディレクトリ(フォルダ)を取得してみよう.これには os.getcwd (GET Current Working Directory) を利用すると良いでしょう.

現在のディレクトリを取得 (Win)
cwd = os.getcwd()
print(cwd)
C:\Users\lecture\Documents\python

上の例はWindows で実行した場合の結果です.Mac で実行すると次のようになります.

現在のディレクトリを取得 (Mac)
cwd = os.getcwd()
print(cwd)
/Users/rinsaka/Documents/python/

次は OS で使われるディレクトリの区切り文字を取得します.

ディレクトリの区切り文字を取得する (Win)
print(os.path.sep)
\
ディレクトリの区切り文字を取得する (Mac)
print(os.path.sep)
/

指定した文字列の join メソッドを使うと,引数に与えた文字列のリストを指定した文字列を区切り文字として連結できます.したがって,「現在のディレクトリ」「サブディレクトリ名」「ファイル名」からなるリストを引数に渡すことで,OSの違いを吸収したファイルのパスを生成できます.

ファイルパスを生成 (Win)
file_path = os.path.sep.join([cwd, 'data', 'data.txt'])
print(file_path)
C:\Users\lecture\Documents\python\data\data.txt
ファイルパスを生成 (Mac)
file_path = os.path.sep.join([cwd, 'data', 'data.txt'])
print(file_path)
/Users/rinsaka/Documents/python/data/data.txt

上のような方法で記述すれば,Windows でも Mac でも動作します.

目次に戻る

OS の違いを吸収できるファイルの開き方

上の方法を使って,「data」ディレクトリに保存された「data.txt」を絶対パス指定で開いてみよう.この方法を使えば,Windows でも Mac でも正しくファイルを開くことができます.

絶対パス指定でファイルを開く
import os # モジュールのインポート
cwd = os.getcwd() # 現在のディレクトリ
dir = 'data' # ファイルが保存されたディレクトリ名
file = 'data.txt' # 開きたいファイル名
file_path = os.path.sep.join([cwd, dir, file]) # ファイルまでの絶対パスを生成
f = open(file_path) # ファイルを開く
msg = f.readline() # ファイルを読み込む
f.close() # ファイルを閉じる
print(msg) # ファイルの内容を画面に表示
1 2 3

相対パス指定で開くこともできるはずです.この場合は現在のディレクトリを取得する必要はありません.

相対パス指定でファイルを開く
import os # モジュールのインポート
dir = 'data' # ファイルが保存されたディレクトリ名
file = 'data.txt' # 開きたいファイル名
file_path = os.path.sep.join([dir, file]) # ファイルまでの相対パスを生成
f = open(file_path) # ファイルを開く
msg = f.readline() # ファイルを読み込む
f.close() # ファイルを閉じる
print(msg) # ファイルの内容を画面に表示
1 2 3

目次に戻る