Программа не читает '?' после разделения строк символом "?" так же как '.' - PullRequest
1 голос
/ 29 мая 2020

У меня есть исходный текстовый файл, состоящий из одной очень длинной строки. Я разделил этот файл / строку с помощью символа '?' и точка '.' чтобы иметь возможность go через предложение за предложением, и я сохранил эти предложения / строки в списке под названием sentences_list.

Я читаю строки в этом списке, чтобы подсчитать номер '?' символы, но он не поднимает "?" символ вообще. Как это может быть? Вот код функции, которая ищет '?' :

def count_question_symbols(list):
    count = 0
    for item in list:
        if "?" in item:
            count += 1
    print("Questions asked", count, "times")

count_question_symbols(sentences_list)

А вот код, в котором создается «список предложений»:

file = open("classic_cars.txt", "r")
sentences_list = []
for line in file:
    sentences_list.extend(re.split(r"[?\.]\s*", line))

Ответы [ 2 ]

2 голосов
/ 29 мая 2020

В разделении нет необходимости:

with open('text.txt','r') as f: # Stores all text as a string in a variable
    sentences_list = f.read()

def count_question_symbols(string):
    count = len(string)-len(string.replace('?','')) # Calculate the difference when subtraction original string with partial string
    print("Questions asked", count, "times")

count_question_symbols(sentences_list)

Вывод:

Questions asked 3 times
1 голос
/ 29 мая 2020

re.split - это в основном чрезмерное усложнение цели. В python файлы можно довольно легко преобразовать в строки. Метод count отлично подходит для проверки того, содержится ли подстрока в строке.

if __name__ == "__main__":
    with open("file.txt", "r") as f:
        count = f.read().count("?")
        print("Num question marks: " + str(count))
        # or in 3.6+
        print(f"Num question marks: {count}")

Обратите внимание, что по счастливой случайности предоставленной функции она работает с большинством размеров строк. (не только целые строки из файлов)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...