【问题标题】:Python FileNotFound error caused by Python inserting unwanted slashes in stringPython 在字符串中插入不需要的斜杠导致的 Python FileNotFound 错误
【发布时间】:2020-04-23 02:23:12
【问题描述】:

我正在尝试将 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] No such file or directory: '\\\\nemesis\\Network Planning\\Team Members\\Taylor\\2020_04_23 - COVID Impact Adjustment\\Test Stores\\State and Region Growth - 17062.jpg'

我不知道为什么会发生这种情况,并尝试了一堆不同的字符串方法,但似乎都没有奏效。

非常感谢任何帮助

【问题讨论】:

  • 打印(repr(save_path))。那些斜线实际上是存在的,但是 print() 隐藏了它们。
  • 啊,我明白了。你知道为什么 Python 会在原始字符串中添加额外的斜杠吗?
  • 由于我不经常使用原始字符串,因此我必须事先进行一些研究。答案待定。

标签: python string matplotlib filepath file-not-found


【解决方案1】:

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

希望这有帮助!

【讨论】:

  • 非常感谢您的回复。
  • 它到底在做什么?
  • save_path = os.path.join("N:\\","Team Members","Taylor","2020_04_23 - COVID Impact Adjustment","Test Stores\\") print(repr (save_path)) 'N:\\Team Members\\Taylor\\2020_04_23 - COVID 影响调整\\Test Stores\\'
  • 看起来不错。双反斜杠在路径中应该没问题;它们是代表角色的标准方式。我相信您的错误是由于原始字符串中的双反斜杠造成的。
  • 非常有趣。如果我的任何帮助有用,请考虑支持我的回答。很高兴您解决了问题!
猜你喜欢
  • 1970-01-01
  • 2022-08-07
  • 2015-07-28
  • 2013-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-22
  • 1970-01-01
相关资源
最近更新 更多