Os.walk — WindowsError: [Ошибка 123] Неверный синтаксис имени файла, имени каталога или метки тома:

новичок в python и ищу помощь в решении проблемы с os.walk. Я внимательно осмотрелся и не могу найти правильное решение моей проблемы.

Что делает код: сканирует выбранный пользователем жесткий диск или папку и возвращает все имена файлов, подкаталоги и размер. Затем это обрабатывается в пандах (не в коде ниже) и экспортируется в электронную таблицу Excel в желаемом форматировании.

Однако в первой части кода в Python 2.7 я в настоящее время испытываю следующую ошибку:

Ошибка Windows: [Ошибка 123] Неверный синтаксис имени файла, имени каталога или метки тома: «E:\03. Work\Bre\Files\folder2\значки в оттенках серого сглаживаются\._Icon_18?10 Stainless Steel.psd'

Я исследовал использование необработанной строки (r'), но безрезультатно. Возможно я неправильно пишу.

Замечу, что я никогда не получаю этого в 3.5 или на чисто помеченных выбранных папках. Из-за проблем Pandas и pysinstaller с 3.5, я надеюсь придерживаться 2.7, пока ошибка с 3.5 не будет устранена.

import pandas as pd
import xlsxwriter
import os
from io import StringIO

#Lists for Pandas Dataframes   

fpath = []
fname = []
fext = []
sizec = []

# START #Select file directory to scan

filed = raw_input("\nSelect a directory to scan: ")    

#Scan the Hard-Drive and add to lists for Pandas DataFrames

print "\nGetting details..."
for root, dirs, files in os.walk(filed):
  for filename in files:
      f = os.path.abspath(root) #File path
      fpath.append(f) 
      fname.append(filename) #File name
      s = os.path.splitext(filename)[1] #File extension
      s = str(s)
      fext.append(s)
      p = os.path.join(root, filename) #File size
      si = os.stat(p).st_size
      sizec.append(si)
print "\nDone!"

Любая помощь будет принята с благодарностью :)


person fergdid    schedule 20.12.2015    source источник
comment
? не является допустимым символом. для имени файла Windows; поэтому я подозреваю, что проблема в том, что там есть какой-то другой реальный персонаж. Как называется файл, когда вы открываете его в проводнике Windows?   -  person Burhan Khalid    schedule 20.12.2015
comment
Спасибо за ответ @Burhan Khalid. Любые идеи о том, как заставить os.walk игнорировать их? Этот код, вероятно, будет использоваться на большом количестве грязных HD-файлов со смесью недопустимых символов.   -  person fergdid    schedule 20.12.2015
comment
Во-первых, попробуйте открыть папку в проводнике Windows и посмотреть, каково фактическое имя файла.   -  person Burhan Khalid    schedule 20.12.2015
comment
Этот файл скрыт, и я полагаю, что root его перехватывает, но имя файла ._Icon_1810 Stainless Steel.psd — этот квадрат отображается в виде точки на средней высоте.   -  person fergdid    schedule 20.12.2015
comment
Попробуйте os.walk(unicode(filed)) и посмотрите, получите ли вы такие же результаты.   -  person Burhan Khalid    schedule 20.12.2015
comment
Мужчина! Это бинго... большое спасибо. Я чувствую, что буду использовать это снова и снова. Результат ожидаемый :)   -  person fergdid    schedule 20.12.2015


Ответы (1)


Чтобы просматривать имена файлов с символами Юникода, вам нужно указать os.walk имя пути в Юникоде.

Ваш путь содержит символ Юникода, который отображается как ? в исключении.

Если вы перейдете по пути юникода, например os.walk(unicode(filed)), вы не должны получить это исключение.

Как указано в разделе Преобразование имен файлов python в unicode, иногда вы получите строку байтов, если путь является «недекодируемым» Python 2.

person Burhan Khalid    schedule 20.12.2015