Python | os.fsdecode 函数
Lasted 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])