Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.12.2019, 08:50   #1
Kjeck
Пользователь
 
Регистрация: 13.12.2019
Сообщений: 12
Вопрос Задача по работе с файловой системой или какой язык программирования выбрать, в том числе для изучения

Задача:
В указанной папке оставить только файлы, наименование которых есть в указанной папке источнике (расширения файлов в папках различаются), остальные файлы переместить в другой каталог.
Должен быть интерактивный диалог, с возможностью выбора основного каталога и каталога источника в ОС Windows

Краткий алгоритм:
1. Во временную таблицу из каталога источника записываем имена файлов без расширения
2. Из основного каталога переносим файлы имен, которых без учета расширения нет во временной таблице в программно созданную поддиректорию, например «Remove»


А теперь вопрос Вернее, три вопроса:

1. Можно ли подобное осуществить на Python, Java, Java JS ?

2. На каком языке программирования проще реализовать?
ИЛИ
С каким языком лучше ознакомиться для быстрой реализации данной задачи?

3. В идеале, что читать или смотреть для скорейшей реализации задачи?

Как вариант может плагин под TotalСmd, НО И тогда актуальны вопросы 2 и 3 …
Kjeck вне форума Ответить с цитированием
Старый 23.01.2020, 21:53   #2
Kjeck
Пользователь
 
Регистрация: 13.12.2019
Сообщений: 12
По умолчанию

Восполнилась старая шутка:
• Задаёшь вопрос на европейском форуме - тебе долго и подробно на него отвечают.
• Задаёшь вопрос на американском форуме - тебе говорят, что ты м*дак, но на вопрос отвечают.
• Задаёшь вопрос на русском форуме - тебе долго и подробно объясняют, что ты м*дак и отправляют искать ответ самостоятельно.

Хорошо что здесь никак не обозвали

Но упорное молчание и ни одного ответа в теме, которой более месяца и более 230 просмотров, предполагает, что ответ следует искать самому
Что собственно я и сделал ...
Подробнее в следующем посте …

Последний раз редактировалось Kjeck; 23.01.2020 в 21:58.
Kjeck вне форума Ответить с цитированием
Старый 23.01.2020, 21:55   #3
Kjeck
Пользователь
 
Регистрация: 13.12.2019
Сообщений: 12
Сообщение

Ну в общем сам спросил – сам ответил
Может кому пригодится …

>> 1. Можно ли подобное осуществить на Python, Java, Java JS ?
>> 2. На каком языке программирования проще реализовать?
ИЛИ С каким языком лучше ознакомиться для быстрой реализации данной задачи?

Я выбрал Python
Причины:
• Прост и в изучении и простой синтаксис
• Сильное комьюнити, большое количество доступных библиотек и модулей
• Можно работать с базами данных без использования SQL запросов (насколько широки возможности пока не изучал)
• На Python реализуются интересные мне задачи: нейронные сети, машинное обучение, ИИ …
• Можно создавать программы под любую ОС, в том числе мобильные приложения под Android
• Перспективный, как мне показалось …

>> 3. В идеале, что читать или смотреть для скорейшей реализации задачи?

Для реализации поставленной задачи мне понадобилось примерно 10 вечеров (ед. измерения вечер = 2-6 астрономических часа )
• Пару вечеров на изучение материалов какой язык выбрать и с чего начать его изучение.
• Пару вечеров на изучение книги «A Byte of Python» или русское название «Укус Питона», читать имеет смысл с версии книги 1.9, т.к. она обновлена по 3-ей версии Питона, Питон версии 2 не поддерживается разработчиком с 2020 года, я читал книгу версии 2.01
• Еще тройка вечеров ушло на практические эксперименты с примерами из книги и поиск доп. инфо, например, как из скрипта компилировать исполняемый exe-файл, или как с БД работать, как сделать визуальный интерфейс или приложение под Андроид …
Эти ссылки давать не буду, т.к. материала много, кому-то нравится читать, кому-то на ютуб смотреть, опять стилистика изложения всем тоже нравится разная ….
Для себя что заинтересовало – сохранил для последующего изучения
• В принципе для описанной мной задачи вполне хватило книги «A Byte of Python» и одного дополнительного видео по работе с файловой системой методами модуля “os”
• Ну и пару вечеров на создания самого скрипта, пока консольной версии

Ссылка в песочнице на скрипт:
https://repl.it/@Kjeck/RAW-File-Remover

Буду рад замечаниям и комментариям по стилистике написания и оформления кода, и любым дельным советам …

Последний раз редактировалось Kjeck; 24.01.2020 в 03:17.
Kjeck вне форума Ответить с цитированием
Старый 26.01.2020, 08:35   #4
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,306
По умолчанию

Kjeck
Цитата:
Но упорное молчание и ни одного ответа в теме, которой более месяца и более 230 просмотров, предполагает, что ответ следует искать самому
Ну попал я на этот пост только сегодня, так ведь тоже бывает.

