С кодировками вечно какие-нибудь проблемы. Видимо, питон не справляется с угадыванием кодировки байтовой строки и не может корректно перевести её в кодировку файловой системы Windows.
Но в Python 2 у os.listdir (и некоторых других функций) есть особенность: если передать юникодную строку, то вернётся юникодный результат. При использовании юникода питон справляется с кодированием чего надо в какую надо кодировку, и никаких проблем нет.
Но начнём с того, что символ \ в строках является спецсимволом, и его нельзя ставить просто так. Его нужно экранировать так:
path = 'C:\\Users\\Алекс\\Desktop\\DefendMySystem'
или так:
path = r'C:\Users\Алекс\Desktop\DefendMySystem'
Сейчас path это байтовая строка, а для максимально корректной работы нужна юникодная. Строковый литерал можно сделать юникодым с помощью u'':
# -*- coding: utf-8 -*-
# вот этот ↑ комментарий должен стоять в первой строке файла!
path = u'C:\\Users\\Алекс\\Desktop\\DefendMySystem'
path = ur'C:\Users\Алекс\Desktop\DefendMySystem'
(Естественно, сам файл в таком случае тоже должен быть сохранён в кодировке UTF-8, желательно без BOM.)
Если это не строковый литерал, то можно декодировать байтовую строку в юникодную, если известна кодировка:
path = path.decode('utf-8')
Теперь, когда юникодная строка получена, os.listdir будет работать без проблем:
print(type(path)) # → unicode
files = os.listdir(path) # type: List[unicode]
А вот в Python 3 все строки юникодные, и там подобных проблем в принципе не бывает (кроме совсем уж специфических случаев).
Поддержка Python 2.7 закончится в 2020 году.
path = u'...'попробуйте – andreymal Aug 29 '18 at 09:17# -*- coding: utf-8 -*-в самой первой строчке файла (странно, что такая базовая вещь у вас не стоит) – andreymal Aug 29 '18 at 09:22\Uявляется особенным в питоне, вот на него и ругается, нужно экранировать вторым слэшем – andreymal Aug 29 '18 at 09:32