由Python在字符串中插入不需要的斜杠引起的Python FileNotFound错误

问题描述 投票:0回答:1

我正在尝试将Matplotlib中的图形保存到驱动器上的文件夹位置,并且我从文件路径中得到了一些有害的行为。

这是我设置为使用实际字符串类型运行以处理“ \”转义字符的内容。

save_path = r"\\nemesis\Network Planning\Team Members\Taylor\2020_04_23 - COVID Impact 
Adjustment\Test Stores\State and Region Growth - " +str(Store_ID)+ ".jpg"
print(save_path)
plt.savefig(save_path)

打印语句显示正确的文件路径字符串

但是,当我运行savefig python时,似乎会在字符串中的每个现有斜杠旁边添加一个额外的斜杠,并给出FileNotFound错误。以下是完整的错误记录。

FileNotFoundError:[Errno 2]没有这样的文件或目录:'\\\\ nemesis \\ Network Planning \\ Team Members \\ Taylor \\ 2020_04_23-COVID Impact Adjustment \\ Test Stores \\ State and Region Growth-17062 .jpg'

由于发生这种情况的原因,我感到茫然,尝试了许多不同的字符串方法,但似乎都没有用。

非常感谢您的帮助

python string matplotlib filepath file-not-found
1个回答
0
投票

要回答您的问题,我需要解释一些有关原始字符串的背景。原始字符串只是在普通字符串中包含反斜杠的一种简便方法,而无需转义它们。例如,使用普通字符串语法定义要打印为“ a \ b \ c”的字符串,则需要编写my_string = "a\\b\\c",而使用原始字符串,则只需要编写r“ a \ b \ c” ,但两种情况下产生的字符串相等:

s = r"a\b\c"
s2 = "a\\b\\c"
s == s2 # Evaluates to True

打印字符串时,print()排除了使用常规语法重新创建字符串所需的额外反斜杠:

print(s) # -> a\b\c

要查看适合重新创建的字符串的表示形式,请使用repr(s)

print(repr(s)) # -> "a\\b\\c"

现在您的问题。使用print()时,生成的原始字符串可能看起来像您想要的字符串,因为它排除了多余的斜杠,但不是您想要的。一方面,我不认为您打算在路径的开头加上两个反斜线。

save_path = r"\\nemesis\Network Planning\..."
print(save_path) # Prints the correct path, save the extra leading backslash
print(repr(save_path)) # Reveals the normal string representation, which requires 4 backslashes to create (where there should be only two).

解决此问题很简单:以不同的方式表示文件路径。使用普通字符串并手动转义所有反斜杠:"\\nemesis\\Network Planning\\Team Members\\Taylor\\2020_04_23 - COVID Impact Adjustment\\Test Stores\\State and Region Growth - " +str(Store_ID)+ ".jpg"或仅使用os.path.join("\\nemesis", "Network Planning", "Team Members", "Taylor", "2020_04_23 - COVID Impact Adjustment", "Test Stores", "State and Region Growth - "+ str(Store_ID)+ ".jpg")自动将目录与所有适当的反斜杠连接在一起(由于在Linux上,所以我无法测试第二个反斜杠)

希望这有所帮助!

© www.soinside.com 2019 - 2024. All rights reserved.