2016-10-13 2 views
0

У меня есть более 5000 XML-файлов в нескольких подкаталогах с именами f1, f2, f3, f4, ... Каждая папка содержит более 200 файлов. На данный момент я хочу извлечь все файлы с помощью BeautifulSoup только так, как я уже пробовал lxml, elemetTree и minidom, но изо всех сил стараюсь сделать это через BeautifulSoup.parse xml файлы в подкаталогах с помощью beautifulsoup в python

Я могу извлечь отдельный файл в подкаталог, но не смог получить все файлы через BeautifulSoup.

Я проверил следующие сообщения:

XML parsing in Python using BeautifulSoup (Extract Single File)

Parsing all XML files in directory and all subdirectories (Это minidom)

Reading 1000s of XML documents with BeautifulSoup (Не удалось получить файлы через этот пост)

Вот код, который я написал для извлечения одного файла:

from bs4 import BeautifulSoup 

file = BeautifulSoup(open('./Folder/SubFolder1/file1.XML'),'lxml-xml') 

print(file.prettify()) 

Когда я пытаюсь получить все файлы во всех папках Я использую следующий код:

from bs4 import BeautifulSoup 

file = BeautifulSoup('//Folder/*/*.XML','lxml-xml') 

print(file.prettify()) 

Тогда я только получаю XML версии и ничего больше. Я знаю, что мне нужно использовать цикл for, и я не уверен, как его использовать, чтобы разобрать все файлы через цикл.

Я знаю, что это будет очень медленно, но для обучения я хочу использовать beautifulsoup для анализа всех файлов, или если цикл не рекомендуется, то будем благодарны, если я смогу получить лучшее решение, но только только в красивыхsoup.

С уважением,

ответ

1

Если я понял вас правильно, то вам нужно перебрать файлы, как вы уже думали:

from bs4 import BeautifulSoup 
from pathlib import Path 

for filepath in Path('./Folder').glob('*/*.XML'): 
    with filepath.open() as f: 
     soup = BeautifulSoup(f,'lxml-xml') 
    print(soup.prettify()) 

pathlib только один подход к обработке путей, на более высокий уровень с использованием объектов. Вы можете достичь того же значения с glob и строковыми дорожками.

0

Используйте glob.glob найти XML-документы:

import glob 

from bs4 import BeautifulSoup 

for filename in glob.glob('//Folder/*/*.XML'): 
    content = BeautifulSoup(filename, 'lxml-xml') 
    print(content.prettify()) 

примечание: не затенять встроенную функцию/класс file.

Читать BeautifulSoup Quick Start

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