尝试批量保存图像文件。很好地工作,但每个文件的名称列表有时包括撇号,一切都停止。
违规脚本是:
pic.save(r"C:\Python34\Scripts\{!s}.jpg".format(name))
当我将它们嵌入带有硒的网址时,名字中的撇号不是问题
browser.get("https://website.com/{!s}".format(name))
或当我打印目标文件名时,例如
print(r"C:\Python34\Scripts\{!s}.jpg".format(name))
哪个好像结果
C:\ Python34 \ Scripts ['很好']。jpg
所以我认为这种问题与保存功能有关。
回溯调用PIL \ Image.py中的pic.save代码行,并说OSError:[Errno 22]是保存目标中的无效参数。
如果重要,请使用Windows 7。
可能是超级新手错误,但我一直在阅读线程并且无法解决这个问题 - 解决方法是在使用之前清理撇号列表,这会很烦人但是可以接受。
任何帮助表示感谢。
---编辑将单引号修改为单引号,写这篇文章时输入错误... doh。
答案 0 :(得分:2)
这不是Python问题,而是Windows,或者更确切地说是文件系统,文件命名规则。来自MSDN:
使用当前代码页中的任何字符作为名称,包括扩展字符集(128-255)中的Unicode字符和字符,但以下情况除外:
以下保留字符
< (小于)
> (大于)
:(冒号)
“(双引号)
/(正斜杠)
\(反斜杠)
| (垂直条或管道)
? (问号)
*(星号)
在UNIX类型系统上,/
以外的所有内容都是有效的(尽管大多数都是个坏主意)。另一个“字符”二进制零0x00
在大多数文件系统上无效。
网址规则再次不同。
所以你必须为避免这些字符的文件名写一个杀菌剂。正则表达式可能是最简单的,但您必须选择不会自然发生的替换字符。
编辑:我假设错误22报告的文件名无效,但我错了,它实际上意味着“设备无法识别命令”。
见https://stackoverflow.com/questions/19870570/pil-giving-oserror-errno-22-when-opening-gif。接受的答复虽然很奇怪。
我谷歌“python PIL OSError Errno 22”,你可能想尝试一下,看看是否有任何条件适用于你,但显然你并不孤单,如果这是任何安慰。
抱歉,我不能再做了。