階層の区切り記号の使い方は?
概要
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を区切り記号で分けて
それぞれリストの要素にする命令
間違えやすい問題