我有一个硬编码到我的程序中的目录列表:
import os
my_dirs = ["C:\a\foo"
,"C:\b\foo"
,"C:\c\foo"
,"C:\t\foo"
]
我后来想要执行像os.path.isfile(my_dirs[3])
这样的操作。但是字符串my_dirs [3]变得搞砸了,因为"\t"
是tab或其他东西的缩写。
我知道解决这个问题的方法是使用它:
my_dirs = ["C:\\a\\foo"
,"C:\\b\\foo"
,"C:\\c\\foo"
,"C:\\t\\foo"
]
另一个解决方案是使用正斜杠。
但我喜欢能够直接从资源管理器复制目录到我的Python代码。有什么方法可以告诉Python不要将"\t"
变成选项卡或其他解决方案来解决我的问题吗?
答案 0 :(得分:8)
使用正斜杠或原始字符串:r'C:\a\foo'
或'C:/a/foo'
实际上,使用正斜杠是更好的解决方案,因为@Wesley提到,你不能让一个原始字符串以一个反斜杠结尾。虽然来自os.path
的函数将在窗口上使用反斜杠,但混合它们不会导致任何问题 - 所以我建议在硬编码路径中使用正斜杠而不关心{{1的函数引入的反斜杠}}
不要忘记硬编码路径本身就是一件坏事。特别是如果您使用系统文件夹(包括“我的文档”和“AppData”),您应该使用WinAPI函数来检索它们,无论它们实际位于何处。
答案 1 :(得分:8)
我建议使用正斜杠或双反斜杠。由ThiefMaster提取的原始字符串可能很棘手;例如,它可以不以反斜杠结尾;所以r'c:\ foo \'是不是有效的原始字符串..请参阅python docs:
r“\”不是有效的字符串文字(即使原始字符串也不能以 奇数个反斜杠)。具体来说,原始字符串不能以a结尾 单反斜杠(因为反斜杠会逃避以下引用 字符)