2013-04-21 2 views
1

Простой код:питон: os.walk электронного диска не работает

import os 

filenamelist = [] 
#path = "E:\blah\blah\blah" 
path = "C:\Program Files\Console2" 
for files in os.walk(path): 
    filenamelist.append(files) 
    print files 

указанных работ. Но когда я устанавливаю путь = "E: \ blah \ blah \ blah", скрипт запускается, но ничего не возвращает.

1) C:\Users\guest>python "read files.py" 

('C:\\Program Files\\Console2', [], ['console.chm', 'Console.exe', 'console.xml', 'ConsoleHook.dll', 'FreeImage.dll', 'FreeImagePlus.dll']) 

2) C:\Users\guest>python "read files.py" 

C:\Users\guest> 

Любая идея, почему os.walk() испытывает трудности с E: \? Я не могу заставить его читать что-либо на E :. У меня есть внешний диск, сопоставленный с диском E.

+0

хорошо вопрос. btw on linux вся файловая система идет с os.walk ('/'), но в окнах я могу ходить только по одному диску за раз (C: \, D: \ etc) – Johnny

+0

Если ваш путь E: \ blah \ blah \ blah, вам нужно избегать обратной косой черты перед B. Даже если это не так, это хорошая практика, чтобы убежать от них в любом случае. –

+0

Я знаю, что вы дали «E: \ blah \ blah \ blah» в качестве вашего примера, но, возможно, некоторые специальные символы в реальном пути вызывают проблемы. Можете ли вы перечислить реальный путь? –

ответ

4

Это может быть связано с тем, что python обрабатывает \ как escape-символ, и у вас есть комбинация, которая действительно является символом escape для пути E: disk.

Это может быть решена одним из следующих способов:

  1. Сырые строковые литералы: r"E:\blah\blah\blah" (обратные слеши не рассматриваются в качестве эвакуационных символов).
  2. Двойная обратная косая черта: "E:\\blah\\blah\\blah" (символы эвакуации убегают сами по себе).
  3. Slashes "E:/blah/blah/blah" (это работает и на Windows).
+0

Спасибо, Алексей! Это сработало. :) – codingknob