Python - извлечение кода из текста с помощью регулярных выражений - PullRequest
0 голосов
/ 09 ноября 2018

Я новичок в Python и ищу помощь с проблемой извлечения.

У меня есть набор текстовых файлов, и мне нужно извлечь все специальные комбинации выражения ("C" + "ровно 9 цифр") и записать их в файл, включая имя файла текстового файла. Каждый случай выражения, которое я хочу поймать, начинается в начале новой строки и заканчивается "/n".

sample_text = """Some random text here 
and here
and here
C123456789
some random text here
C987654321
and here
and here"""

Как должен выглядеть вывод (в выходном файле)

My_desired_output_file = "filename,C123456789,C987654321"

Пока мой код:

min_file_size = 5

def list_textfiles(directory, min_file_size): # Creates a list of all files stored in DIRECTORY ending on '.txt'
    textfiles = []
    for root, dirs, files in os.walk(directory):
        for name in files:
            filename = os.path.join(root, name)
            if os.stat(filename).st_size > min_file_size:
                textfiles.append(filename)

for filename in list_textfiles(temp_directory, min_file_size):         
    string = str(filename)
    text = infile.read()
    regex = ???
    with open(filename, 'w', encoding="utf-8") as outfile:
       outfile.write(regex)

Ответы [ 3 ]

0 голосов
/ 09 ноября 2018
import re

regex = re.compile('(^C\d{9})')
matches = []
with open('file.txt', 'r') as file:
    for line in file:
        line = line.strip()
        if regex.match(line):
            matches.append(line)

Затем вы можете записать этот список в файл по мере необходимости.

0 голосов
/ 09 ноября 2018

Как насчет:

import re

sample_text = """Some random text here 
and here
and here
C123456789
some random text here
C987654321
and here
and here"""

k = re.findall('(C\d{9})',sample_text)

print(k)

Это вернет все вхождения этого паттерна. Если вы получаете строку из вашего текста и сохраняете целевую комбинацию. Что-то вроде:

Обновлен:

import glob
import os
import re

search = {}
os.chdir('/FolderWithTxTs')
for file in glob.glob("*.txt"):
    with open(file,'r') as f:
        data = [re.findall('(C\d{9})',i) for i in f]
        search.update({f.name:data})

print(search)

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

0 голосов
/ 09 ноября 2018

Ваше регулярное выражение '^C[0-9]{9}$'

^           start of line
C           exact match
[0-9]       any digit
{9}         9 times
$           end of line
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...