2016-10-20 3 views
0

Я использую python, с Anaconda на PyCharm IDE (Windows 10) и используя виртуальную среду. Это мой код в вопросе,Python os.listdir() ведет себя странно, нужно некоторое объяснение

print('# File...') 
print(os.listdir("../MyData/Data/")) 

Когда я запускаю код в консоли (щелкните правой кнопкой мыши, а затем «Выполнить раздел в консоли») он отлично работает. Тем не менее, когда я запускаю весь код (от зеленой кнопки), он говорит: FileNotFoundError: [WinError 3] Система не может найти указанный путь: '../MyData/Data/'

Может кто-нибудь объяснить, почему это происходит и возможное направление? Спасибо.

+1

Звучит как '../ MyData/Data' не существует. Убедитесь, что вы находитесь в папке, которую вы считаете с помощью 'os.getcwd()'. – kichik

+1

используйте полный путь вместо up.'full/path/here' вместо '../ partial/path'. –

+1

Может быть проще указать расположение данных относительно скрипта ... 'os.listdir (os.path.join (os.path.basename (__ file__), os.pardir, 'MyData', 'Data')) ' – mgilson

ответ

0

Будьте осторожны, Windows обычно имеет "\" по адресу. Это очень просто, но может быть большой проблемой. С "\" используется как побег, вам нужно будет использовать "\\". Попробуйте этот тест и увидеть его адрес является правильным:

import os 
print(os.getcwd()) 

Это будет печатать текущую рабочую директорию

+2

API Windows с самого начала времени мог использовать символы '/' и '\' в именах путей взаимозаменяемо. –

+0

Спасибо.Как я уже упоминал выше, это помогло мне сузить дело. –

0

Вы должны использовать полный путь, как показано ниже:

os.listdir ("C:\Users\YourUsername\Full\Path") 
+0

Не будет работать, если YourUsername - это, например, «tom». –

+0

«Том» не сработает, разве это не очевидно? :) Тем не менее, была задействована опция полного пути. Но, мой запрос был, почему это не работает, и то, что я (кто-то) должен знать, чтобы исправить это. –

0

Все программы имеют рабочий каталог решил, какой бы код его не запустил. Когда вы щелкните правой кнопкой мыши и запустите консоль, консоль, как часть процесса инициализации, специально настроит текущий рабочий каталог в ваш домашний каталог. Когда вы запускаете в gui, что происходит, зависит от оконного менеджера, который запускает программу. Я думаю, Microsoft Windows любит устанавливать CWD в каталог исполняемого файла, но я не уверен.

Способ исправления заключается в том, чтобы вручную установить текущий каталог при запуске программы.

import os 
os.chdir(os.path.expanduser('~')) 

Вы можете сделать это в шкафах gui и консоли. После выполнения этого кода относительные пути будут относиться к вашему домашнему каталогу.