2016-09-12 3 views
0

Только что нашел ошибку в немного кода, который я писал, который на самом деле не прослушивал?os.walk работает с неэкранированной обратной косой чертой?

for folderName, subfolders, filenames in os.walk('C:\FOLDER'): 
print('The current folder is ' + folderName) 
for subfolder in subfolders: 
    print('SUBFOLDER OF ' + folderName + ': ' + subfolder) 
for filename in filenames: 
    print('FILE INSIDE ' + folderName + ': '+ filename) 

и

for folderName, subfolders, filenames in os.walk('C:\\FOLDER'): 
print('The current folder is ' + folderName) 
for subfolder in subfolders: 
    print('SUBFOLDER OF ' + folderName + ': ' + subfolder) 
for filename in filenames: 
    print('FILE INSIDE ' + folderName + ': '+ filename) 

оба работают в оболочке и полный код работает нормально? Разве этот первый не должен быть заполнен, потому что он кормит его «C: OLDER»?

ответ

5

Python игнорирует непризнанные escape-последовательности и оставляет исходную обратную косую черту и букву на месте.

\F не является допустимым последовательность символов, поэтому ваша строка содержит буквального \ бэкслеша буквальным F:

>>> 'C:\FOLDER' 
'C:\\FOLDER' 
+0

Примечание: Опираясь на это плохая идея. Используйте необработанные строки для литералов Window path, например. 'r'C: \ FOLDER'', поэтому он не затухает, когда кто-то решает сделать имя папки в нижнем регистре, и вдруг вы пытаетесь открыть папку с именем' C: старше. В конце концов, они могут, наконец, осудить эту ужасную «особенность» (см. [Ошибка Python # 27364] (https://bugs.python.org/issue27364)), и, опять же, используя необработанные строки, вы могли бы избежать проблем с устареванием. – ShadowRanger

Смежные вопросы