在python中输入目录作为字符串

时间:2012-01-13 15:29:10

标签: python string

我有一个硬编码到我的程序中的目录列表:

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"变成选项卡或其他解决方案来解决我的问题吗?

2 个答案:

答案 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结尾   单反斜杠(因为反斜杠会逃避以下引用   字符)