Цитата:
1. Можно ли подобное осуществить на Python, Java, Java JS ?
...
Я выбрал Python
Цитата:
Причины:
• Прост и в изучении и простой синтаксис
...
Да, описанные вами свойства подходят для этого языка.
Но у Python есть огромный недостаток.
Его не получится поставить в рабочей сети в приличной организации. Ваше решение годится только для дома и мелкой конторки.

Для решения вашей задачи я бы выбрал Командную строку (и у меня есть решение).
Это тоже язык программирования, который годится для управления файлами и который всегда присутствует на ПЭВМ.
Конечно, если там установлена ОС.

Простота - это для тех, кто не хочет напрягать мозг.
И да, для решения задач описанных Вами выше, Python - это то что надо.
Но полученное Вами решение - это как из пушки по воробьям.
Правильное, потому что получили таки частичное решение (для дома), но дорогое, потому что пришлось ставить то, что для решения исходной задачи совершенно не нужно.

Ну вот. Получилось как в Вашем анекдоте.
Много написал и не понятно о чём. Решения не дал и не дам.
Эту задачу решают мои студенты.
PS: Правда, за длительный период так и не нашлось решателя
Но надежды не покидают меня.
PSS: Вероятно Вам хотелось изучить какой то язык. И выбранная вами задача помогла решиться на такой поступок, как заняться изучением Python. Это замечательно.
На мой некомпетентный взгляд умение программировать - это не знать язык программирования, а уметь алгоритмизировать задачу.
Конечное решение, выбор языка, важное, но второстепенное.
Например, для решения поставленной Вами задачи можно было бы выбрать и VBScript, который так же ставится по умолчанию с ОС.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 26.01.2020, 17:59   #5
Kjeck
Пользователь
 
Регистрация: 13.12.2019
Сообщений: 12
По умолчанию

Цитата:
Сообщение от ViktorR Посмотреть сообщение
PSS: Вероятно Вам хотелось изучить какой то язык. И выбранная вами задача помогла решиться на такой поступок, как заняться изучением Python.
Да, верно - так оно и есть

Цитата:
Сообщение от ViktorR Посмотреть сообщение
На мой некомпетентный взгляд умение программировать - это не знать язык программирования, а уметь алгоритмизировать задачу.
Полностью с вами согласен

Цитата:
Сообщение от ViktorR Посмотреть сообщение
И да, для решения задач описанных Вами выше, Python - это то что надо.
Но полученное Вами решение - это как из пушки по воробьям.
Надо же с чего-то начинать ...
Не сразу же с ИИ ..., первые задачи всегда были как из пушки по воробьям ...
Дальнейшие будут сложнее и сложнее ...

Последний раз редактировалось Kjeck; 26.01.2020 в 18:10.
Kjeck вне форума Ответить с цитированием
Старый 26.01.2020, 18:29   #6
Desc
Участник клуба
 
Аватар для Desc
 
Регистрация: 21.11.2007
Сообщений: 1,063
По умолчанию

Цитата:
Сообщение от Kjeck Посмотреть сообщение
Ссылка в песочнице на скрипт
На мой взгляд, скрипт лучше бы в тему выложили.
I am not a wizard, I am just learning.
Desc вне форума Ответить с цитированием
Старый 26.01.2020, 19:01   #7
Kjeck
Пользователь
 
Регистрация: 13.12.2019
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Desc Посмотреть сообщение
На мой взгляд, скрипт лучше бы в тему выложили.
Да, пожалуйста

Код:
# raw__file_remover.py

_names = 'RAW File Remover'
__version__ = '1.0'

_descrt = '''
DESCRIPTION:
В результате выполнения программы в выбранном каталоге, перемещаются в подкаталог Remove, файлы имен которых нет в выбранном каталоге источнике.
Соответствие файлов устанавливается по имени без учета расширения.
Расширения файлов задаются в переменных «ext_src» и «ext_trg».

Практическое применение:
на основании отобранных фотографий в формате jpeg оставить для обработки raw файлы.
'''

import os

def prn_cpr(head=False):
    rep = 70
    if head:
        print('_'*rep)
        print(_names, 'ver: ',__version__)
        print(_descrt)
    else:
        print('\n©Kotelnikov Evgeny  aka Kjeck')
        print('_'*rep) 

def get_lsfiles(param):
    #Формирует список файлов.
    if param == 1:
        text = 'Директория источник:   '
    elif param == 2:
        text = 'Директория назначения: '
    else:
        text = 'Указать директорию(<Ctr+C> для отмены): '
    try:
        path = input(text)
        if path == '': # Enter
             get_lsfiles(3)
    except EOFError: # Ctr+D
        print('(EOF) Ошибка ввода')
        get_lsfiles(3)
    except KeyboardInterrupt: # Ctr+C
        print('Отмена')
        prn_cpr()
        exit()

    # Удалим слеш в конце если он есть
    s = path[-1]
    if s== '/' or s=='\\':
        path = path[:len(path)-1]

    global path_trg
    path_trg = path
        
    if not os.path.exists(path):
        print('Такой директории не существует')
        get_lsfiles(3)
    else:
        ls = os.listdir(path)
        if len(ls) == 0:
            print('Нет файлов в директории')
            get_lsfiles(3)
        else:
            return ls

