Python | os.fsdecode 函數

最近更新時間 2020-12-05 12:27:02

os.fsdecode 函數將路徑類 filename 從文件系統編碼方式解碼,編碼方式應使用的是 'surrogateescape' 錯誤回調方法,在 Windows 上應使用的是 'strict' 方法。str 字符串則原樣返回。

os.fsencode() 是此函數的逆向函數。

函數定義

os.fsdecode(filename)
# 函數定義
if sys.version_info >= (3, 6):
    def fsdecode(filename: Union[str, bytes, PathLike[Any]]) -> str: ...
else:
    def fsdecode(filename: Union[str, bytes]) -> str: ...

參數

  • checkfilename - 路徑類 filename。

返回值

  • checkstr - 路徑編碼。

示例1: - 使用 os.fsdecode() 函數編碼路徑。

# coding=utf-8

# Python3 代碼
# 使用 os.fsdecode() 函數解碼路徑

# 引入 os 庫
import os

# 文件路徑 bytes 類型
filename = b"/tmp/\xe6\x96\x87\xe4\xbb\xb6.txt"

# 解碼
decode = os.fsdecode(filename)

print("解碼 filename:", decode) 
解碼 filename: /tmp/文件.txt

示例2: - 使用 os.fsdecode() 函數查找 library 庫。

def find_library(name):
    ename = re.escape(name)
    expr = r':-l%s\.\S+ => \S*/(lib%s\.\S+)' % (ename, ename)
    expr = os.fsencode(expr)

    try:
        proc = subprocess.Popen(('/sbin/ldconfig', '-r'),
                                stdout=subprocess.PIPE,
                                stderr=subprocess.DEVNULL)
    except OSError:  # E.g. command not found
        data = b''
    else:
        with proc:
            data = proc.stdout.read()

    res = re.findall(expr, data)
    if not res:
        return _get_soname(_findLib_gcc(name))
    res.sort(key=_num_version)
    return os.fsdecode(res[-1])

rss_feed