Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/34: Рейтинг темы: голосов - 34, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 04.05.2018
Сообщений: 22

Работа с текстовым файлом. Вывод определенных строк и слов

22.06.2018, 16:28. Показов 6929. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребят, привет! Помогите задачки решить, половину сама осилила, а над остальным уже второй день бьюсь...
В общем обязательно решение каждой задачи записать в одну строку, либо генератором списков, либо упаковать все в большую команду, либо еще как
Работаю с текстом на латиннице.
Python
1
a = open("Faust.txt", encoding="utf8").read()
В общем вот эти задачки:
1. Вывести все строчки из текста, в которых более 6 слов начинаются на 'A'. И вот мои попытки:
Python
1
[line for line in a.splitlines() if len([word for word in a.split() if word[0] == 'A']) >= 6]
Python вывел мне просто весь текст...

2. Вывести все названия файлов, чье содержимое имеет одну (я понимаю, что минимум одну) строку, состоящую только из слов, начинающихся на гласную. С поиском слов в тексте, начинающихся на гласную вроде справилась:
Python
1
[word for word in a.split() if word[0] in "aeiou"]
А вот как вывести (для начала) строки только с такими словами?.. Попытка не увенчалась успехом:
Python
1
[(len([word for word in a.split() if all(word[0] in "aeiou")]), line) for line in a.splitlines()]
Ну и все это нужно еще симпатично упаковать в listdir

3. Вывести все номера строк из текстового файла, в которых нет пробелов. На этой команде питон у меня окончательно сдох...
Python
1
[[len(a.splitlines()) - a.splitlines().count(" ") == len(a.splitlines())] for line in a.splitlines()]
А ведь в команду нужно еще и enumerate впихнуть, если я правильно понимаю.


4. Вывести строку, в которой больше всего гласных
5. Вывести строку, в которой содержится слово с самым большим количеством гласных.
6. Тоже с listdir. Вевести все имена файлов в папке, длина которых больше 10 и чье содержимое более 10 строк...

Это половина той половины которая еще осталась
В общем, с надеждой на вашу помощь и заранне спасибо!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.06.2018, 16:28
Ответы с готовыми решениями:

Работа с текстовым файлом и массивом строк
Доброго времени суток, уважаемые программисты! Возникла у меня задачка, никак не могу решить... :wall: Предположим, есть программа,...

Работа с текстовым файлом (замена строк)
Доброго времени суток Мне нужно сделать некий файл настроек. Каждая настройка будет находиться на новой строке. Я сделал примерно...

Работа с текстовым файлом-прочитать посимвольно с определенным разделителем строк
Добрый день всем!Вот хочу написать код чтобы он читал байты посимвольно до разделителя строк-";".И этот массив char преобразовал...

11
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074
22.06.2018, 16:46
Цитата Сообщение от xelen_ Посмотреть сообщение
1. Вывести все строчки из текста, в которых более 6 слов начинаются на 'A'. И вот мои попытки:
PythonВыделить код
1
[line for line in a.splitlines() if len([word for word in a.split() if word[0] == 'A']) >= 6]
Python вывел мне просто весь текст...
В первом не то проверяете

Python
1
[line for line in a.splitlines() if len([word for word in line.split() if word[0] == 'A']) >= 6]
1
1 / 1 / 0
Регистрация: 04.05.2018
Сообщений: 22
22.06.2018, 16:55  [ТС]
Вот блин! Точно! Спасибо!!
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
22.06.2018, 17:23
Лучший ответ Сообщение было отмечено xelen_ как решение

Решение

Цитата Сообщение от xelen_ Посмотреть сообщение
обязательно решение каждой задачи записать в одну строку,
Вы в курсе про правило 80 символов?

Писать в одну строку более 80 символов кода - изврат.
Цитата Сообщение от xelen_ Посмотреть сообщение
3. Вывести все номера строк из текстового файла, в которых нет пробелов
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
print(
    list(
        map(lambda t:t[0],
            filter(
                lambda l:l[1].count(' ') == 0,
                enumerate(open("ws.txt"),1)
            )
        )
    )
)
 
print(
    [t[0] for t in filter(
                lambda l:l[1].count(' ') == 0,
                enumerate(open("ws.txt"),1)
        )
    ]
)
1
1 / 1 / 0
Регистрация: 04.05.2018
Сообщений: 22
22.06.2018, 17:30  [ТС]
Спасибо!

