Python - подсчет пробелов, а не пустых строк - PullRequest
0 голосов
/ 30 октября 2018

Есть ли способ сжать текстовый файл и удалить пустые строки, чтобы я посчитал пробелы в тексте? У меня есть текстовый файл около 20 строк, и я хочу посчитать пробелы между словами. Но я все же считаю белые линии, так как у меня на счетчике более 800.

def spaces():
"""
Counting spaces
"""

number_of_spaces = 0

with open(TEXT, "r") as fh:
    for line in fh:
        space = line.split()
        for i in space:
            for char in i:
                if char.isspace():
                    number_of_spaces += 1

return number_of_spaces

Привет

Ответы [ 5 ]

0 голосов
/ 30 октября 2018

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

with open(TEXT, "r") as fh: 
    count = sum(line.strip().count(' ') for line in fh)

Примечание. При этом вводятся пробелы в конце и т. Д. С использованием strip, поскольку вы сказали, что хотите считать только пробелы между словами. Таким же образом он обрабатывает пустые строки, содержащие пробелы. Он считает двойные пробелы двумя отдельными пробелами и игнорирует символы табуляции '\t'.

Это зависит от того, что вы пытаетесь сделать, если вы действительно этого хотите.

0 голосов
/ 30 октября 2018

Если вы ищете пробел, почему бы не использовать регулярные выражения:

import re
amountOfWhitespaces = len(re.findall('\x20', yourString)
print(amountOfWhitespaces)
0 голосов
/ 30 октября 2018

Могу ли я предложить разделить ваши строки по пробелам и получить количество пробелов в качестве длины полученного массива минус один?

sample_text = """A simple test to see how many
spaces are in these lines of text"""

amount_of_spaces = len(sample_text.split(' ')) - 1
print(amount_of_spaces)
>>> 12

Это хорошо работает с конечными или несколькими последующими пробелами в тексте

0 голосов
/ 30 октября 2018

Я бы использовал регулярные выражения для решения этой проблемы:

import re

def spaces(file_name):
    """Return the number of spaces in the text."""
    with open(file_name, 'r') as f:
        return len(re.findall(r' +', f.read()))

Регулярное выражение r' +' будет искать один или несколько последовательных пробелов. Таким образом, двойные пробелы считаются только одним. Другие символы пробела, такие как '\t', игнорируются.

0 голосов
/ 30 октября 2018

Что вам нужно сделать, это подсчитать количество слов. Количество пробелов всегда на единицу меньше количества слов.

def spaces():
number_of_spaces = 0
    with open(TEXT, "r") as fh:
        words = [word for line in fh for word in line.split()]
        number_of_spaces = len(words-1)
return number_of_spaces 
...