Загрузка данных
from pathlib import Path
from docx import Document
from docx.shared import Cm, Pt
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.enum.table import WD_TABLE_ALIGNMENT, WD_CELL_VERTICAL_ALIGNMENT
# Папка, в которой находятся файлы
FOLDER = Path(r"C:\Users\User\Desktop\Файлы")
# Путь для сохранения документа Word
OUTPUT = FOLDER / "Список файлов.docx"
# Искать файлы во вложенных папках?
SEARCH_SUBFOLDERS = False
# Названия типов файлов в зависимости от расширения
FILE_TYPES = {
".pdf": "PDF-документ",
".doc": "Документ Word",
".docx": "Документ Word",
".xls": "Таблица Excel",
".xlsx": "Таблица Excel",
".csv": "Таблица CSV",
".ppt": "Презентация PowerPoint",
".pptx": "Презентация PowerPoint",
".txt": "Текстовый файл",
".rtf": "Текстовый документ RTF",
".jpg": "Изображение",
".jpeg": "Изображение",
".png": "Изображение",
".gif": "Изображение",
".bmp": "Изображение",
".tif": "Изображение",
".tiff": "Изображение",
".svg": "Векторное изображение",
".dwg": "Чертёж AutoCAD",
".dxf": "Чертёж DXF",
".zip": "Архив ZIP",
".rar": "Архив RAR",
".7z": "Архив 7Z",
".exe": "Исполняемый файл",
".msi": "Установочный файл",
".py": "Скрипт Python",
".js": "Скрипт JavaScript",
".html": "HTML-документ",
".css": "Таблица стилей CSS",
".json": "Файл JSON",
".xml": "Файл XML",
".mp3": "Аудиофайл",
".wav": "Аудиофайл",
".mp4": "Видеофайл",
".avi": "Видеофайл",
".mov": "Видеофайл",
".mkv": "Видеофайл",
}
def get_file_type(file_path):
"""Определяет тип файла по расширению."""
extension = file_path.suffix.lower()
if not extension:
return "Файл без расширения"
return FILE_TYPES.get(
extension,
f"Другой файл ({extension})"
)
def main():
if not FOLDER.exists() or not FOLDER.is_dir():
print(f"Папка не найдена: {FOLDER}")
return
# Получаем список файлов
if SEARCH_SUBFOLDERS:
files = [
path for path in FOLDER.rglob("*")
if path.is_file() and path != OUTPUT
]
else:
files = [
path for path in FOLDER.iterdir()
if path.is_file() and path != OUTPUT
]
# Сортировка по имени файла
files.sort(key=lambda path: path.name.lower())
# Создаём документ Word
document = Document()
document.add_heading("Список файлов", level=1)
table = document.add_table(rows=1, cols=3)
table.style = "Table Grid"
table.alignment = WD_TABLE_ALIGNMENT.CENTER
table.autofit = False
# Ширина колонок
widths = [Cm(1.5), Cm(9), Cm(6)]
headers = ["№", "Название файла", "Тип файла"]
# Заполняем заголовок
for i, header in enumerate(headers):
cell = table.rows[0].cells[i]
cell.text = header
cell.width = widths[i]
cell.vertical_alignment = WD_CELL_VERTICAL_ALIGNMENT.CENTER
for paragraph in cell.paragraphs:
paragraph.alignment = WD_ALIGN_PARAGRAPH.CENTER
for run in paragraph.runs:
run.bold = True
run.font.size = Pt(10)
# Заполняем таблицу
for number, file_path in enumerate(files, start=1):
cells = table.add_row().cells
values = [
str(number),
file_path.name,
get_file_type(file_path)
]
for i, value in enumerate(values):
cells[i].text = value
cells[i].width = widths[i]
cells[i].vertical_alignment = (
WD_CELL_VERTICAL_ALIGNMENT.CENTER
)
for paragraph in cells[i].paragraphs:
if i == 0:
paragraph.alignment = WD_ALIGN_PARAGRAPH.CENTER
for run in paragraph.runs:
run.font.size = Pt(10)
# Сохраняем документ
document.save(OUTPUT)
print(f"Готово! Найдено файлов: {len(files)}")
print(f"Документ сохранён: {OUTPUT}")
if __name__ == "__main__":
main()