Skip to content

[Python][pathlib]Path.stem 与 Path.name 的区别 #58

Description

@nzcv

Path.stem 与 Path.name 的区别

src/idevice/device/ios3/device.py 缓存已安装 App 信息时,用到了 package_path.stempackage_path.name,二者都是 pathlib.Path 的属性,区别在于是否带扩展名。

核心区别

属性 含义 示例(/tmp/MyApp.ipa
.name 完整文件名,包含最后的扩展名 MyApp.ipa
.stem 文件名,去掉最后一个扩展名 MyApp

更多示例

from pathlib import Path

p = Path("/data/pkgs/WeChat-8.0.49.ipa")
p.name    # 'WeChat-8.0.49.ipa'   完整文件名
p.stem    # 'WeChat-8.0.49'       去掉 .ipa
p.suffix  # '.ipa'                只有扩展名
p.parent  # PosixPath('/data/pkgs')

注意事项

  • 只去掉最后一个后缀Path("app.tar.gz").stem 得到的是 app.tar,而不是 app
  • 没有扩展名时两者相同Path("README").name.stem 都是 README

代码中的用法

self._app_cache.add(
    app_id, version=package_path.stem, path=package_path.name
)
  • version=package_path.stem:把去掉扩展名的文件名当作版本号(例如 WeChat-8.0.49)。
  • path=package_path.name:把带扩展名的完整文件名当作 path(例如 WeChat-8.0.49.ipa)。

提醒:用 stem 作为 version 会把整个文件名(去后缀)当版本,如果文件名里还带产品名,version 会连产品名一起存进去,未必是"纯版本号",取决于上游文件命名约定。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions