Skip to content

Instantly share code, notes, and snippets.

@Lavrynenko
Created January 15, 2019 04:39
Show Gist options
  • Save Lavrynenko/7d8b340438144441bf1e327cff0c1034 to your computer and use it in GitHub Desktop.
Save Lavrynenko/7d8b340438144441bf1e327cff0c1034 to your computer and use it in GitHub Desktop.
#Programm for resize pictures here: http://lavrynenko.com/wp-content/uploads/2019/01/magick.exe
import ftplib
import os
import sys
import subprocess
def autorization():
host = str(input('Host?: ')) #FTP
ftp_user = str(input('User?: ')) #Login
ftp_password = str(input('Password?: ')) #Password
#После чего каждую переменную подключим к авторизации:
print('Попытка соединения с FTP-сервером', host)
print('Login:', ftp_user)
print('Password:', ftp_password)
ftp = ftplib.FTP(host, ftp_user, ftp_password)
welcome_text = ftp.getwelcome()
print(welcome_text) # Вывели на экран Welcome-сообщение сервера
directory_list = ftp.nlst() # загоняем в переменную list список содержимого директории
print('Структура информации на сервере:\n')
for directory in directory_list:
print(directory)
print('\nСоздаем список каталогов\n')
directory_listing = []
catalog_or(ftp, directory_listing)
def catalog_or(ftp, directory_listing):
directory_list = ftp.nlst() # загоняем в переменную list список содержимого директории
print('Структура информации на сервере:\n')
for directory in directory_list:
print(directory)
print('\nСоздаем список каталогов\n')
directory_listing = []
for director in directory_list:
try:
ftp.cwd(director)
directory_listing.append(director)
ftp.sendcmd('cdup')
except:
ftplib.error_perm: 550
directory_listing = '\\'.join(directory_listing)
print('На сервере имеются следующие каталоги:\n', directory_listing, '\n')
menu(ftp, directory_listing)
def menu(ftp, directory_listing):
menu_directory = int(input(' 1 - Выбрать каталог для работы\n 2 - Выйти вверх\n 3 - Работать в текущем каталоге\n >>> '))
if menu_directory == 1:
down(ftp, directory_listing)
elif menu_directory == 2:
up(ftp, directory_listing)
elif menu_directory == 3:
work(ftp, directory_listing)
def up(ftp, directory_listening):
print('Выходим вверх')
ftp.sendcmd('cdup')
#menu(ftp, directory_listening)
catalog_or(ftp, directory_listening)
def down(ftp, directory_listening):
print('Войти в каталог \n')
work_directory = str(input('Введите название каталога\n >>> '))
print('Входим в каталог:', work_directory)
ftp.cwd(work_directory)
print(ftp.nlst())
catalog_or(ftp, directory_listening)
def work(ftp, directory_listening):
print('Работаем!')
# Определяем место, где находится сам код программы
print('sys.argv[0] =', sys.argv[0])
pathname = os.path.dirname(sys.argv[0])
print('Скрипт находится:', pathname)
print('Полный путь к скрипту:', os.path.abspath(pathname))
#Получаем список всего содержимого в папке на сервере
directory_list = ftp.nlst() # загоняем в переменную list полный список содержимого директории
print('Структура информации на сервере:\n', directory_list)
#Формируем список только файлов
file_list = [] #список только файлов
directory_listing = [] #список только каталогов
for director in directory_list:
try:
ftp.cwd(director)
directory_listing.append(director)
ftp.sendcmd('cdup')
except:
ftplib.error_perm: 550
print('Каталоги:', directory_listing)
file_list = list(set(directory_list) - set(directory_listing))
print('Только файлы:', file_list, '\n')
#Определяем расширение файла
for file in file_list:
#file_size = ftp.size(file)
file_extention = file.split('.')[-1]
if file_extention == 'jpg':
print(file, ' = jpg')
print('Загружаем файл', file, 'c FTP')
with open(file, 'wb') as local_file:
ftp.retrbinary('retr ' + file, local_file.write)
print(file, 'загружен')
orig_file = 'orig_' + file
os.rename(file, orig_file)
subprocess.run('{} {} {} {} {}'.format('magick.exe', orig_file, '-quality', '50', file))
print(file, 'обработан')
#А теперь загоняем на FTP обработанный файл + оригинальный
with open(file, 'rb') as file_to_upload:
ftp.storbinary('stor ' + file, file_to_upload)
print(file, 'успешно загружен на FTP')
with open(orig_file, 'rb') as file_to_upload:
ftp.storbinary('stor ' + orig_file, file_to_upload)
print(orig_file, 'успешно загружен на FTP')
file_size = os.path.getsize(file)
orig_file_size = os.path.getsize(orig_file)
print('\n Файл', file, 'занимал', orig_file_size, 'kb, а теперь занимает', file_size, 'kb.')
print(' Экономим:', orig_file_size - file_size, 'kb\n')
#Убираем файлы на компьютере
os.remove(orig_file)
print(orig_file, 'удален')
os.remove(file)
print(file, 'удален\n')
elif file_extention == 'png':
print(file, ' = png')
print('Загружаем файл', file, 'c FTP')
with open(file, 'wb') as local_file:
ftp.retrbinary('retr ' + file, local_file.write)
print(file, 'загружен')
orig_file = 'orig_' + file
os.rename(file, orig_file)
subprocess.run('{} {} {} {} {}'.format('magick.exe', orig_file, '-quality', '91', file))
print(file, 'обработан')
#А теперь загоняем на FTP обработанный файл + оригинальный
with open(file, 'rb') as file_to_upload:
ftp.storbinary('stor ' + file, file_to_upload)
print(file, 'успешно загружен на FTP')
with open(orig_file, 'rb') as file_to_upload:
ftp.storbinary('stor ' + orig_file, file_to_upload)
print(orig_file, 'успешно загружен на FTP')
file_size = os.path.getsize(file)
orig_file_size = os.path.getsize(orig_file)
print('\n Файл', file, 'занимал', orig_file_size, 'kb, а теперь занимает', file_size, 'kb.')
print(' Экономим:', orig_file_size - file_size, 'kb\n')
#Убираем файлы на компьютере
os.remove(orig_file)
print(orig_file, 'удален')
os.remove(file)
print(file, 'удален\n')
elif file_extention != 'png' or 'jpg':
print(file, ' = другое расширение\n')
def index():
autorization()
index()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment