ゼロからの業務効率化ノート

30代未経験から始まったノーコード&Pythonチャレンジ

Python初心者必読!フォルダとファイルのパス指定の落とし穴と解決法


ぬこ将軍です🐈
Pythonを知り色々ライブラリを使い始めて約1年。業務でもPythonのプログラムを利用する機会が多くなり、Pythonを使う楽しさが増すと同時に、なぜかデータサイエンティストに興味を持ち資格を取ってみようかなとか思っている今日この頃です。


今回は「Pythonでのパス指定に関する注意点」について書こうかと思います。
自分が以前書いたファイル結合をしたりファイル内の情報を出力する時など、パスの指定は頻繁に発生すると思います。
そんな時、Pythonを始めたばかりの方はこの記事に書いていることを知らないと少しつまづくかもしれません。

  • Pythonの勉強を始めたばかりで、何か役に立ちそうなプログラムを作ってみたい!

そんな方々の参考になりましたら幸いです。



Pythonでパス指定する際にハマりがちな落とし穴

最初にパス取得法について。
Windowsの場合ですが、フォルダパスの場合は以下の画像のようにクリック&コピーな感じだと思います。

一方、ファイルパスの場合は任意のファイル選択後にマウス右クリックorエクスプローラー上部のメニューから「パスをコピー」を選ぶと思います。

そしてコピーをしたら、Pythonのコード入力画面に貼り付けて変数に代入という流れです。

お気づきの方も居ると思いますが、実は上の画像は良くない例です。自分も始めたばかりの時はコピーしてそのまま変数に代入していましたが、これではパスを読み取ってくれません。

この落とし穴の原因は、パスに含まれる【¥】あるいは【\(バックスラッシュ)】です。実はこいつらが意外な意味を持っているのです。

Pythonにおける¥あるいは\(バックスラッシュ)の意味

これ以降は便宜上、¥で話を進めます。

フォルダやファイルのパスをコピーしてどこかに貼り付けると出てくる¥あるいは\ですが、実は単なる文字列ではなく「エスケープシーケンス(エスケープ文字)」という役割を持っています。
エスケープシーケンスは、プログラム上で特殊な手段を実行するために使われています。例えば¥nは改行、¥tはタブ挿入の役割があります。

こういった背景から、パスに含まれる「¥」をそのまま入力するとエスケープシーケンスの扱いになってしまうのです

Pythonでパス指定する際のラクな解決方法

そんな感じでちょっとややこしい¥ですが、エスケープシーケンスを回避するラクな方法があります。
それは「パスを表す文字列の前にrを足す」です。コードで表すと以下の画像です。

つまり、”~”という文字列の前にrを足してr"~"とすることで、¥をエスケープシーケンスではなくただの文字列¥として扱ってくれるということです。

ちなみにこのようなrはraw文字列(raw strings, r-strings)というそうです。

パスを指定する際に別の変数を含むなどの理由で分離する必要がある場合は、分離した箇所ごとでr文字列にすればOKです。

Pythonでパス指定する際の落とし穴と解決法まとめ

今回の内容をまとめると以下の通りです。

  1. Pythonでフォルダやファイルのパスを変数にそのまま代入してはいけない。
  2. ¥はエスケープシーケンスであり、ただの文字列ではない。
  3. Pythonでフォルダやファイルのパスを変数に代入する時は、文字列の先頭にrをつける。

Pythonで業務効率化プログラムを作る場合は、パスを利用する場面が多々あると思います。
そんな時に「ちゃんとパスを入力しているのにうまく動かない・・・」ということを回避するために、今回の内容を頭に入れていただければと思います!

パスを使って、Pythonでファイルを結合する方法

nukoshogun.hatenablog.com

nukoshogun.hatenablog.com

nukoshogun.hatenablog.com