Как получить количество вхождений выражения в файл с помощью Python

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

также я пытаюсь сохранить в json файл некоторую информацию, основанную на этом сопоставлении.

нравиться :

  • имя файла
  • соответствующее выражение
  • количество вхождений

проблема в том, что программа считывает файл и отображает текст с выделенным выражением, но в файле json сохраняет количество вхождений как количество строк.

в этом примере слово это - это искомое слово, которое оно существует в текстовом файле дважды результат в json файл будет = 12 ==> это количество строк текста
результат файла json и выделенного текста

код:

def MatchFunc(self):           

    self.textEdit_PDFpreview.clear()
    x = self.lineEditSearch.text()
    TextString=self.ReadingFileContent(self.FileListSelected())
    d = defaultdict(list)  
    filename = os.path.basename(self.FileListSelected())


    RepX='<u><b style = "color:#FF0000">'+x+'</b></u>'

    for counter , myLine in enumerate(filename):

        self.textEdit_PDFpreview.clear()
        thematch=re.sub(x,RepX,TextString)
        thematchFilt=re.findall(x,TextString,re.M|re.I)


        if thematchFilt:
            d[thematchFilt[0]].append(counter + 1)


            self.textEdit_PDFpreview.insertHtml(str(thematch))

        else:
            self.textEdit_PDFpreview.insertHtml('No Match Found')        

    OutPutListMetaData = []   
    for match , positions in d.items():

        print ("this is match {}".format(match))
        print("this is position {}".format(positions))

        listMetaData = {"File Name":filename,"Searched Word":match,"Number Of Occurence":len(positions)}
        OutPutListMetaData.append(listMetaData)
        for p in positions:
            print("on line {}".format(p))                    

    jsondata = json.dumps(OutPutListMetaData,indent=4)
    print(jsondata)            

    folderToCreate = "search_result"
    today = time.strftime("%Y%m%d__%H-%M")
    jsonFileName = "{}_searchResult.json".format(today)

    if not(os.path.exists(os.getcwd() + os.sep + folderToCreate)):
        os.mkdir("./search_result")
    fpJ = os.path.join(os.getcwd()+os.sep+folderToCreate,jsonFileName)
    print(fpJ)

    with open(fpJ,"a") as jsf:
        jsf.write(jsondata)
        print("finish writing")        
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
0
35
2

Ответы 2

Это просто использовать Прилавок. Как только вы передаете итерацию, она возвращает каждый из них вместе с количеством вхождений в виде кортежей.

Поскольку функция re.findall возвращает список, вы можете просто выполнить len(result).

Другие вопросы по теме