-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathRAW_file_remover.py
155 lines (128 loc) · 5.26 KB
/
RAW_file_remover.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
# raw__file_remover.py
_name = 'RAW File Remover'
__version__ = '1.1'
_descrt = '''
DESCRIPTION:
В результате выполнения программы в выбранном каталоге, перемещаются в подкаталог Remove, файлы имен которых нет в выбранном каталоге источнике.
Соответствие файлов устанавливается по имени без учета расширения.
Расширения файлов задаются в переменных «ext_src» и «ext_trg».
Практическое применение:
на основании отобранных фотографий в формате jpeg оставить для обработки raw файлы.
'''
_history = '''
ver. 1.1 - Добавлена возможность выхода по клавище <Q> на этапе ввода директорий
'''
import os
def prn_cpr(head=False):
rep = 70
if head:
print('_' * rep)
print(_name, '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> или Q для отмены): '
try:
path = input(text)
if path == '': # Enter
get_lsfiles(3)
elif path == 'Q' or path == 'q':
print('Отмена')
prn_cpr()
exit()
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()
if __name__ == "__main__":
main()