нормализованный путь Python сбрасывается в цикле for - PullRequest
0 голосов
/ 03 февраля 2010

Я пытаюсь получить нормализованный путь в 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 ]

3 голосов
/ 03 февраля 2010

Двойная косая черта - это просто экранирование строки - вам нужно экранировать косую черту в строковых литералах.Печать 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
2 голосов
/ 03 февраля 2010

В Python, когда вы говорите

>>> s = 'C:\\'

s содержит три символа: C, : и \. Это легко увидеть по:

>>> len(s)
3

В Python, как и во многих других языках, обратная косая черта используется для экранирования определенных символов. Например, символ новой строки - \n, символ со значением 0 - \x00 и т. Д. «Реальный» обратный слеш - \\. Итак, чтобы получить два обратных слеша, вам нужно убежать от обоих, выдав:

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

Но Windows вполне довольна / в качестве разделителя, поэтому вы можете сделать:

>>> s = 'C:/'
0 голосов
/ 03 февраля 2010

Используйте / для проверки работоспособности в Windows (большинство программ работают с обеими формами слешей), но если это не удается, используйте r '' всякий раз, когда вы имеете дело с именами путей с обратной косой чертой.

r'C:\My\Windows\Path'

Если вы действительно хотитедвойная обратная косая черта, тогда это тоже работает:

r'C:\\My\\Escaped\\Path'
0 голосов
/ 03 февраля 2010

Если возможно, попробуйте использовать os.path.join () для создания вашего пути к Windows. Тебе не нужно так много вмешиваться в дела.

например

from os.path import join
rootdir="C:\\"
path1 = join(rootdir,"windows")
path2 = join(rootdir,"Program Files")
lst = [ rootdir , path1, path2 ]
0 голосов
/ 03 февраля 2010

тебе нужно \\? Вы можете использовать print repr(pth)

0 голосов
/ 03 февраля 2010

\\ является escape-последовательностью, которая печатает \ в качестве вывода. Если вы хотите напечатать C:\\, вам придется использовать C:\\\\ в качестве входной строки (или использовать необработанные строки ...). Я не понимаю, почему ты этого хочешь. Хотя, если вы особенно хотите, есть разные варианты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...