Копирование текста Python
Есть файл с текстом. Нужно найти в нём все слова, которые содержат указанные буквы, и записать эти слова в другой файл.
Пример:
Файл file.txt:
Перечень мебели Стул Стол шкаф и тд
Искомые буквы:
е, о, ф
Записать в файл result.txt:
Перечень, мебели, Стол, шкаф
Есть идеи, как это можно реализовать без использования каких-либо модулей?
Ответы (4 шт):
Самый простой, на мой взгляд, вариант в использовании проверки с 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, сколько вам нужно
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" за " ".
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)))