Я инженер -механик, специализирующийся на «NVH» (суровость вибрации шума). В некоторых случаях, когда мы пытаемся проверить механический компонент, мы должны провести много измерений в течение длительного периода времени. Измерения NVH требуют много дискового пространства и в то же время высокоскоростной операции записи. Вот почему я решил написать код, который помогает мне автоматически копировать или перемещать файлы из данного каталога (локальный) в другой (сеть), в зависимости от возраста и типа файла или имени.
Для этого я решил использовать Python в качестве языка программирования и не использовать ни одной библиотеки. Вы можете клонировать это из https://github.com/tmeftah/dir-watcher
import configparser config = configparser.ConfigParser(allow_no_value=True) config.read('conf.cfg')
Создайте файл conf.cfg
[SETTING] timeinterval = 10 src_path = /dir_to_watch/*.txt dist_path = /dir_to_save_to/test operation = copy
- TimeInterval много минут показывают файл быть
- src_path Путь источника, где искать конкретный шаблон файла
- dist_path папка с дистинацией, где файлы должны быть перемещены/скопированы в
- Операция = ‘Копия’ для копирования/вставки или ‘Move’ разрезать/прошло
# app.py . .. ... timeinterval = int(config.get('SETTING', 'timeinterval')) src_path = config.get('SETTING', 'src_path') dist_path = config.get('SETTING', 'dist_path') operation = config.get('SETTING', 'operation')
# app.py . .. ... file_list = glob.glob(src_path) # get all files in scr_path folder
шаблон поиска на src_path устанавливаются в соответствии с пакетом Python “Glob.glob”. Для получения дополнительной информации, пожалуйста, посмотрите https://docs.python.org/3/library/glob.html
# app.py . .. ... for file in file_list: file_datetime = datetime.fromtimestamp(os.path.getctime(file)) filename = os.path.basename(file) now = datetime.now() diff = now - file_datetime if diff.seconds > timeinterval : if operation == "copy": file_exist = os.path.isfile(os.path.join(dist_path,filename)) if file_exist: next else: try: shutil.copy(file,os.path.join(dist_path,filename)) logging.info(f'file {filename} is copied successfully') except shutil.Error : logging.error(f'copy file {filename} failed') next if operation == "move": try: shutil.move(file,os.path.join(dist_path,filename)) logging.info(f'file {filename} is moved successfully') except shutil.Error: logging.error(f'moving file {filename} failed') next
Я добавляю тот же регистратор и отпечатки, чтобы отслеживать, что сделал этот сценарий
import os import sys import glob from datetime import datetime import time import shutil import configparser import logging import ctypes # set title of the console window ctypes.windll.kernel32.SetConsoleTitleW("Dir-Watcher by Tarek Meftah") logging.basicConfig(filename='log.log', filemode='a', format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',level=logging.INFO) config = configparser.ConfigParser(allow_no_value=True) config.read('conf.cfg') timeinterval = int(config.get('SETTING', 'timeinterval')) src_path = config.get('SETTING', 'src_path') dist_path = config.get('SETTING', 'dist_path') operation = config.get('SETTING', 'operation') logging.info(100*'*') logging.info('start watching') logging.info(f'src_path = {src_path}') logging.info(f'dist_path = {dist_path}') logging.info(f'operation = {operation}') logging.info(100*'*') print() print() print(100* '*') print() print(' created by Tarek Meftah ') print(' watch folder for changes and copy or move files to another distination folder.') print() print(100* '*') print() print() print(f' + watching folder {src_path} for change ') while True: try: file_list = glob.glob(src_path) # get all files in scr_path folder for file in file_list: file_datetime = datetime.fromtimestamp(os.path.getctime(file)) filename = os.path.basename(file) now = datetime.now() diff = now - file_datetime if diff.seconds > timeinterval : if operation == "copy": file_exist = os.path.isfile(os.path.join(dist_path,filename)) if file_exist: next else: try: shutil.copy(file,os.path.join(dist_path,filename)) logging.info(f'file {filename} is copied successfully') except shutil.Error : logging.error(f'copy file {filename} failed') next if operation == "move": try: shutil.move(file,os.path.join(dist_path,filename)) logging.info(f'file {filename} is moved successfully') except shutil.Error: logging.error(f'moving file {filename} failed') next time.sleep(1) except KeyboardInterrupt: confirm = input('Enter "yes" to cancel or "no" to keep running [yes/no]:').strip().lower() if confirm == 'yes' or confirm == "y": logging.info(47* '*'+' Exit '+47* '*' +'\n') break elif confirm == 'no' or confirm == "n": print(" + Keep runnning!") continue else: print (' + Sorry, no valid answer...') continue except Exception as e: logging.error(f'error: {e.message} ')
Надеюсь, вы сможете использовать этот скрипт на своей ежедневной работе. Я использовал Pyinstaller Чтобы сгенерировать исполняемый файл, который я могу использовать его там, где я хочу, и не нужно устанавливать Python.
Оригинал: “https://dev.to/tmeftah/dir-watcher-4g32”