Чтение пробелов внутри списка строк

#python

#python

Вопрос:

У меня возникла проблема при попытке подсчитать пробелы в списке на python.

Вот мой код

 Data = ''
index = 0
num_words = 0

# Open a file for reading.
infile = open('article.txt', 'r')

# Read the contents of the file into a list.
data = infile.readlines()

# Strip the n from each element.
while index < len(data):
    data[index] = data[index].rstrip('n')
    index  = 1

for ch in data:
    if ch.isspace():
        num_words  = 1
# Close the file.
infile.close()

# Print the contents of the list.
print(num_words)
  

Содержимое article.txt это просто список предложений, поэтому список — это просто список строк, таких как:

 data = ['this is sentence one.', 'this is sentence two.' , 'this is      sentence three.' , 'this is sentence four.' , 'this is sentence five.' , 'this is sentence six.' ]
  

Я думаю, что знаю, в чем проблема, потому что я сделал:

 print(ch)
  

В результате ‘false’ печатается 6 раз. Я думаю, это потому, что цикл for выполняет поиск, чтобы увидеть, является ли вся строка пробелом, а не проверяет наличие пробелов внутри строки.

Я знаю, что мог бы просто сделать:

 data = infile.read()
  

Но мне нужна каждая строка в списке. Могу ли я что-нибудь изменить, чтобы цикл for выполнял поиск пробелов в каждой строке списка, или мне не повезло?

Комментарии:

1. Вы правы относительно причины вашей проблемы. Вам нужны два вложенных цикла for. Внешний проходит через элементы списка (строки), внутренний — через каждый символ одного элемента списка.

2. почему бы просто не "some data in a line".count(" ") ? Или вам нужны и другие пробелы?

3. Я смог решить эту проблему, следуя рекомендации Майклза о создании внутреннего цикла for. Спасибо!

4. OP: Вы считаете слова, а не пробелы, не так ли?

Ответ №1:

В Python есть удобный метод для работы со строками, называемый str.split . При отсутствии переданных аргументов он будет разделен на пробелы. Если вы посчитаете элементы в результирующем списке, у вас будет количество слов.

Обрабатывает несколько пробелов:

 >>> line = "this is     some    string."
>>> len(line.split())
4
  

Обрабатывает пустые строки:

 >>> line = "   "
>>> len(line.split())
0
  

Обрабатывает дополнительное пространство до и после:

 >>> line = "   space before and after.   "
>>> len(line.split())
4
  

Вот несколько примеров кода:

 lines = 0
words = 0

with open('yourfile', 'rt') as yourfile:
  for line in yourfile:
    lines  = 1
    words  = len(line.split())
  

Комментарии:

1. Спасибо! Это выглядит намного лучше, чем мое решение.