Path.stem 与 Path.name 的区别
在 src/idevice/device/ios3/device.py 缓存已安装 App 信息时,用到了 package_path.stem 和 package_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 会连产品名一起存进去,未必是"纯版本号",取决于上游文件命名约定。
Path.stem 与 Path.name 的区别
核心区别
/tmp/MyApp.ipa).nameMyApp.ipa.stemMyApp更多示例
注意事项
Path("app.tar.gz").stem得到的是app.tar,而不是app。Path("README").name和.stem都是README。代码中的用法
version=package_path.stem:把去掉扩展名的文件名当作版本号(例如WeChat-8.0.49)。path=package_path.name:把带扩展名的完整文件名当作 path(例如WeChat-8.0.49.ipa)。