Извлечение из нескольких текстовых мух, добавление результатов - PullRequest
0 голосов
/ 27 июня 2019

Я написал функцию для извлечения из текстовых файлов с помощью регулярных выражений.Функция возвращает каждую переменную.У меня много файлов, и я хочу перебрать файлы и добавить результаты.Каждая переменная является списком;Я объединю их, чтобы создать DF.Это тоже работает.

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

Я написал функцию и использовал glob для вывода списка имен файлов раньше.Я знаю о list.append, но не знаю, как объединить с glob (или аналогичным).

Как я могу перебирать файлы, вызывать эту функцию и добавлять результаты после каждой итерации?

TEXT:

A bunch of sentences
CUSTOMER: 78787
amount (500 dollars)
A bunch of sentences

CODE

def find(customer, amount):    
    with open(r"file.txt",'r') as myfile:
        text = myfile.read() 

    customer = re.findall(r"^CUSTOMER:[\s](.*)\d+", text) 
    amount = re.findall(r'\((.*?)\)', text)

    return customer, amount

Функция работает, но только для одного файла, который в данный момент читается.

1 Ответ

1 голос
/ 27 июня 2019

Просто переберите список файлов, созданных с помощью вашей функции. Также нет смысла проходить в customer или amount. Они просто создаются во время выполнения вашей функции find и сохраняются после их возвращения.

Вы можете использовать pathlib.Path метод glob. Здесь идет:

from pathlib import Path

def find(file_name):    
    with open(file_name,'r') as f:
        text = f.read() 

    customer = re.findall(r"^CUSTOMER:[\s](.*)\d+", text) 
    amount = re.findall(r'\((.*?)\)', text)

    return customer, amount

file_dir = Path("path_to_directory_containing_files") # CHANGE THIS
all_files = file_dir.glob("*.txt") # this should be whatever pattern that matches all the input files
results = [find(f) for f in all_files]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...