使用名称中的撇号保存文件(Python 3.4)

时间:2015-07-08 19:52:12

标签: python image apostrophe

尝试批量保存图像文件。很好地工作,但每个文件的名称列表有时包括撇号,一切都停止。

违规脚本是:

    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。

1 个答案:

答案 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”,你可能想尝试一下,看看是否有任何条件适用于你,但显然你并不孤单,如果这是任何安慰。

抱歉,我不能再做了。