2015-12-20 5 views
-1

новый для python и поиск некоторой помощи по проблеме, которую я имею с os.walk. У меня был прочный взгляд и я не могу найти правильное решение моей проблемы.Os.walk - WindowsError: [Ошибка 123] Неверное имя файла, имя каталога или тома:

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

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

WindowsError: [Ошибка 123] Имя файла, имени папки или синтаксис метки тома неверен: ' E: \ 03. Work \ Bre \ Files \ folder2 \ icons greyscale flatten \ ._ 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!" 

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

+0

Параметр '' не является [допустимым символом для файла Windows] (https: //? MSDN .microsoft.com/EN-US/библиотека/окна/настольные/aa365247 (v = vs.85) .aspx); поэтому я подозреваю, что проблема в том, что там есть и другой фактический персонаж. Что такое имя файла при его открытии в проводнике Windows? –

+0

Спасибо за ответ @Burhan Khalid. Любые идеи о том, как я получаю os.walk, чтобы игнорировать их? Этот код, вероятно, будет использоваться на множестве беспорядочных hd с смесями незаконных символов. – fergdid

+0

Сначала попробуйте открыть папку в проводнике Windows и посмотреть, что такое фактическое имя файла. –

ответ

0

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

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

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

Как отмечалось в Convert python filenames to unicode иногда вы получите байтовой строки, если путь «undecodable» на Python 2.