2016-10-13 19 views
0

f1、f2、f3、f4という名前の複数のサブディレクトリに5000を超えるXMLファイルがあります。 各フォルダには200を超えるファイルが含まれています。現時点では、私はlxml、elemetTree、minidomを既に試しているのに、BeautifulSoupを使ってすべてのファイルを抽出したいのですが、BeautifulSoupを使って取得するのは苦労しています。pythonでbeautifulsoupを使用してサブディレクトリ内のxmlファイルを解析する

私はサブディレクトリで単一のファイルを抽出できますが、BeautifulSoupですべてのファイルを取得することはできません。

私は以下の記事をチェックしています

XML parsing in Python using BeautifulSoup

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を使用したい、またはforループが推奨されない場合は、美しいだけで。

よろしく、XML文書を検索する

答えて

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

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

関連する問題