Было опубликовано две статьи:
1. Как создать скрипт для копирования логов с серверов.
2. Как создать окно для выбора параметров.
В этой статье представлен полный скрипт с графическим интерфейсом. Вот как он выглядит:
import tkinter as tk
from tkinter import ttk, filedialog, messagebox
import os
import shutil
import zipfile
shares_file = r'C:путь до папки с перечислением сетевых шар srv.txt'
local_path = r'C:\logs'
network_shares = {}
with open(shares_file, "r") as f:
for i, line in enumerate(f):
share_path = line.strip()
share_name = f"share{i+1}"
network_shares[share_name] = share_path
def select_date():
date_entry.delete(0, tk.END)
date_entry.insert(0, "Введенная дата")
def select_folder():
folder_path = filedialog.askdirectory()
folder_entry.delete(0, tk.END)
folder_entry.insert(0, folder_path)
def run_script():
file_date = date_entry.get()
folder_name = folder_entry.get()
Функция для запуска скрипта try
Эта функция принимает два входных сигнала: дату, введенную пользователем, и название папки. Она проверяет, существует ли папка с названием даты и названием папки. Если это произойдет, то будет создана новая папка с увеличивающимся числом в конце имени.
Вот как работает функция:
1. Она проверяет, существует ли в локальном пути папка с названием, соответствующим дате и имени папки.
2. Если папка существует, программа создает новую папку с увеличивающимся номером в конце имени, добавляя к номеру 1.
3. Этот процесс повторяется до тех пор, пока не будет найдено уникальное имя папки.
Эта функция гарантирует, что для каждого запуска скрипта будет создано уникальное имя папки.
try:
# Проверяем, есть ли папка с именем {date}_{folder_name}
target_folder = os.path.join(local_path, f"{file_date}_{folder_name}")
if os.path.exists(target_folder):
# Если папка существует, создаем новую с добавлением _1, _2 и т.д.
i = 1
while True:
new_target_folder = f"{file_date}_{folder_name}_{i}"
new_target_folder_path = os.path.join(local_path, new_target_folder)
if not os.path.exists(new_target_folder_path):
target_folder = new_target_folder_path # Обновляем target_folder
break
i += 1
# Создаем папку (если ее еще нет), используя обновленное имя target_folder
os.makedirs(target_folder, exist_ok=True)
for share_name, share_path in network_shares.items():
source_folder = os.path.join(share_path, folder_name)
if os.path.exists(source_folder):
for file in os.listdir(source_folder):
if file.startswith(file_date):
source_path = os.path.join(source_folder, file)
share_short_name = share_path[2:13]
file_name, file_ext = os.path.splitext(file)
new_file_name = f"{share_short_name}_{file_name}{file_ext}"
local_file_path = os.path.join(target_folder, new_file_name)
shutil.copy2(source_path, local_file_path)
print( f'Файл {file} успешно скопирован в папку {target_folder}' )
# Архивируем папку с именем {date}_{folder_name}
with zipfile.ZipFile(os.path.join(local_path, f'{file_date}_{folder_name}.zip'), "w") as zip_file:
for file in os.listdir(target_folder):
zip_file.write(os.path.join(target_folder, file), arcname=file, compress_type=zipfile.ZIP_DEFLATED)
messagebox.showinfo("Успешно", "Файлы скопированы!")
except Exception as e:
messagebox.showerror("Ошибка", f"Произошла ошибка: {e}")
root = tk.Tk()
root.title("Копирование файлов")
date_label = tk.Label(root, text="Дата (ГГГГ-ММ-ДД):")
date_label.grid(row=0, column=0, padx=10, pady=10)
date_entry = tk.Entry(root)
date_entry.grid(row=0, column=1, padx=10, pady=10)
date_button = tk.Button(root, text="Выбрать дату", command=select_date)
date_button.grid(row=0, column=2, padx=10, pady=10)
folder_label = tk.Label(root, text="Путь к папке с логами:")
folder_label.grid(row=1, column=0, padx=10, pady=10)
folder_entry = tk.Entry(root)
folder_entry.grid(row=1, column=1, padx=10, pady=10)
folder_button = tk.Button(root, text="Путь к папке с логами Aplication Servers:", command=select_folder)
folder_button.grid(row=1, column=2, padx=10, pady=10)
run_button = tk.Button(root, text="Запустить", command=run_script)
run_button.grid(row=2, column=1, padx=10, pady=10)
root.mainloop()
Эта статья является продолжением предыдущих двух. Функция календаря не была реализована. Также есть смысл перевести скрипт с языка Python в формат.exe, чтобы программу можно было запускать без необходимости установки Python.
Полезные статьи
1. Как создать скрипт для копирования логов с серверов.