階層の区切り記号の使い方は?


概要


windowsでファイルを開く実験をしてみる
このpythonファイルと同じ階層にフォルダ「file」を作り
その中に「メモ.txt」というテキストファイルを作る
openとcloseを使ってこのテキストファイルを開くコードを書く

もし「メモ.txt」というファイルの階層をうまく示していなければエラーになる
つまりエラーになるのは階層の区切り記号の使い方が間違っているということ

このテキストファイルの示し方を数種類示した
以下の##############で区切られた上半分はエラーがなく、
下半分はエラーになったものである


reader = open(r'file\メモ.txt','r')
print(reader.read())
reader.close()

reader = open(r'.\file\メモ.txt','r')
print(reader.read())
reader.close()

reader = open(r'.\\file\\メモ.txt','r')
print(reader.read())
reader.close()

reader = open(r'file/メモ.txt','r')
print(reader.read())
reader.close()

reader = open(r'./file/メモ.txt','r')
print(reader.read())
reader.close()

reader = open(r'.//file//メモ.txt','r')
print(reader.read())
reader.close()

reader = open(r'.\file/メモ.txt','r')
print(reader.read())
reader.close()

reader = open('.\\file\\メモ.txt','r')
print(reader.read())
reader.close()

reader = open('./file/メモ.txt','r')
print(reader.read())
reader.close()

reader = open('.//file//メモ.txt','r')
print(reader.read())
reader.close()

#####################
'''
reader = open(r'.file\メモ.txt','r')
print(reader.read())
reader.close()

reader = open(r'\file\メモ.txt','r')
print(reader.read())
reader.close()

reader = open('.\file\メモ.txt','r')
print(reader.read())
reader.close()
'''



出力


説明


階層の区切り記号についてわかったこと

1.階層の区切り記号はバックスラッシュ(日本のwindowsなら半角の¥)を使うのだが
日本のwindowsパソコン内のファイルやフォルダに関しては通常のスラッシュ「/」でも代替できる

2.現在の階層のファイルを示すのに

file
.\file
./file

は可能だが

.file
\file

は不可能

3.r''にすればスラッシュやバックスラッシュは一つでいいのだが、2つでも大丈夫

r'./file'
r'.//file'
r'.\file'
r'.\\file'

はすべて可能。

4.rをつけない場合、スラッシュだと1つでも可能だが
バックスラッシュは2つないといけない

.\\file\\メモ.txt
./file/メモ.txt
.//file//メモ.txt

は可能だが

.\file\メモ.txt

は不可能。おそらくただのスラッシュはエスケープシーケンスと関係ないため

5.スラッシュとバックスラッシュは混合しても可能

r'.\file/メモ.txt','r'

は可能。

間違えやすい問題


以上はwindowsで試したもので、macではエラーになる
macでは区切り記号にスラッシュしか使えないようである

概要


システムの区切り記号をpythonプログラムで出す方法がある。

import os

した後に

os.sep

でwindowsでもmacでもシステムの区切り記号出せる。


import os

file = r'C:\Windows\System32\calc.exe'

print(os.sep)
print(file.split(os.sep))

osをインポートせよ

変数fileにC:\Windows\System32\calc.exeを入れよ(エスケープシーケンス無効で)

システムの区切り記号を出せ
fileを区切り記号で分割してリストに分けよ

出力


\
['C:', 'Windows', 'System32', 'calc.exe']

説明


区切り記号はwindowsなら¥記号、macなら/が出るはず。

file.split(os.sep)はfileを区切り記号で分けて
それぞれリストの要素にする命令

間違えやすい問題