Python strip()方法中需要注意的坑

引言

这几天在尝试拆明日方舟的素材包。

就如其他拆过包的dalao们指出的,舟游的大部分素材由两张图片组成:一张是贴图+纹理,另一张是黑白的mask图像。要得到透明背景的人物立绘,就必须使用mask将人物边缘的纹理“覆盖”住。

一张典型的“人物+纹理+mask”的组合

这种程度的单张图像处理当然可以用Photoshop完成,但是角色加上NPC一百多张图,真一张张用Photoshop抠图的话可能就是真爱了吧……

于是想到了使用Python来进行处理。

但是在处理过程中总是遇到一个问题:PIL因为找不到文件频繁报错。但是我的文件列表就是通过listdir得到的啊?

combine_list_char.append(file.rstrip('.png'))
...
image = path + '\' + charname + '.png'
...
Image.open(image)
(部分代码如上)

后来我发现了好像有哪里不对:如果文件名(不包含扩展名)的尾部字符中含有p、n、g,那么在rstrip的过程中也会被一并删除。

我……?

查找原因

Python官方文档当中对于strip的解释中有一句话:

……实际上 chars 参数并非指定单个前缀或后缀;而是会移除参数值的所有组合。

换句话说,如果我使用strip方式删除png字符,同时npg、pgn、……也会被同时删除。

但是strip只能有一个chars参数,不能指定删除唯一的某种组合。

那咋办?只能不用了呗。

使用.replace()避雷

.replace()方法有一个好处,就是参数组合是指定的。那么可以通过将需要删除的字符串替换为空来达到删除的效果。

修改完成后的结果:

...
combine_list_char.append(file.replace('.png',''))
...

其他内容不变。

再次测试,.replace()方法可以达到预期的效果。

好了,本期的”我还活着“系列就到这里,大家下个月再见咕。

0

Mark

站点管理员。Linux技能跟没有一样。基础AE/PR/PS/LR/AU。不会编程。日本語を勉強しています。

有什么想法说出来听听?

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

微信扫一扫,分享到朋友圈

返回顶部

显示

忘记密码?

显示

显示

获取验证码

Close