Last active
September 16, 2021 22:18
-
-
Save kylefelipe/ff981cc917fb8734cf4a09ec42a9a607 to your computer and use it in GitHub Desktop.
This script rename files using a csv list that contains img_Id, file_name, new_name, receiving_folder it will create all new folders needed to paste the copies And paste them inside the receiving_folder
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# This script rename files using a csv list that contains | |
# img_Id, file_name, new_name, receiving_folder | |
# it will create all new folders needed to paste the copies | |
# And paste them inside the receiving_folder | |
# Created by Kyle Felipe | |
# kylefelipe at gmail.com | |
import os | |
import csv | |
from shutil import copy2 as copy | |
photo_path = None | |
sheet_path = 'planilha_renomeacao.csv' | |
extensions = (".jpg", '.JPG') | |
files = {} | |
sheet_data = {} | |
delimiter = ',' | |
new_folders = [] | |
not_listed = [] | |
def get_files(file_data, dst=None, extensions=extensions): | |
print("Listando arquivos") | |
img_path = os.getcwd() | |
if dst: | |
img_path = os.path.join(os.getcwd(), dst) | |
for item in os.listdir(img_path): | |
if item.endswith(extensions): | |
filename = item[:-4] | |
ext = item[-3:] | |
key_list = file_data.keys() | |
if filename in key_list: | |
file_data[filename]['origin'] = os.path.join(img_path, item) | |
file_data[filename]['file_name'] = item[:-4] | |
file_data[filename]['ext'] = ext | |
else: | |
not_listed.append(item) | |
def get_sheet_data(files_data, sheet=None, dst=None): | |
dst_folder = os.getcwd() | |
if dst: | |
dst_folder = os.path.join(os.getcwd(), dst) | |
with open(sheet_path, 'r') as csvfile: | |
csv_reader = csv.reader(csvfile, delimiter=delimiter) | |
content = [] | |
folder_list = [] | |
for _, old_name, new_name, folder in list(csv_reader)[1:]: | |
if not files_data.get(old_name): | |
files_data[old_name] = {} | |
files_data[old_name]['old_name'] = old_name | |
files_data[old_name]['new_name'] = new_name | |
files_data[old_name]['folder'] = folder | |
ext = files.get('ext') or 'jpg' | |
new_file_name = f"{new_name}.{ext}" | |
files_data[old_name]['dst'] = os.path.join(dst_folder, folder, new_file_name) | |
folder_list.append(folder) | |
for folder in list(set(folder_list)): | |
new_folders.append(folder) | |
def create_images(name_list, dst=None): | |
"""To test""" | |
if dst: | |
folder = os.path.join(os.getcwd(), dst) | |
else: | |
folder = os.getcwd() | |
for name in name_list.keys(): | |
file_path = os.path.join(folder, f"{name}.JPG") | |
with open(file_path, "w") as file: | |
file.write('') | |
def create_new_folders(folders, dst=None): | |
print('Criando pastas: ') | |
created = [] | |
not_created = [] | |
dst_folder = os.getcwd() | |
if dst: | |
dst_folder = os.path.join(os.getcwd(), dst) | |
for folder in folders: | |
new_folder = os.path.join(dst_folder, folder) | |
if not os.path.isdir(new_folder): | |
created.append(new_folder) | |
print(f"Criando pasta {new_folder}") | |
os.makedirs(new_folder) | |
else: | |
not_created.append(new_folder) | |
print(f"Foram criadas {len(created)} pastas") | |
if len(not_created) > 0: | |
print( f"Pastas não criadas:") | |
for folder in not_created: | |
print(folder) | |
def copy_files_to_folder(files): | |
print('Copiando arquivos:') | |
for key in files.keys(): | |
file = files[key] | |
if os.path.isfile(file['origin']): | |
new_file_name = '.'.join([file['new_name'], file['ext']]) | |
old_file_name = '.'.join([file['old_name'], file['ext']]) | |
src = file['origin'] | |
dst = file['dst'] | |
print('De -> para', src, ' -> ', dst) | |
copy(src, dst) | |
else: | |
not_listed.append(file) | |
if __name__ == '__main__': | |
src = 'fotos' | |
dst = 'fotos_organizadas' | |
get_sheet_data(files, dst=dst) | |
get_files(files, dst=src) | |
create_new_folders(new_folders, dst=dst) | |
copy_files_to_folder(files) | |
print('Arquivos não listados: ', len(not_listed)) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment