После длинных выходных иногда нам хочется встретиться с коллегами и поделиться своими историями о том, что произошло за выходные, или, что еще лучше, услышать последние сплетни. Но нет, вы должны прервать это, потому что вы несете ответственность за утреннюю рутину перемещения, переименования или удаления файлов из одного места в другое, чтобы начать свой день.
Было бы неплохо, если бы вы могли нажать кнопку, чтобы выполнить все утомительные задачи?
Этот пример покажет один из способов высвободить время, чтобы услышать лучшую часть истории вашего коллеги.
В этом примере мы будем использовать электронную таблицу в качестве файла конфигурации. Затем мы будем использовать файл конфигурации в нашем скрипте, который перемещает, переименовывает и удаляет файлы. Электронная таблица может выглядеть примерно так:
Теперь как в моей статье Базовое преобразование Excel в словарь. Мы начнем с установки библиотеки pandas. После того, как вы установили pandas, вы можете использовать функцию read_excel для переноса данных электронной таблицы в DataFrame.
Затем давайте прочитаем данные в фрейм данных под названием «options», используя метод to_dictpython.
import pandas as pd # Read the spreadsheet into a DataFrame df = pd.read_excel('morning_joe.xlsx') # Convert the DataFrame into a dictionary options = df.set_index('Option').to_dict()['Value'] #print the variable options print(f'here is the output for the variable options {options}')
Метод примет первый столбец в качестве ключа словаря, а остальные столбцы — в качестве значений для этого ключа. Этот пример позволяет нам использовать столбец параметров в качестве ключа словаря, а остальные данные — в качестве значения для этого ключа.
Вот пример вывода(Как видите, в результате отображаются все необходимые данные, относящиеся к столбцу параметра и столбцу значения):
{'source_directory': '/home/user/documents', 'target_directory': '/home/user/archives', 'file_pattern': '*.txt', 'rename': True, 'delete': False }
Далее мы будем использовать два дополнительных модуля Python:
модуль pathlib, точнее, класс path
(который обеспечивает удобный способ работы с путями к файлам и каталогами)
модуль даты и времени(который позволит нам генерировать метку времени)
from pathlib import Path import datetime
Теперь самое интересное: мы создадим функцию move_and_rename_files() и передадим словарь параметров с набором значений по умолчанию, которые мы преобразовали из нашей электронной таблицы.
Теперь у нас есть словарь параметров, и мы можем точно так же указать конфигурацию для нашего скрипта. как любой другой словарь. Например, вы можете использовать его в следующей функции:
from pathlib import Path import datetime def move_and_rename_files(options={'source_directory': '', 'target_directory': '', 'file_pattern': '*', 'rename': False, 'delete': False}): # Extract options from the dictionary source_directory = Path(options['source_directory']) target_directory = Path(options['target_directory']) file_pattern = options['file_pattern'] rename = options['rename'] delete = options['delete']
Далее создадим список всех файлов, соответствующих шаблону, и сохраним их в переменной files. Затем мы создадим новый путь к файлу, который будем использовать, если нам понадобится переименовать, переместить или удалить файлы.
Get a list of all matching files in the source directory files = list(source_directory.glob(file_pattern)) # Iterate over the files and move and/or rename them for file in files: # Extract the filename and extension from the file path filename = file.stem extension = file.suffix # Construct the new file path new_file = target_directory / (filename + extension)
Теперь особый соус, давайте создадим три условия для завершения нашего скрипта.
# If renaming is enabled, add a timestamp to the filename if rename: new_file = target_directory / (filename + '-' + datetime.datetime.now().strftime('%Y%m%d%H%M%S') + extension) # Move the file to the target directory file.replace(new_file) # If deleting is enabled, delete the file from the source directory if delete: file.unlink()
Функция переместит и переименует все файлы в исходном_каталоге, которые соответствуют шаблону файла, указанному в словаре параметров.
Если для параметра rename установлено значение True в словаре параметров, функция добавит метку времени к имени каждого файла перед его перемещением в target_directory.
Если для удаления установлено значение True в словаре параметров, функция удалит каждый файл из исходного_каталога после его перемещения в целевой_каталог.
Функция пропустит эти шаги, если для переименования или удаления установлено значение False в словаре параметров.
осталось только вызвать функцию и приготовиться к разговору за чашечкой кофе.
# Use the options dictionary as the default values for the options argument in the move_and_rename_files function move_and_rename_files(options)
Ну, это пока. Обязательно подписывайтесь и подписывайтесь на меня. Следите за обновлениями; Мы добавим в этот скрипт некоторые функции обработки ошибок и интересные функции. Удачного кодирования!
Вот несколько ресурсов, которые могут быть вам полезны:
Полный сценарий:
import pandas as pd from pathlib import Path import datetime # Read the spreadsheet into a DataFrame df = pd.read_excel('morning_joe.xlsx') # Convert the DataFrame into a dictionary options = df.set_index('Option').to_dict()['Value'] print(f'here is the output for the variable options {options}') def move_and_rename_files(options={'source_directory': '','target_directory': '', 'file_pattern': '*', 'rename': False, 'delete': False}): # Extract options from the dictionary source_directory = Path(options['source_directory']) target_directory = Path(options['target_directory']) file_pattern = options['file_pattern'] rename = options['rename'] delete = options['delete'] print(source_directory) # Get a list of all matching files in the source directory files = list(source_directory.glob(file_pattern)) # Iterate over the files and move and/or rename them for file in files: # Extract the filename and extension from the file path filename = file.stem extension = file.suffix # Construct the new file path new_file = target_directory / (filename + extension) # If renaming is enabled, add a timestamp to the filename if rename: new_file = target_directory / (filename + '-' + datetime.datetime.now().strftime('%Y%m%d%H%M%S') + extension) # Move the file to the target directory file.replace(new_file) # If deleting is enabled, delete the file from the source directory if delete: file.unlink() move_and_rename_files(options)