Python在字符串中插入不需要的斜杠导致Python FileNotFound错误

2024-06-01 00:04:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将图形从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)

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

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

FileNotFoundError:[Errno 2]没有这样的文件或目录:'\\\nemesis\\Network Planning\\Team Members\\Taylor\\2020\u 04\u 23-新冠疫情影响调整\\测试商店\\州和地区增长-17062.jpg'

我对发生这种情况的原因感到困惑,并且尝试了一系列不同的字符串方法,但似乎都没有奏效

非常感谢您的帮助


Tags: 文件path字符串路径savenetworkteamjpg
1条回答
网友
1楼 · 发布于 2024-06-01 00:04:34

为了回答你的问题,我需要解释一些原始字符串的背景知识。原始字符串只是在普通字符串中包含反斜杠的一种更简单的方法,而无需转义它们。例如,使用普通字符串语法定义将打印为“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上)

希望这有帮助

相关问题 更多 >