Копирование текста Python

Есть файл с текстом. Нужно найти в нём все слова, которые содержат указанные буквы, и записать эти слова в другой файл.

Пример:
Файл file.txt:

Перечень мебели Стул Стол шкаф и тд

Искомые буквы:

е, о, ф

Записать в файл result.txt:

Перечень, мебели, Стол, шкаф

Есть идеи, как это можно реализовать без использования каких-либо модулей?


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

Автор решения: Dareten

Самый простой, на мой взгляд, вариант в использовании проверки с in:

answer = []
while True:
    line = input()
    if line:
        if 'а' in line:
            answer.append(line)
    else:
        break
print(' '.join(answer))

При необходимости можно расширить сами подстроки или их количество при помощи or А вообще для более углубленного поиска советую ознакомиться с регулярными выражениями и библиотекой re

→ Ссылка
Автор решения: Евгений

Вы можете с помощью приведения слов к множеству проверять наличие в них букв, а потом, используя регулярные выражения, убирать знаки препинания, которые "приклеились" к словам.
Я для проверки брал текст прямо в программе, а результат выводил в консоль. Вам же нужно раскомментировать чтение и запись, поменять название исходного и результирующего файла и убрать текст, записанный вручную.

# Чтение из файла filename.txt
#with open("filename.txt") as f:
#    text = f.read()

text = """Жили у бабуси
Два весёлых гуся,
Один - серый, другой - белый,
Два весёлых гуся.
Один - серый, другой - белый,
Два весёлых гуся!""" # текст, в котором ищем слова

letters = 'бгу' # буквы, слова с которыми ищем (только маленькие буквы)
temporary = (
    word # слово
    for word in text.split() # из текста, разбитого по пробелам
    if set(word.lower()) & set(letters) # если у слова есть хотя бы одна из искомых букв
) # Временный результат - к словам могли приклеиться знаки препинания

result = [
    word.strip(",.;:-!?") # слово без знаков препинания (если возможны другие знаки - добавить их сюда)
    for word in temporary # из списка подходящих нам слов
]

print(result) # все подходящие слова
print(set(result)) # подходящие слова, но без повторений (ПОРЯДОК СЛОВ НЕ СОХРАНЯЕТСЯ)

# Запись в файл result_filename.txt
#with open("result_filename.txt", "w") as f:
#    f.write(', '.join(result)) # либо f.write(', '.join(set(result))), если нужны без повторений

Преимущество метода приведения строки к множеству заключается в удобстве поиска большого количества букв. Вы можете добавить столько искомых букв в letters, сколько вам нужно

→ Ссылка
Автор решения: MarianD
CHARS = "еоф"

with open("file.txt") as inp, open("result.txt", "w") as out:
    for word in inp.read().split():
        if any(char in word for char in CHARS):
            out.write(word + "\n")

result.txt:

Перечень
мебели
Стол
шкаф

Примечание: Для вывода слов в единую строку замените "\n" за " ".

→ Ссылка
Автор решения: vadim vaduxa
letters = set('буквы')
with open('in.txt') as f:
    words = set(word for line in f for word in line.split())
with open('out.txt', 'w') as f:
    f.write('\n'.join(w for w in words if letters & set(w)))
→ Ссылка