Pythonでカレントディレクトリを取得してファイルを保存するパスを指定する時の注意点

Pythonでの些細なミスに時間を取られて悩む男性プログラミング

2日連続でプログラミング関連の記事になります。まあネタ切れ気味なのでしょうがないね。

プログラミング言語Pythonを勉強している時に半日くらい詰まってしまった事があったのでメモ代わりに書いておきます。

Pythonで新規作成したエクセルファイルを保存するプログラムを組んでみた。

Pythonにてエクセルファイルを新規作成して保存してみたいと思い、自分なりに色々調べながら作業を進めていました。

とりあえずやっているうちに、ディレクトリをフルパスで指定することで、エクセルの新規作成と保存には成功しました。

Python:カレントディレクトリのパス取得方法1

Python:カレントディレクトリのパス取得方法2

フルパス指定でのエクセルファイルの新規作成と保存には成功しました。

で、次に僕がやろうとしたことは、カレントディレクトリを自動取得してファイルを保存するといった事です。

カレントディレクトリとは

カレントディレクトリの説明をWikiから引用したので下に載せておきます。

カレントディレクトリ(英語: current directory、現行ディレクトリ)とは、コンピューティングの分野で、階層型ファイルシステムを使用している場合に、そのプロセスが現在関連付けられている(現在の位置である)ディレクトリのことである。Windowsでは作業フォルダとも呼ばれることがある。また、ワーキングディレクトリとも。

引用元:Wikipedia

結構分かりにくいので簡単に説明すると、

カレントディレクトリ = 現在作業しているディレクトリ

のことです(ごめんなさい。これでも分かりにくいかもしれないですね。)

本記事の場合でしたら、僕が今回組んでいるtest.pyというプログラムファイルは

C:\Users\ユーザー名\Desktop\Python学習\カレントディレクトリ

の中(赤文字で示した階層)に置かれています。

Python:カレントディレクトリのパス取得方法3

今回組んだプログラムを走らせると、エクセルファイルを新規作成し、test.pyというプログラムファイルが置かれている場所と同じ所(カレントディレクトリ)に保存するようにしています。

カレントディレクトリ = 今あなたが組んでいるプログラムファイルの置かれている場所

ということになりますね。

カレントディレクトリは自動取得できる

C:\Users\ユーザー名\Desktop\Python学習\カレントディレクトリ\test.xlsx

といったような感じで、手打ちでフルパスを指定することで問題なくエクセルファイルを保存することに成功しました。

しかし、いちいち上記のようなパスを毎回手打ちで指定するのは面倒です。

そこで、今組んでいるプログラムファイルの存在するディレクトリ(カレントディレクトリ)を自動で取得する方法がPythonにはちゃんとあるので、その方法を使うことにしました。

スポンサーリンク

Pythonにおけるカレントディレクトリの取得方法

osモジュールをインポートし、os.getcwd()関数を用いることで、カレントディレクトリを取得することができます。

具体的には以下のような感じです。

Python:カレントディレクトリのパス取得方法4

cdという変数は、Current Directoryの頭文字から取って、勝手に僕が作った入れ物だと思って下さい。

このcdという変数の中に、os.getcwd()関数を実行した結果が格納されます。

それでは試しにcdの中身が本当にカレントディレクトリのパスなのか調べてみます。

調べるにはprint()関数を使えば簡単にできます。

Python:カレントディレクトリのパス取得方法5

このプログラムを実行すると次のような結果が返ってきます。

Python:カレントディレクトリのパス取得方法6

C:\Users\ユーザー名\Desktop\Python学習\カレントディレクトリ

と表示されていますね。

あとはこの文字列に『\test.xlsx』を繋げたものをwb.save()関数に放り込めば、いちいち手打ちでフルパスを指定しなくても保存できるようになるはずです。

カレントディレクトリを取得してエクセルファイルを保存するプログラムを組むも、うまくいかない

次のようなプログラムを組んで早速実行してみました。

Python:カレントディレクトリのパス取得方法7

そして実行結果が以下。

Python:カレントディレクトリのパス取得方法8

あれぇえ???

何故か言うことを聞いてくれません。

エラー名としてInvalid argumentと表記されていたので調べてみると、どうやら『無効な引数』という事らしい・・・。

ここから原因を特定するために半日を費やし、ようやく理由が判明しました。

本当にしょうもないミスだったのです(笑)

カレントディレクトリを取得してファイルを保存するパスを指定する際の注意点

先程の画像をもう一度よく見てみましょう。

Python:カレントディレクトリのパス取得方法8

分かりにくいので該当箇所を拡大してみましょう。

Python:カレントディレクトリのパス取得方法9

そうです。\マークが一つ足りていなかったのです(笑)

なので早速、次のようにプログラムを修正しました。

Python:カレントディレクトリのパス取得方法10

これで実行してみた結果、うまくいきました。めでたしめでたし。

まとめ

Pythonでは、ファイルパスを指定する時、ディレクトリ間移動の表記として\マークを二連続で入力しないといけません。

理由についてはまだ勉強不足なので説明できませんが、おそらく初心者がよくやる間違いだと思うので、今回記事にしてみました。

『こんなくだらない間違いごときで記事にするな!』って声が聞こえてきそうですが、僕の場合は本当にこれで半日悩んでしまったので、許してください~・・。

とりあえず、こういった単純な間違いさえ無くなれば、ファイルを保存する時だけでなく、ファイルを読み込む時も問題なくできるようになるはずです。

コメント