функция, которая принимает имя файла и находит количество строк, превышающее 6 символов

стоит задача:

Напишите функцию find_lines_len_more_6, которая принимает имя файла и находит количество строк, превышающее 6 символов. Не забывайте исключать знак переноса на новую строку, стоящий в конце строки.

Функция find_lines_len_more_6 должна возвращать найденное количество строк

подскажите пожалуйста где и в чем ошибка в написанном мной коде:

def find_lines_len_more_6(file_name:str) -> int:
    with open(file_name, 'r') as f:
        file_name = file_name.split('\n')
        return sum(1 for line in file_name if len(line)>6)+1

пробовала убирать +1 в возвращаемом значении, код все равно не проходит на решение


Ответы (1 шт):

Автор решения: Павел

Ошибок в вашем коде две:

  1. file_name = file_name.split('\n') - после открытия файла на чтение вы не читаете содержимое файла при помощи функции read(), а начинаете парсить его название
  2. sum(1 for line in file_name if len(line)>6)+1 - +1 в конце совершенно ни к чему.

Если исправить, то получается рабочий код:

def find_lines_len_more_6(file_name: str) -> int:
    with open(file_name, 'r') as f:
        lines = f.read().splitlines()
        return sum(1 for line in lines if len(line) > 6)


print(find_lines_len_more_6('test.txt')) # 2

test.txt

123456
1234567
12345
12345678

Как верно написали в комментариях для разбития файла на строки лучше использовать функцию str.splitlines(), поскольку для разделения в ней используется не только символ переноса строки \n, но и другие.

→ Ссылка