группы фраз по 500
у нас в папке с программой есть много текстов txt
нам нужно все их прочитать и разбить на группы фраз
по 500 фраз в группе
отбросить повторы фраз и записать каждую группу фраз
в свой новый файл *.txt
we need such a program in python >
we have a lot of txt texts in the program folder
We need to read them all and break them down into groups of phrases.
500 phrases per group
discard repetitions of phrases and write each group of phrases
to your new *.txt file.
Ответ
Вот простая реализация программы на Python,
решающей эту задачу:
import os
def read_text_files(folder_path):
"""Читаем содержимое всех файлов .txt"""
texts = []
for filename in os.listdir(folder_path):
if filename.endswith('.txt'):
with open(os.path.join(folder_path, filename), 'r', encoding='utf-8') as file:
text = file.read()
texts.append(text)
return '\n'.join(texts)
def split_into_chunks(text, chunk_size=500):
"""Разделяем текст на блоки размером примерно 500 символов."""
chunks = []
start = 0
while start < len(text):
end = min(start + chunk_size, len(text))
# Определяем конец строки перед концом блока, чтобы избежать разрыва слов
last_space_idx = text.rfind(' ', start, end)
if last_space_idx != -1 and last_space_idx > start:
end = last_space_idx
chunk = text[start:end].strip()
chunks.append(chunk)
start = end
return chunks
def remove_duplicates(chunks):
"""Удаление повторяющихся блоков текста."""
unique_chunks = list(set(chunks)) # Преобразуем список в set, затем обратно в список
return unique_chunks
def write_to_files(unique_chunks, output_folder="output"):
"""Записываем каждый уникальный блок в отдельный файл."""
if not os.path.exists(output_folder):
os.makedirs(output_folder)
for i, chunk in enumerate(unique_chunks):
with open(f"{output_folder}/chunk_{i+1}.txt", 'w', encoding='utf-8') as file:
file.write(chunk)
if __name__ == "__main__":
folder_path = input("Введите путь к папке с файлами .txt: ")
print("Чтение и обработка...")
combined_text = read_text_files(folder_path)
chunks = split_into_chunks(combined_text)
unique_chunks = remove_duplicates(chunks)
write_to_files(unique_chunks)
print(f"Сохранено {len(unique_chunks)} уникальных групп фраз.")
Как работает программа?
read_text_files: читает файлы .txt из указанной директории и объединяет их содержимое в одну строку.
split_into_chunks: разделяет объединённый текст на фрагменты длиной около 500 символов, стараясь избегать разрывов слов посередине предложений.
remove_duplicates: удаляет дублирующиеся куски текста.
write_to_files: записывает каждый уникальный фрагмент в отдельные файлы формата chunk_*.txt.
Программа готова к запуску. Просто сохрани её в .py файл и запусти, указав путь к папке с текстом.
немного не так я хотел
я хотел сделать из всех текстов txt новые файлы
примерно по 500 фраз без повторов этих фраз
Ответ
Теперь понял тебя лучше! Давай исправим программу, чтобы она считывала все файлы .txt, извлекала из каждого файла отдельные фразы, отбрасывала повторы и формировала новые файлы по 500 фраз в каждом.
Вот обновленная версия скрипта:
python
import os
from collections import OrderedDict
# Функция для чтения содержимого всех текстовых файлов
def read_text_files(folder_path):
phrases = []
for filename in os.listdir(folder_path):
if filename.endswith(".txt"):
with open(os.path.join(folder_path, filename), "r", encoding="utf-8") as f:
content = f.read().strip()
sentences = content.split("\n")
phrases.extend(sentences)
return phrases
# Функция для удаления повторяющихся фраз
def remove_duplicate_phrases(phrases):
return list(OrderedDict.fromkeys(phrases))
# Функция для разделения фраз на группы по 500 фраз
def group_sentences_by_500(phrases):
groups = []
current_group = []
count = 0
for phrase in phrases:
current_group.append(phrase)
count += 1
if count >= 500:
groups.append(current_group)
current_group = []
count = 0
if current_group:
groups.append(current_group)
return groups
# Функция для записи каждой группы фраз в новый файл
def save_groups_to_files(groups, output_dir="output"):
if not os.path.exists(output_dir):
os.mkdir(output_dir)
for idx, group in enumerate(groups):
filepath = os.path.join(output_dir, f"group_{idx+1}.txt")
with open(filepath, "w", encoding="utf-8") as f:
f.write("\n".join(group))
if __name__ == "__main__":
folder_path = input("Введите путь к папке с файлами .txt: ").strip()
print("Обрабатываю файлы...")
all_phrases = read_text_files(folder_path)
unique_phrases = remove_duplicate_phrases(all_phrases)
grouped_phrases = group_sentences_by_500(unique_phrases)
save_groups_to_files(grouped_phrases)
print(f"Группы сохранены в папке '{os.path.abspath('output')}': всего создано {len(grouped_phrases)} файлов.")
Что теперь делает скрипт?
Чтение всех файлов .txt: мы собираем все тексты и формируем единый список фраз (phrases), каждая фраза является отдельной строкой.
Удаление повторяющихся фраз: используем словарь с упорядочением (OrderedDict) для сохранения порядка фраз и исключения дублей.
Разделение на группы: создаем списки по 500 фраз, сохраняя остатки последней группы отдельно.
Запись результатов: создаём новую папку "output" и записываем каждую группу фраз в отдельный файл group_X.txt, где X — номер группы.
Пример запуска:
Просто скопируй этот код в файл .py, открой терминал, перейди в каталог с файлом и введи команду:
bash
python твой_файл.py
Затем следуй инструкциям,
введя путь к папке с текстовыми файлами.
сделай так чтобы папка с текстами была той где и находится наша программа
Хорошо, давайте сделаем так, чтобы папка с исходными текстами находилась там же, где и сама программа, а выводящие файлы будут помещены в отдельную подпапку output внутри текущего каталога.
Вот немного доработанный вариант кода:
python
import os
from collections import OrderedDict
# Читаем все файлы .txt из текущей рабочей директории
def read_text_files():
phrases = []
directory = os.getcwd() # Получаем текущий рабочий каталог
for filename in os.listdir(directory):
if filename.endswith(".txt"):
with open(filename, "r", encoding="utf-8") as f:
content = f.read().strip()
sentences = content.split("\n")
phrases.extend(sentences)
return phrases
# Убираем повторяющиеся фразы
def remove_duplicate_phrases(phrases):
return list(OrderedDict.fromkeys(phrases))
# Группируем фразы по 500 штук
def group_sentences_by_500(phrases):
groups = []
current_group = []
count = 0
for phrase in phrases:
current_group.append(phrase)
count += 1
if count >= 500:
groups.append(current_group)
current_group = []
count = 0
if current_group:
groups.append(current_group)
return groups
# Сохраняем группы фраз в отдельные файлы
def save_groups_to_files(groups):
output_dir = os.path.join(os.getcwd(), "output")
if not os.path.exists(output_dir):
os.mkdir(output_dir)
for idx, group in enumerate(groups):
filepath = os.path.join(output_dir, f"group_{idx+1}.txt")
with open(filepath, "w", encoding="utf-8") as f:
f.write("\n".join(group))
if __name__ == "__main__":
print("Начинаю обработку...")
all_phrases = read_text_files()
unique_phrases = remove_duplicate_phrases(all_phrases)
grouped_phrases = group_sentences_by_500(unique_phrases)
save_groups_to_files(grouped_phrases)
print(f"Файлы успешно созданы в папке '{os.path.abspath('output')}': всего получилось {len(grouped_phrases)} файлов.")
Теперь подробнее, что изменилось в коде программы:
Папка с исходными текстами автоматически берется из того места, где расположена твоя программа.
Все обработанные файлы сохраняются в подпапку output, которую скрипт создаст рядом с исполняемой программой.
Пример работы:
Помести все твои текстовые файлы .txt туда же, куда положишь саму программу, и запусти её командой:
python название_скрипта.py
Скрипт сам найдет нужные файлы и выполнит свою работу.
Свидетельство о публикации №126011703441