Парсинг / Извлечение данных из 200K + текстовых файлов в Excel - PullRequest
0 голосов
/ 26 апреля 2019

У меня более 200 000 текстовых файлов, содержащих данные, которые мне нужно извлечь, такие как адрес, имя и оплаченная сумма.С учетом размера проекта и сложности данных, которые мне нужно извлечь, каков наилучший способ сделать это?

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

BBL_raw = re.compile(r'''
    Borough,\s+[Bb]lock\s+&\s+[Ll]ot\:\s+\w+\s+\((\d)\),\s+(\d{5}),\s+(\d{4})\s+
    ''', re.VERBOSE)

BBLs = []

for filename in filepaths:
    with open(filename, 'r') as readit:
        readfile = readit.read().replace('\n','')
        bblsearch = BBL_raw.search(readfile)
        tup = bblsearch.groups()
        string = '\\'.join(tup)
        BBLs.append(string)

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

https://github.com/talos/nyc-stabilization-unit-counts/blob/master/parse.py

1 Ответ

0 голосов
/ 26 апреля 2019

Я бы использовал панды для управления данными, вы можете проверить это здесь:

https://pandas.pydata.org/pandas-docs/stable/getting_started/10min.html

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

Узнайте больше о потоках здесь: https://docs.python.org/3/library/threading.html

Другая проблема, связанная с использованием Threads в Python, связана с GIL, проверьте ссылку на GIL: https://docs.python.org/3/c-api/init.html#thread-state-and-the-global-interpreter-lock

Чтение решения Майка Маккерна также может помочь вам: https://stackoverflow.com/a/28613077/10473393

...