Как посчитать количество вхождений строки в файле и добавить ее в другой файл - PullRequest
0 голосов
/ 12 февраля 2019

Мне нужно посчитать количество вхождений 'Product ID' в файле .txt и заставить его напечатать номер в этом файле.Я новичок в Python и пытаюсь обернуть голову вокруг этого.У меня это работает отдельно в коде, но он печатает номер в командной строке после запуска программы (отсюда и печать).Я попытался использовать print (count) >> "hardDriveSummary.txt file" и print >> count, "hardDriveSummary.txt file", но не могу заставить его работать.

# Read .xml file and putlines row_name and Product ID into new .txt file
search = 'row_name', 'Product ID'

#source file
with open('20190211-131516_chris_Hard_Drive_Order.xml') as f1:
    #output file
    with open('hardDriveSummary.txt', 'wt') as f2:
        lines = f1.readlines()
        for i, line in enumerate(lines):
            if line.startswith(search):
                f2.write("\n" + line)

#count how many occurances of 'Product ID' in .txt file
def main():

    file  = open('hardDriveSummary.txt', 'r').read()
    team  = "Product ID"
    count = file.count(team)

    print(count)

main()

Образец файла hardDriveSummary.txt:

Name          Country 1

Product ID                      : 600GB

Name         Country 2

Product ID                      : 600GB

Name           Country 1

Product ID                      : 450GB

Содержимое файла .xml:

************* Server Summary *************

Server                      serv01
label                         R720
asset_no                   CNT3NW1
Name                     Country 1
name.1                       City1
Unnamed: 6                     NaN

************* Drive Summary **************

ID                              : 0:1:0
State                           : Failed
Product ID                      : 600GB
Serial No.                      : 6SL5KF5G


************* Server Summary *************

Server                      serv02
label                         R720
asset_no                   BZYGT03
Name                     Country 2
name.1                       City2
Unnamed: 6                     NaN

************* Drive Summary **************

ID                              : 0:1:0
State                           : Failed
Product ID                      : 600GB
Serial No.                      : 6SL5K75G


************* Server Summary *************

Server                      serv03
label                         R720
asset_no                   5GT4N51
Name                     Country 1
name.1                       City1  
Unnamed: 6                     NaN

************* Drive Summary **************

ID                              : 0:1:0
State                           : Failed
Product ID                      : 450GB
Serial No.                      : 6S55K5MG

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Поскольку Product ID - это два разных слова, вы разбиваете весь текст на две группы слов, следующий код даст вам ожидаемые результаты:

from collections import Counter
f = open(r"sample.py", "r")
words = f.read().split()
bigrams = zip(words, words[1:])
counts = Counter(bigrams)
data = {' '.join(k): v for k, v in dict(counts).items()}
if 'Product ID' in data:
    print('Count of "Product ID": ', data['Product ID'])
0 голосов
/ 12 февраля 2019

Если вы просто хотите пометить значение счетчика в конце файла, следующий код должен работать:

import os

def main():   
    with open('hardDriveSummary.txt', 'ab+') as f:
        term = "Product ID"
        count = f.read().count(term)
        f.seek(os.SEEK_END)  # Because we've already read the entire file. Go to the end before writing otherwise we get an IOError
        f.write('\n'+str(count))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...