如何在Python中保存文件名包含斜杠的文件?

7

我正在遍历一个元组中的一系列名称,并且希望在每个循环期间使用元组数据作为文件名保存输出。然而这些名称中有斜杠。

layers = ['conv1/7x7_s2','pool1/3x3_s2']
for idx,layer in enumerate(layers):
    result=deepdream(net, img, end=layer)
    imag = PIL.Image.fromarray(result,'RGB')
    imag.save('files/'+str(layer)+'.png')

结果包含一个numpy数组 imag是图片 layer是我想要的文件名

然而,斜线被解释为目录分隔符 有没有办法将图像保存为 conv1/7x7_s2.png

或者我应该将斜杠转换为破折号?


据我了解,有一些字符专门用于操作系统,不能用于文件名。其中斜杠就是其中之一。我建议将其更改为破折号或其他字符。 - Hojo.Timberwolf
1
如果您在Windows中尝试保存带有正斜杠名称的文件,则无法完成。请查看此链接:https://learn.microsoft.com/en-gb/windows/desktop/FileIO/naming-a-file。 - Arkistarvh Kltzuonstev
3个回答

5

是的,有一些复杂的方法可以保留“斜杠”,但它们可能不值得(例如使用Unicode除法斜杠)。

layers = ['conv1/7x7_s2','pool1/3x3_s2']
for idx, layer in enumerate(layers):
    print(layer.replace('/', '_'))
    # or maybe this might work?
    # print(layer.replace('/', u"\u2215"))

1
抱歉,我应该表述得更清楚 - 我正在使用Linux。但是,是的,我正在尝试在文件名中“模拟”斜杠字符,因此我可能会使用一个对人类看起来像斜杠但实际上不是的Unicode字符。感谢Eric提供的想法。 - aquagremlin
1
除非目标是混淆用户(这可能是),通常不建议使用看起来像另一个字符的字符 - 这只会导致用户输入出现意外结果。例如,如果您有一个名为 files/docs(带有“伪”斜杠)的文件夹,并且有人运行 rm -f files/docs/*,期望删除该文件夹中的文件,则实际上会删除 files 文件夹中 docs 文件夹中的所有文件。 - Grismar
是的,我完全同意。我想我应该详细说明一下为什么做这样的事情“可能不值得”。 - eric

4

这些字符都不能在文件名中使用(至少不在Windows文件系统上):\/:*?"<>|,它们都有特定的替代含义。

同时,也没有转义字符或其他方法可以绕过此限制 - 您只需要省略或替换文件名中的这些字符即可。


0

由于目录结构已经定义,因此您不能这样做。因为Linux系统会将/解析为目录树的组成部分。您应该将斜杠更改为破折号或下划线。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接