Цитата Сообщение от Garry Galler Посмотреть сообщение
Вы в курсе про правило 80 символов?
Писать в одну строку более 80 символов кода - изврат.
Я теперь в курсе, а вот препод похоже нет... Да он у нас вообще с приветом - даже на принт матерится!
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
22.06.2018, 17:47
Цитата Сообщение от xelen_ Посмотреть сообщение
4. Вывести строку, в которой больше всего гласных
Python
1
2
3
4
5
6
7
8
print(
    sorted(
        [(n, sum(1 for letter in line if letter in'aeiou') )
        for n,line in enumerate(open("ws.txt"),1)],
    key=lambda x:x[1],
    reverse=True
    )[0]
)
Добавлено через 2 минуты
Там номер строки выводится... если саму строку, то без enumerate:
Python
1
2
3
4
5
6
7
8
print(
    sorted(
        [(line, sum(1 for letter in line if letter in'aeiou') )
        for line in open("ws.txt")],
    key=lambda x:x[1],
    reverse=True
    )[0]
)
1
1 / 1 / 0
Регистрация: 04.05.2018
Сообщений: 22
22.06.2018, 17:52  [ТС]
Спасибо огромное!!
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
22.06.2018, 19:14
Лучший ответ Сообщение было отмечено xelen_ как решение

Решение

Цитата Сообщение от xelen_ Посмотреть сообщение
5. Вывести строку, в которой содержится слово с самым большим количеством гласных
Длинноватый код для одной строки выходит...
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
print(
        sorted(
        [(line, 
            max([(
                word,
                sum(1 for letter in  word if letter in'aeiou')) 
                for word in line.split()],  
                key=lambda x:x[1]
            ) 
        )
        for line in open("ws.txt") if line != "\n"],
        key=lambda x:x[1][1],
        reverse=True
        )[0][0]
)
А если это еще и без переносов записать... будет жуть.
1
1 / 1 / 0
Регистрация: 04.05.2018
Сообщений: 22
22.06.2018, 19:56  [ТС]
Ничего, главное чтоб работал )) Спасибо огромное!

Я тут кстати все номера строк без пробелов несколько по другому написать смогла, основе вашего решения, чтоб в одну строчку все таки влепить Не знаю, правильно ли так...
Python
1
 print([line[0] for line in enumerate(a.splitlines()) if line[1].count(" ") == 0])
Вроде работает...
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
22.06.2018, 20:11
Цитата Сообщение от xelen_ Посмотреть сообщение
Не знаю, правильно ли так..
Суть та же, но splitlines() совершенно лишнее. В итоге ваш вариант длиннее получился, чем мой №2.
И нумерация строк у вас неверная - с нуля, тогда как логичнее с единицы.

Добавлено через 6 минут
Если делать без filter, тогда так:
Python
1
print([t[0] for t in enumerate(open("ws.txt"),1) if t[1].count(' ') == 0])
1
1 / 1 / 0
Регистрация: 04.05.2018
Сообщений: 22
22.06.2018, 20:14  [ТС]
Да, вы правы... Рано радовалась, что что-то толковое написать смогла
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
22.06.2018, 20:23
По №5 - там выводится кортеж состоящий из строки и еще одного внутреннего кортежа: ("слово слово", ("слово", число_гласных))
Если же нужно вывести исключительно только строку (согласно условию): тогда нужно так указать индекс:

Python
1
sorted(...)[0][1][0] # то есть берем самый первый кортеж, а в нем значение из внутреннего кортежа по индексу 0.
А нет, все правильно у меня в том посте указано. С такой индексацией будет выводиться слово, а не строка.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.06.2018, 20:23
Помогаю со студенческими работами здесь

GUI Работа с текстовым файлом, лог файлом не мешая системе
Хочу написать прогу которая будет по таймеру искать в тхт - лог файле сообщение об ошибке. Например Error: 100 Qt C++ gui изучаю недавно...

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

Задача с текстовым файлом, вывести количество заданных слов
Добрый вечер! Помогите пожалуйста . Мне нужно вывести не только количество слов, но и указать в какой строчке они встречаются. То есть...

Работа с текстовым файлом
Имеется файл log игрушки,в игре есть чат ,который появляется в логе.Нужно сделать так,что бы при появлении допустим текста "кек"...

Работа с текстовым файлом
В той теме решил не флудить более, а создать свою. Вопрос вот в чем: как узнать, существует ли файл в данной папке? Пример: я хочу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru