Программа считает количество строк, слов и букв в переданном ей файле.
Имя файла должно передаваться в качестве первого аргумента после имени самого скрипта. Например, вызов скрипта в Linux через командную оболочку выглядит примерно так:
python3 words.py text.txt
import sys
fname = sys.argv[1]
lines = 0
words = 0
letters = 0
for line in open(fname):
lines += 1
letters += len(line)
pos = 'out'
for letter in line:
if letter != ' ' and pos == 'out':
words += 1
pos = 'in'
elif letter == ' ':
pos = 'out'
print("Lines:", lines)
print("Words:", words)
print("Letters:", letters)
С комментариями:
import sys
# argv - список аргументов командрой строки
# argv[0] - имя самого файла-скрипта
# argv[1] - первый аргумент, здесь - имя обрабатываемого файла
fname = sys.argv[1]
# Переменные для подсчета строк, слов и букв.
lines = 0
words = 0
letters = 0
# Функция open() открывает переданный ей файл
# и возвращает объект, итерация по которому
# позволяет последовательно извлекать строки файла.
for line in open(fname):
# Была получена очередная строка.
# Она присваивается переменной line.
# Счетчик строк следует увеличить на 1.
lines += 1
# С помощью len определяется количество символов в строке
# и добавляется к счетчику букв.
letters += len(line)
# Код ниже считает количество слов в текущей строке.
# Флаг, сигнализирующий нахождение за пределами слова.
pos = 'out'
# Цикл перебора строки по символам.
for letter in line:
# Если очередной символ не пробел, а флаг в значении "вне слова",
# то значит начинается новое слово.
if letter != ' ' and pos == 'out':
# Поэтому надо увеличить счетчик слов на 1,
words += 1
# а флаг поменять на значение "внутри слова".
pos = 'in'
# Если очередной символ пробел,
elif letter == ' ':
# то следует установить флаг в значение "вне слова".
pos = 'out'
# Вывод количеств строк, слов и символов на экран.
print("Lines:", lines)
print("Words:", words)
print("Letters:", letters)
Пример выполнения скрипта в командной оболочке bash
XXX@XXX:~/PycharmProjects/words$ python3 words_comment.py words.py
Lines: 22
Words: 64
Letters: 385