将单反斜杠转换为双反斜杠

时间:2015-02-13 21:37:58

标签: python string python-2.7 backslash

我有一个包含目录的列表:("..\b\c.txt", "..\b\d.txt")。 我打算使用.split()方法来另外列出由"\"分隔的目录组件列表,但由于"\"的使用,我没有取得成功。因此,最终结果将是这样的("a", "b, "c.txt") ...

我确实理解\是一个转义字符和this link报告的困难,但我不明白是否可以将整个列表转换为原始字符串。有人可以帮忙吗?

files = ('..\..\data\User\level1\level2\sun.png','..\..\data\User\level1\level2\description.txt')

我正在测试这样的事情:

str = files[0].split("\")

所需输出:包含以下内容的列表:

('data', 'User', 'level1', 'level2', 'sun.jpg')

2 个答案:

答案 0 :(得分:3)

如果files是文字,请使用原始文字符号然后

files = (
    r'..\..\data\User\level1\level2\sun.png',
    r'..\..\data\User\level1\level2\description.txt'
)

在这个具体的例子中,你设法逃避了所有已知的角色转义序列,但这很幸运。

您可以使用"\\"来定义只有反斜杠的字符串:

files[0].split("\\")

演示:

>>> files = (
...     r'..\..\data\User\level1\level2\sun.png',
...     r'..\..\data\User\level1\level2\description.txt'
... )
>>> files[0].split("\\")
['..', '..', 'data', 'User', 'level1', 'level2', 'sun.png']

如果您想将路径拆分为多个部分,您可能应该查看os.path.split()以及该模块中的其他功能。使用这些函数有助于保持代码平台不可知。

还有os.sepos.altsep,这也有助于保持代码与操作系统无关。

答案 1 :(得分:2)

事实证明,你还没有将\理解为逃避角色。转义字符不是实际字符串中的额外字符,它们是源代码中的额外字符。

要在Python中创建包含一个\字符的字符串,可以使用\作为转义字符,如下所示:

"\\"

源代码中的引号之间有2个字符,但在实际字符串中,只有"转义字符",这是第二个{{1} }。

请注意"原始字符串"类似:不同之处在于源代码中的 ,而不是实际的字符串。以下是相同的:

\

当我对这样的事情产生怀疑时,我会在翻译的互动模式中发挥作用,我建议你也这样做。例如,如果您不确定"abc\\def" r"abc\def" 这样的字符串的真实内容是什么,那么您可以尝试"abc\\def" - 。