веб страница с фото и фразами под ними
из набора случайных фото и фраз к каждому фото
фото jpg находятся в папке фото, а фразы в файле фраз.txt
программа в этой же папке где папка фото и файл фраз.txt
*
на питоне
Разберу задачу пошагово и предоставлю готовое решение на Python.
Шаг 1. Подготовка структуры папок и файлов
Убедитесь, что у вас есть:
папка фото/ с JPG;изображениями (например, фото/1.jpg, фото/2.jpg и т.;д.);
файл фраз.txt с фразами — по одной фразе на строку;
скрипт Python будет запускаться из той же директории, где находятся папка фото и файл фраз.txt.
Шаг 2. Код на Python
import os
import random
def create_html_gallery():
# Пути к ресурсам
photo_folder = 'фото'
phrases_file = 'фраз.txt'
output_html = 'gallery.html'
# Получаем список всех JPG;файлов в папке фото
if not os.path.exists(photo_folder):
print(f"Ошибка: папка '{photo_folder}' не найдена!")
return
photo_files = [
f for f in os.listdir(photo_folder)
if f.lower().endswith(('.jpg', '.jpeg'))
]
if not photo_files:
print("В папке 'фото' нет JPG;файлов!")
return
# Читаем фразы из файла
if not os.path.exists(phrases_file):
print(f"Ошибка: файл '{phrases_file}' не найден!")
return
with open(phrases_file, 'r', encoding='utf-8') as f:
phrases = [line.strip() for line in f if line.strip()]
if not phrazes:
print("Файл 'фраз.txt' пуст!")
return
# Если фраз меньше, чем фото, дублируем фразы
while len(phrases) < len(photo_files):
phrases.extend(phrases)
# Перемешиваем фото и берём столько фраз, сколько фото
random.shuffle(photo_files)
selected_phrases = phrases[:len(photo_files)]
# Генерируем HTML
html_content = '''
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Галерея фото с фразами</title>
<style>
body {
font-family: Arial, sans-serif;
margin: 20px;
background-color: #f5f5f5;
}
.gallery {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 20px;
padding: 20px;
}
.photo-item {
background: white;
border-radius: 8px;
padding: 15px;
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
text-align: center;
}
.photo-item img {
max-width: 100%;
height: auto;
border-radius: 4px;
}
.phrase {
margin-top: 10px;
font-style: italic;
color: #555;
}
</style>
</head>
<body>
<h1>Галерея случайных фото с фразами</h1>
<div class="gallery">
'''
for photo, phrase in zip(photo_files, selected_phrases):
photo_path = os.path.join(photo_folder, photo)
html_content += f'''
<div class="photo-item">
<img src="{photo_path}" alt="Фото">
<div class="phrase">{phrase}</div>
</div>
'''
html_content += '''
</div>
</body>
</html>
'''
# Сохраняем HTML;файл
with open(output_html, 'w', encoding='utf-8') as f:
f.write(html_content)
print(f"HTML;страница успешно создана: {output_html}")
print(f"Обработано фото: {len(photo_files)}")
print(f"Использовано фраз: {len(selected_phrases)}")
# Запуск функции
if __name__ == "__main__":
create_html_gallery()
Шаг 3. Как использовать
Сохраните код в файл create_gallery.py в той же папке, где лежат фото/ и фраз.txt.
Заполните фраз.txt фразами (по одной на строку). Пример содержимого:
Прекрасное утро!
Закат над горами
Счастливые моменты
Жизнь прекрасна
Улыбнись!
Поместите JPG;изображения в папку фото/.
Запустите скрипт:
bash
python create_gallery.py
После выполнения в той же папке появится файл gallery.html. Откройте его в браузере — вы увидите галерею с фото и подписями.
Пояснения к коду
Проверка существования папок и файлов — скрипт проверяет, что папка фото и файл фраз.txt существуют.
Чтение JPG;файлов — ищет все файлы с расширениями .jpg и .jpeg (регистронезависимо).
Чтение фраз — читает строки из фраз.txt, убирает пустые строки и лишние пробелы.
Сопоставление фото и фраз — если фраз меньше, чем фото, список фраз дублируется; фото перемешиваются случайным образом.
Генерация HTML — формируется сетка (grid) с блоками, каждый содержит изображение и фразу.
Стилевое оформление — встроенная CSS;стилизация для адаптивного отображения и приятного вида.
Хотите, я уточню какой;то блок подробнее или помогу адаптировать код под дополнительные требования?
Я
нужно уточнить число фото и фраз
Алиса
Вот доработанный код с подробной информацией о количестве фото и фраз — он выводит статистику до и после сопоставления:
python
import os
import random
def create_html_gallery():
# Пути к ресурсам
photo_folder = 'фото'
phrases_file = 'фраз.txt'
output_html = 'gallery.html'
print("=== АНАЛИЗ ДАННЫХ ===")
# Получаем список всех JPG;файлов в папке фото
if not os.path.exists(photo_folder):
print(f"Ошибка: папка '{photo_folder}' не найдена!")
return
photo_files = [
f for f in os.listdir(photo_folder)
if f.lower().endswith(('.jpg', '.jpeg'))
]
total_photos = len(photo_files)
print(f"Найдено фото в папке '{photo_folder}': {total_photos}")
if not photo_files:
print("В папке 'фото' нет JPG;файлов!")
return
# Читаем фразы из файла
if not os.path.exists(phrases_file):
print(f"Ошибка: файл '{phrases_file}' не найден!")
return
with open(phrases_file, 'r', encoding='utf-8') as f:
phrases = [line.strip() for line in f if line.strip()]
total_phrases = len(phrases)
print(f"Найдено фраз в файле '{phrases_file}': {total_phrases}")
if not phrazes:
print("Файл 'фраз.txt' пуст!")
return
# Анализ соотношения фото и фраз
print("\n=== АНАЛИЗ СООТНОШЕНИЯ ===")
if total_phrases >= total_photos:
print("Фраз достаточно для всех фото")
need_duplication = False
else:
print("Фраз меньше, чем фото — потребуется дублирование фраз")
need_duplication = True
# Дублируем фразы, если их недостаточно
original_phrases_count = total_phrases
while len(phrases) < len(photo_files):
phrases.extend(phrases[:total_photos - len(phrases)])
selected_phrases = phrases[:len(photo_files)]
final_phrases_count = len(selected_phrases)
# Перемешиваем фото
random.shuffle(photo_files)
print(f"\n=== ИТОГОВАЯ СТАТИСТИКА ===")
print(f"Всего фото для отображения: {total_photos}")
print(f"Изначально фраз: {original_phrases_count}")
print(f"Фраз после дублирования: {final_phrases_count}")
if need_duplication:
print(f"Некоторые фразы будут использованы повторно")
else:
print(f"Все фразы уникальны")
# Генерируем HTML
html_content = '''
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Галерея фото с фразами</title>
<style>
body {
font-family: Arial, sans-serif;
margin: 20px;
background-color: #f5f5f5;
}
.gallery {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 20px;
padding: 20px;
}
.photo-item {
background: white;
border-radius: 8px;
padding: 15px;
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
text-align: center;
}
.photo-item img {
max-width: 100%;
height: auto;
border-radius: 4px;
}
.phrase {
margin-top: 10px;
font-style: italic;
color: #555;
}
.stats {
background: #e9f7e9;
padding: 15px;
border-radius: 5px;
margin: 20px 0;
border-left: 4px solid #4CAF50;
}
</style>
</head>
<body>
<h1>Галерея случайных фото с фразами</h1>
<div class="stats">
<h3>Статистика генерации:</h3>
<p>Всего обработано фото: <strong>{total_photos}</strong></p>
<p>Использовано фраз: <p>Изначально доступно фраз: {duplication_warning}
</div>
<div class="gallery">
'''.format(
total_photos=total_photos,
final_phrases_count=final_phrases_count,
original_phrases_count=original_phrases_count,
duplication_warning=(
'<p style="color: #ff9800;"><strong>Внимание:</strong> Фразы были продублированы, так как их было недостаточно</p>'
if need_duplication else
'<p>Все фразы уникальны</p>'
)
)
for photo, phrase in zip(photo_files, selected_phrases):
photo_path = os.path.join(photo_folder, photo)
html_content += f'''
<div class="photo-item">
<img src="{photo_path}" alt="Фото">
<div class="phrase">{phrase}</div>
</div>
'''
html_content += '''
</div>
</body>
</html>
'''
# Сохраняем HTML;файл
with open(output_html, 'w', encoding='utf-8') as f:
f.write(html_content)
print(f"\n=== РЕЗУЛЬТАТ ===")
print(f"HTML;страница успешно создана: {output_html}")
# Запуск функции
if __name__ == "__main__":
create_html_gallery()
Что изменилось и что показывает статистика
Программа теперь выводит подробную информацию на трёх этапах:
1. Анализ данных:
сколько всего фото найдено в папке фото/;
сколько всего фраз найдено в файле фраз.txt.
2. Анализ соотношения:
определяет, достаточно ли фраз для всех фото;
если фраз меньше — сообщает о необходимости дублирования.
3. Итоговая статистика:
общее количество фото для отображения;
изначальное количество фраз;
количество фраз после дублирования (если требовалось);
информация о повторном использовании фраз.
В HTML;файле также отображается блок статистики с:
общим количеством обработанных фото;
количеством использованных фраз;
изначальным количеством фраз;
предупреждением, если фразы дублировались.
Пример вывода в консоли
При запуске вы увидите примерно такое:
=== АНАЛИЗ ДАННЫХ ===
Найдено фото в папке 'фото': 15
Найдено фраз в файле 'фраз.txt': 8
=== АНАЛИЗ СООТНОШЕНИЯ ===
Фраз меньше, чем фото — потребуется дублирование фраз
=== ИТОГОВАЯ СТАТИСТИКА ===
Всего фото для отображения: 15
Изначально фраз: 8
Фраз после дублирования: 15
Некоторые фразы будут использованы повторно
=== РЕЗУЛЬТАТ ===
HTML;страница успешно создана: gallery.html
Хотите, я уточню какой;то блок кода подробнее или помогу адаптировать решение под дополнительные требования?
Свидетельство о публикации №126040100883