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

У меня следующий вопрос. В моем начальном классе Python начинаются среднесрочные периоды, и хотя я понимаю остальную часть проблем в среднесрочной перспективе, этот вопрос меня немного озадачил. Во-первых, вот текст вопроса. Я сталкиваюсь с проблемами в поиске, как перебирать каждое слово в строке и проверять, было ли оно уже замечено. Мне сложно осмыслить. Во-первых, вот текст проблемы:

Напишите функцию с именем cloneLines, которая принимает два параметра:
1. inFile, строка, имя входного файла, который существует до появления cloneLines. с именем
2. outFile, строка, имя выходного файла, который cloneLines создает и записывает в

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

Например, если содержимое файла содержит следующее: william.txt:

double double toil and trouble
fire burn and caldron bubble
eye of newt and toe of frog
fillet of a fenny snake
in the caldron boil and bake
double double toil and trouble
fire burn and caldron bubble

вызов функции:

inFile = 'william.txt'
outFile = 'clones.txt'
cloneLines(inFile, outFile)

должен создать файл clones.txt с содержанием:

double double toil and trouble
eye of newt and toe of frog
double double toil and trouble

Я только дошел до открытия файлов для чтения и записи и началадля цикла. Опять же, мне трудно понять это. Любые рекомендации для дополнительного чтения будут очень полезными. Должен ли я разбивать строки, прочитанные из файла? Мне просто нужно указать общее направление.

def cloneLines (inFile, outFile):
    inputfile = open(infile)
    outputfile = open(outfile, 'w')

    for line in inputfile.read():
        ...

1 Ответ

0 голосов
/ 07 ноября 2019

Следующее записывает в выходной файл любую строку, содержащую одно и то же слово в этой строке более одного раза.

import sys

class SplitStream:
    """
    This is just so you can see the contents
    of the output file
    without having to open the output file
    """
    def __init__(self, s1, s2):
        self.s1 = s1
        self.s2 = s2
    def write(self, arg):
        self.s1.write(arg)
        self.s2.write(arg)


def cloneLines(inFile:str, outFile:str):
    inFile  = str(inFile)
    outFile = str(outFile)
    with open(inFile , mode = "r") as i_f:
        with open(outFile, mode="w") as o_f:
            o_f = SplitStream(o_f, sys.stdout)
            # TODO remove `SplitStream`
            for line in i_f:
                if contains_a_word_more_than_once(line):
                    o_f.write(line)

def contains_a_word_more_than_once(stryng):
    stryng = str(stryng)
    sep_words = stryng.split(" ")

    # if `stryng` is...
    #     "fillet of a fenny snake"
    #
    # then `sep_words` is:
    #     ["fillet", "of", "a", "fenny", "snake"]

    d = dict()    
    for word in sep_words:
        if word in d.keys():
            return True
        d[word] = True
    return False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...