python规范化路径在for循环中重置

时间:2010-02-03 05:16:05

标签: python string

我试图在Windows上获得规范化路径。路径存储在一个列表中,我循环遍历这些路径:

>>> lst = ['C:\\', 'C:\\Windows', 'C:\\Program Files']
>>> lst
['C:\\', 'C:\\Windows', 'C:\\Program Files']
>>> for pth in lst:
...    print pth
...
C:\
C:\Windows
C:\Program Files

请注意,它已从输出C:\中删除了一个反斜杠,应为C:\。

即使我在循环中规范化路径,输出也不会改变:

>>> import os
>>> for pth in lst:
...     print os.path.normpath(pth)
...
C:\
C:\Windows
C:\Program Files

有人可以建议修复吗?感谢

更新

似乎关于原始字符串的建议是处理此问题的更好方法。但是如何在for循环中将字符串指定为原始字符串。例如:

for pth in lst:
    raw_str = rpth

显然上述方法不起作用。我该如何实现这一目标? r'path / to / file'?

6 个答案:

答案 0 :(得分:3)

双斜杠只是字符串转义 - 你需要在字符串文字中转义斜杠。在循环之前打印lst[0]将打印它而不使用斜杠。如果要在文字中包含双斜杠,请使用原始字符串语法:

>>> lst = ['C:\\', 'C:\\Windows', 'C:\\Program Files']
>>> lst[0]
'C:\\'
>>> print lst[0]
C:\
>>> lst2 = [r'C:\\', r'C:\\Windows', r'C:\\Program Files']
>>> lst2[0]
'C:\\\\'
>>> print lst2[0]
C:\\

编辑:如果您希望将斜杠加倍,则可以执行简单的字符串替换:

>>> x = 'C:\\Windows'
>>> print x
C:\Windows
>>> x = x.replace('\\', '\\\\')
>>> print x
C:\\Windows

答案 1 :(得分:2)

在Python中,当你说

>>> s = 'C:\\'

s包含三个字符:C:\。这可以通过以下方式轻松看出:

>>> len(s)
3

在Python中,与许多其他语言一样,反斜杠用于转义某些字符。例如,换行符为\n,值为0的字符为\x00,等等。“实际”反斜杠为\\。因此,要实际获得两个反斜杠,您需要同时转义两个,给出:

>>> s = 'C:\\\\'

但是,Windows非常满意/作为分隔符,因此您可以这样做:

>>> s = 'C:/'

答案 2 :(得分:0)

\\是一个转义序列,它输出\作为输出。如果要打印C:\\,则必须使用C:\\\\作为输入字符串(或使用原始字符串...)。我不明白为什么你会这么想。虽然如果您特别想要,但有不同的选择。

答案 3 :(得分:0)

你需要\\吗?你可以使用print repr(pth)

答案 4 :(得分:0)

如果可能,请尝试使用os.path.join()创建Windows路径。你不必那么多地插入斜杠。

例如

from os.path import join
rootdir="C:\\"
path1 = join(rootdir,"windows")
path2 = join(rootdir,"Program Files")
lst = [ rootdir , path1, path2 ]

答案 5 :(得分:0)

在Windows上使用/表示完整性(大多数程序都使用两种形式的斜杠),但如果不这样做,则在处理反斜杠路径名时使用r''。

r'C:\My\Windows\Path'

如果你真的想要双反斜杠,那么它也适用:

r'C:\\My\\Escaped\\Path'