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

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

22.06.2018, 16:28. Показов 6877. Ответов 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
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru