2013-06-20 4 views
1

Я использую следующий код для открытия файлов из каталога.os.walk не дает правильного пути

for root, dirs, files in os.walk("./Boards"): 
#Eliminate hidden files 
files=[f for f in files if not f.startswith('.')] 
for f, file in enumerate(files): 
    print "ROOT: " + str(root) 
    fileName=os.path.join(root,file) 
    print fileName 

При запуске этого я получаю эту ошибку

ROOT: ./Boards/AbuseSupport 
./Boards/AbuseSupport/thread_title_11151.xml 
ROOT: <Element 'board' at 0x1048ae450> 

Может кто-нибудь объяснить, как это происходит, и как я могу это исправить

+0

Какая ошибка? – Ber

+0

Фактическая ошибка, я получаю 'Traceback (самый последний вызов последнего): Файл "parseXML.py", строка 13, в FileName = os.path.join (корень, файл) File«/ System/Библиотека/Рамки/Python.framework/Версии/2.7/lib/python2.7/posixpath.py ", строка 68, в соединении elif path == '' или path.endswith ('/'): AttributeError: 'Element 'объект не имеет атрибута' endswith'' , который, как я знаю, вызван тем фактом, что я возвращаю элемент, но я не знаю, почему я получаю элемент или действительно почему корень меняется вообще – drowningincode

+1

Я чувствую, что нам не хватает важной части кода. Кроме того, вы могли бы исправить отступы? –

ответ

1

Я думаю, что проблема в том, что вы повторное использование переменная root, когда вы идете по каталогу и анализируете XML одновременно. После того, как вы проанализировали один файл XML, переменная root стала корневым элементом дерева синтаксического анализа, но в следующей итерации цикла вы все равно используете переменную root в качестве имени каталога.

+0

СПАСИБО! Я никогда не думал, чтобы посмотреть, как я разбирал свой xml. Вы абсолютно правы. Смущение от этой ошибки новобранец – drowningincode

0

Я создал базовую структуру каталогов:

/Boards 
/Boards/a.txt 
/Boards/b.txt 
/.ssh 

Я использовал следующий код:

import os 

for root, dirs, files in os.walk("./Boards"): 
    #Eliminate hidden files 
    files=[f for f in files if not f.startswith('.')] 
    for f, file in enumerate(files): 
     print "ROOT: " + str(root) 
     fileName=os.path.join(root,file) 
     print fileName 

И я получил следующий ответ:

>> ROOT: ./Boards 
>> ./Boards/a.txt 
>> ROOT: ./Boards 
>> ./Boards/b.txt 
>> ROOT: ./Boards 
>> ./Boards/c.txt 

Mac OS 10.8. 3 - Homebrew Python 2.7.3

Я думаю, что вы знаете, что каким-то образом вы назначили root для объекта XML Element. Есть ли другой код, использующий библиотеку XML?

Смежные вопросы