114

Pythonでは、特定のファイル/ディレクトリがシンボリックリンクであるかどうかをチェックする関数はありますか?たとえば、以下のファイルの場合、ラッパー関数はを返す必要がありTrueます。

# ls -l
total 0
lrwxrwxrwx 1 root root 8 2012-06-16 18:58 dir -> ../temp/
lrwxrwxrwx 1 root root 6 2012-06-16 18:55 link -> ../log
4

3 に答える 3

165

ディレクトリエントリがシンボリックリンクであるかどうかを判断するには、次を使用します。

os.path.islink(path)

パスがシンボリックリンクであるディレクトリエントリを参照している場合はTrueを返します。シンボリックリンクがサポートされていない場合は常にFalse。

たとえば、次のようになります。

drwxr-xr-x   2 root root  4096 2011-11-10 08:14 bin/
drwxrwxrwx   1 root root    57 2011-07-10 05:11 initrd.img -> boot/initrd.img-2..

>>> import os.path
>>> os.path.islink('initrd.img')
True
>>> os.path.islink('bin')
False
于 2012-06-17T02:08:25.707 に答える
19

Python 3.4 以降では、Path クラスを使用できます。

from pathlib import Path


# rpd is a symbolic link
>>> Path('rdp').is_symlink()
True
>>> Path('README').is_symlink()
False

is_symlink() メソッドを使用するときは注意が必要です。名前付きオブジェクトがシンボリックリンクである限り、リンクのターゲットが存在しなくても True を返します。例 (Linux/Unix):

ln -s ../nonexistentfile flnk

次に、現在のディレクトリでpythonを起動します

>>> from pathlib import Path
>>> Path('flnk').is_symlink()
True
>>> Path('flnk').exists()
False

プログラマーは、自分が本当に望んでいるものを決定する必要があります。Python 3 では、多くのクラスの名前が変更されたようです。Path クラスのマニュアル ページを読む価値があるかもしれません: https://docs.python.org/3/library/pathlib.html

于 2016-09-04T04:39:00.080 に答える