fsパッケージのpathまわりの関数の話の続き
前回の続き。
path_home(), path_home_r()
path_expand()
やpath_expand_r()
が~
を展開したファイルパスを返してくれましたが、これは引数無しならホームディレクトリを、引数があればその階層構造を示したファイルパスを絶対パスで返します。
path_home("aaa", "bbb", "ccc") #> C:/Users/niszet/aaa/bbb/ccc
path_home_r("aaa", "bbb", "ccc") #> C:/Users/niszet/Documents/aaa/bbb/ccc
path_join()
与えられた文字列を"/"で結合してパスを返してくれます。与える文字列はc()
でベクトルとして渡す必要がある。
path_join(c("aaa/bbb", "ccc", "ddd")) #> aaa/bbb/ccc/ddd
path_norm()
連続した/
と末尾の/
を取り除き、や.
や..
を解釈してスッキリしたファイルパスをfs_path
オブジェクトとして返してくれる。連続した/
はpath()
でも削除してくれる。
path_norm("hoge/..//.///fuga/") #> fuga path("hoge/..//.///fuga/") #> hoge/.././fuga
path_package()
インストールしたパッケージのファイルパスを返してくれる。
path_package("base") #> C:/PROGRA~1/R/R-35~1.1/library/base
path_real()
シンボリックリンクがある場合、それのリンク先(実体の方)のパスを返してくれる
## a/ ディレクトリを作成 #> dir_create("a") ## aの下にbというファイルを作成 #> file_create("a/b") ## cという名前でaに対してシンボリックリンクを作成 #> link_create(path_abs("a"), "c") ## cの下のb path("c/b") #> c/b # path_realでシンボリックリンクのリンク先のパスが返ってくる path_real("c/b") #> C:/Users/niszet/Documents/r work/test4blog/a/b
path_rel()
相対パスを返す。どこからの相対パスにするかはstart
引数で制御。デフォルトはカレントディレクトリ(.
)
fs::path_rel(path = "C:/hoge", start = ".") #> ../../../../../hoge
path_sanitize()
WindowsやLinux上で問題になりそうな文字列を削除してくれる。動きは下記のページに書かれている"Details"を読むと良さそう。 www.npmjs.com
ただ、/
も消されるのはそういう動きで良いのだろうか…?本家?もその動きだから良いのかな。
path_sanitize("a/../b") #> [1] "a..b"
path_split()
与えられたパスを"/"で分離する。戻り値はリストになる。
path_split(c("aaa/bbb/ccc", "ddd/eee/fff")) [[1]] [1] "aaa" "bbb" "ccc" [[2]] [1] "ddd" "eee" "fff"
path_temp()
一時ディレクトリを作成する。file_temp()
で一時ファイルを作るとこのdirの下にできるようだ。中間ファイルとかで作業dirを汚したくない時などに使いやすそうですね。
path_temp() #> C:/Users/niszet/AppData/Local/Temp/RtmpWexlCk ## 実際に存在することを確認 file_exists("C:/Users/niszet/AppData/Local/Temp/RtmpWexlCk") #> C:/Users/niszet/AppData/Local/Temp/RtmpWexlCk #> TRUE ## path_temp("hoge") #> C:/Users/niszet/AppData/Local/Temp/RtmpWexlCk/hoge
path_tidy()
untidyなパスの表記をtidyにしてくれる。階層の区切り文字は"/"で、末尾には"/"がつかない。path_real()
やpath_norm()
のような処理はせずに、tidyなpath表記にしてくれるだけ。
path_tidy("aaa\\bbb///ccc/../../") #> aaa/bbb/ccc/../..
ということで、一応これでpath_**
の関数たちを列挙できました。
Enjoy!!