python OS path fileの勘所(書き書き中)

pythonはマルチOSドリブンの言語なのだが、os固有の癖に捕まっって膨大な時間を浪費することがある。

時間の浪費で済めばよいが、「プログラムのバグが解決できない」と絶望してプログラミングを挫折した人が世界に数百万人か数千万人はいると思う。

絶対pathで読み書きすれば問題が出にくいが、長ーい固定のpath名をコード中に記述するのはプログラムとしてはダサダサですよね。


「作業フォルダ」と「カレントフォルダ」と「ファイル所在地」を区別して、ファイルの読み書きを行う。

(./filename.csvこれはなんだ?)

Windowsのパス

Windows ではバックスラッシュ (\) でパスを区切るので、Python で Windows のパスを文字列として扱う場合は、raw 文字 r などを使ってバックスラッシュ (\) をエスケープしておきます。


パスを正規化し、同じパスに対していつも同じパス文字列を返すには os.path.normpath() 関数を使います。

カレントディレクトリを取得する

import os
print(os.getcwd())

 os.path.join() に複数の文字列を渡すと、実行中の OS の区切り文字を使ってパスを組み立てます。

 ファイル名やフォルダ名のリストを作って os.path.join() に渡すこともできます。その場合は引数の先頭にアスタリスク (*) を付けます。


こちら様から丸パクリ(あとで直します)

ファイルの読み込み

ファイルへの書き込み

ファイルへの追記

読み書き両方

 mode の + オプションは “w”, “r”, “a” と組合わせて、ファイルを読み書き両方できる状態で開きます。次のコードでは、mode = “a+” でファイルを開いて内容を表示した後で、末尾に “\nJupyter Notebook” を書き込みます。そして再度 pnyote.txt を開いて内容を確認しておきます。

日本語の読み書き

 ファイルに書き込む文字列に日本語などの非アスキー文字が含まれていると、環境によっては変換がうまくいかずに文字化けすることがあります。open() の encoding で変換方式 (エンコード) を指定しておいたほうが安全です。現在最も広く使われている変換方式は utf-8 です。

 非アスキー文字を含むファイルを開く場合も、encoding で変換方式を指定しておきます。

with構文

ファイルを自動的に閉じる

with open(ファイルパス, モード) as 変数名:
   コード


ファイルオブジェクトのメソッド一覧

F.read()

 F.read() はファイルの内容をすべて読み込んで文字列として返します。

F.readline()

F.readline() はファイルを一行読み込んで文字列として返します。

 引数に整数を渡すと、読み込む文字列のバイトサイズを指定できます。アルファベットは 1 文字 1 バイトなので、以下のコードで “NumPy” という 5 文字を取り出すことができます。

F.readlines()

 F.readlines() はファイルをすべて読み込んで行ごとに分割してリストで返します。

F.write()

 F.write() はファイルに指定した文字列を書き込みます。

F.writelines()

 F.writelines() は受け取ったイテラブルオブジェクト (リストやタプルなど) の要素を連結してファイルに書き込みます。

F.close()

 開いた状態のファイルオブジェクトに対して F.colse() を用いると、ファイルを閉じます。