Python Чтение большого количества файлов в каталоге и обработка, быстрый способ? - PullRequest
1 голос
/ 14 марта 2019

У меня есть около 5000+ XML-файлов в каталоге a .Я планирую читать их один за другим и анализировать их, однако я не уверен, что os.listdir (путь) является хорошим способом,

import xml.etree.ElementTree as ET  
import os

list_files = os.listir(os.curdir)
for files in list_files:
   tree = ET.parse(files)
   root = tree.getroot()

os.listdir (путь) возвращает список с именамифайлы внутри этого каталога.После этого цикл for, который принимает строковые имена файлов и передает их объекту класса Parser, может оказаться не очень хорошим способом, так как синтаксический анализатор снова выполнит поиск файлов, во второй раз, с их именами в том же каталоге.

Есть ли лучший способ?Я что-то упустил, может быть, логика указателя для поиска внутри каталога?

РЕДАКТИРОВАТЬ: Я думаю, что этот вопрос не по теме и должен быть удален, так как парсер не ищет имя строки внутриdir, другими словами, я считаю, что операционная система обрабатывает его сзади.Как вы можете, как следующие строки внутри ET объекта Parser, он напрямую открывает

def parse(self, source, parser=None):
    close_source = False
    if not hasattr(source, "read"):
        source = open(source, "rb")
        close_source = True

Ответы [ 2 ]

0 голосов
/ 14 марта 2019

Вы можете предпринять некоторые шаги для чтения файлов XML:

Шаг 1: Разобрать весь текущий XML-файл каталога в списке

import xml.etree.ElementTree as ET  
import os
items = os.listdir(".")

xmllist = []
for names in items:
    if names.endswith(".xml"):
        xmllist.append(names)
print(xmllist)

Шаг 2:

Теперь хочу прочитать файлы xmllist

for files in xmllist:
    tree = ET.parse(files)
    root = tree.getroot()
    print(root)

[Примечание: если у вас есть еще вопросы, оставьте комментарии]

0 голосов
/ 14 марта 2019

Пожалуйста, проверьте это python3.5: https://docs.python.org/3/library/os.html#os.scandir python2: https://pypi.org/project/scandir/

try:
    from os import scandir, walk
except ImportError:
    from scandir import scandir, walk


def subdirs(path):
    for entry in scandir(path):
        if entry.name.endswith('.xml') and  entry.is_file(): // change your restriction
            yield entry.name



for i in subdirs('/tmp'):
    print i # you get file name here, 
    //ET.parse(i)
...