def del_ext(ls, lext):
    #Удаляет папки и расширения у файлов в списке
    i=0
    while i < len(ls): 
        element = ls[i]
        #Пока не знаю как понять файл это или папка, поэтому предположу, что
        #если в имени нет расширения то это папка и удалю ее из списка файлов
        #для большей простоты - нет точки = нет расширения 
        if element.find('.') == -1:
            del ls[i]
            continue
        ls[i] = element[0:len(element)-lext]
        i+=1
    return ls

def remove_files(ls_src, ls_trg, ext_trg):
    #Перемещает файлы в каталоге назначения в папку Remove

    # Создадим папку
    folder = path_trg+os.sep+'Remove'
    os.makedirs(folder, exist_ok=True)
    if not os.path.exists(folder):
        print('Не удалось создать папку: ',folder)
        return -1

    # Переберем список файлов директории назначения и если имени файла нет
    # в списке исходных файлов переместим файл в каталог Remove
    i=0
    total_remove = 0
    while i < len(ls_trg):
        element = ls_trg[i]
        if not element in ls_src:
            file = path_trg+os.sep+element+'.'+ext_trg
            if os.path.exists(file):
                try:
                    os.replace(file, folder+os.sep+element+'.'+ext_trg)
                    total_remove+=1
                except:
                    return -1
        i+=1
    return total_remove
           
def main():

    prn_cpr(True)
    
    #Расширения файлов в каталогах
    ext_src = 'jpg'
    ext_trg = 'cr2'

    # Получим cписки файлов в каталогах
    ls_src = get_lsfiles(1)
    ls_trg = get_lsfiles(2)
    
    # Удалим расширения и папки из списков файлов 
    ls_src = del_ext(ls_src, len(ext_src)+1)
    ls_trg = del_ext(ls_trg, len(ext_trg)+1)

    # Для статистики
    total_src = len(ls_src)
    total_trg = len(ls_trg)
        
    # Переместим не нужные файлы в каталоге назначения
    res = remove_files(ls_src, ls_trg, ext_trg)
    if res>=0:
        # Вывод статистики
        print('\nФайлы в <',path_trg,'> обработаны')
        print('Файлов в каталоге источнике:  ',total_src)
        print('Файлов в каталоге назначения: ',total_trg)
        print('Удалено файлов:               ',res)
    else:
        print('Что-то пошло не так :(')
    prn_cpr()

main()

Последний раз редактировалось Kjeck; 26.01.2020 в 19:08.
Kjeck вне форума Ответить с цитированием
Старый 26.01.2020, 20:43   #8
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,306
По умолчанию

Kjeck
Цитата:
#Пока не знаю как понять файл это или папка,
Тут https://pythonworld.ru/moduli/modul-os-path.html нашёл:
os.path.isdir(path) - является ли путь директорией.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 27.01.2020, 03:12   #9
Kjeck
Пользователь
 
Регистрация: 13.12.2019
Сообщений: 12
По умолчанию

Цитата:
Сообщение от ViktorR Посмотреть сообщение
Kjeck

Тут https://pythonworld.ru/moduli/modul-os-path.html нашёл:
os.path.isdir(path) - является ли путь директорией.
Отлично ! Спасибо!
Заменю ...
Kjeck вне форума Ответить с цитированием
Старый 27.01.2020, 13:54   #10
kvitaliy
Участник клуба
 
Регистрация: 17.05.2011
Сообщений: 1,660
По умолчанию

Я тоже фотографией увлекаюсь. Сам не часто, но тоже сталкивался с такой проблемой после отбора годных фото от совсем никудышных.
По мотивам вашей программы набросал себе подобную, вернее полноценное приложение.
Я снимаю в RAW+JPEG, мне надо переносить\удалять всю пару, да и фотоаппараты разных марок, не только Canon, а по сему есть разные названия RAW. Потому сделал независимо от расширения - из папки источника переносятся все файлы, которые не имеют двойников в виде JPG в папке назначения.
Вот так получилось:

remove.jpg

Спасибо за идею!
kvitaliy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какой язык программирования выбрать? Любовь89 Помощь студентам 7 08.10.2010 17:30
Какой язык лучше всего выбрать после завершения изучения языка Паскаль. VektorAB Помощь студентам 4 09.07.2010 07:16
Какой язык выбрать для изучения? titan-prog Свободное общение 17 16.07.2008 21:43