Доступ к текстовому файлу в подпапке - PullRequest
0 голосов
/ 06 июня 2018

Структура файла
У меня есть папка с именем test_folder , в которой есть несколько подпапок (названных разными фруктами, как вы увидите в моем коде ниже) внутри,В каждой подпапке всегда есть файл metadump.xml , из которого я извлекаю информацию.

Текущая позиция
Мне удалось добиться этого наиндивидуальный базис, где я указываю путь к подпапке.

import re

in_file = open("C:/.../Downloads/test_folder/apple/metadump.xml")
contents = in_file.read()
in_file.close()

title = re.search('<dc:title rsfieldtitle="Title" 
rsembeddedequiv="Name" rsfieldref="8" rsfieldtype="0">(.+?)</dc:title>', 
contents).group(1)
print(title)

Следующие шаги
Я хотел бы выполнить следующую функцию в большем масштабе, просто ссылаясь на родительскую папку C: /.../ Downloads / test_folder и заставить мою программу находить xml-файл для каждой подпапки, чтобы извлечь нужную информацию, вместо того, чтобы индивидуально указывать каждую подпапку с фруктами.

Уточнение
Вместо того, чтобы просто получать список подпапок или список файлов XML в этих подпапках, я хотел бы физически получить доступ к этим подпапкам, чтобы выполнить эту функцию извлечения текста из каждого файла XML в каждой подпапке.

Заранее спасибо за помощь.

Ответы [ 4 ]

0 голосов
/ 06 июня 2018

Вы можете использовать Python os.walk() для обхода всех подпапок.Если файл metadump.xml, он откроет его и извлечет ваш заголовок.Имя файла и заголовок отображаются:

import os

for root, dirs, files in os.walk(r"C:\...\Downloads\test_folder"):
    for file in files:
        if file == 'metadump.xml':
            filename = os.path.join(root, file) 

            with open(filename) as f_xml:
                contents = f_xml.read()
                title = re.search('<dc:title rsfieldtitle="Title" rsembeddedequiv="Name" rsfieldref="8" rsfieldtype="0">(.+?)</dc:title>', contents).group(1)
                print('{} : {}'.format(filename, title))
0 голосов
/ 06 июня 2018

Вы можете использовать os.listdir в качестве следующего:

import os
parent_folder = 'C:/.../Downloads/test_folder'
subfolders = os.listdir(parent_folder)
for subfolder in subfolders:
    in_file = open(parent_folder+'/'+ subfolder+'/metadump.xml')
    contents = in_file.read()
    in_file.close()
    title = re.search('<dc:title rsfieldtitle="Title" 
    rsembeddedequiv="Name" rsfieldref="8" rsfieldtype="0">(.+?)</dc:title>', 
    contents).group(1)
    print(title)
0 голосов
/ 06 июня 2018

Это можно сделать с помощью модуля glob, если вы не уверены в количестве подпапок в вашей папке.recursive=True сделает проверку всех подпапок в вашей папке C:/../Downloads/test_folder/ и выдаст вам список всех metadump.xml файлов

import re
import glob
for file in glob.glob("C:/**/Downloads/test_folder/**/metadump.xml", recursive=True):
    with open(file) as in_file:
        contents= in_file.read()
    title = re.search('<dc:title rsfieldtitle="Title" 
rsembeddedequiv="Name" rsfieldref="8" rsfieldtype="0">(.+?)</dc:title>', 
contents).group(1)
    print(title)
0 голосов
/ 06 июня 2018

Это может помочь вам:

import os
for root, dirs, files in os.walk("/mydir"):
    for file in files:
        if file.endswith(".xml"):
            print(os.path.join(root, file))
...