நாம் ஏதாவது முக்கியமான கூட்டத்திற்கான படவில்லை காட்சியை தயார்செய்து முடிவுபெறும் நிலையில் ஆழ்ந்து ஈடுபாட்டுடன் பணிபுரிந்து கொண்டிருப்போம் அல்லது அந்த கூட்டத்திற்கான அறிக்கையை தயார்செய்து கொண்டிருப்பதில் ஆழ்ந்திருப்போம் இவ்வாறான நிலையில் திடீரெனகைதவறுதலாக அல்லது ஏதோவொரு காரணத்தினால் அவ்வாறு தயார் செய்யப்பட்டுக் கொண்டிருக்கும் கோப்பானது அழிந்து போய்விட்டது எனில் இவ்வளவுநேரம் கடினமாக உழைத்து தயார்செய்த கோப்பினை எவ்வாறு மீண்டும் உருவாக்குவது அல்லது மீட்டெடுப்பது ,அடுத்து என்ன செய்வது என நாம் திகைப்புற்று அப்படியே மலைத்து போய் உட்கார்ந்திடுவோம்
அஞ்சற்க அவ்வாறான நிலையில் கைகொடுக்கவருமாறு நாமே முயன்று பிற்காப்பு செய்திடுவதற்கானபைத்தான் நிரல்தொடரை உருவாக்கி பயன்படுத்தி கொள்ளலாம் இதற்காக நம்மிடம் விண்டோ இயக்கமுறைமையில் செயல்படும் பைத்தான் 2 அல்லது பைத்தான் 3 பதிப்புள்ள கணினிமொழி இருந்தால் போதும் இந்த பயன்பாட்டிற்கு sync.py என்றவாறு பெயரிட்டுகொள்க Sync1.ini: என்பது கட்டமைவு கோப்பாகும் Logger1.py: என்பது Logger ஆதரவிற்கான தொகுதியாகும் Sync.log என்பது sync.py ஆல் உருவாக்கப்பட்ட ஒருகோப்பாகும்
இதில் பயன்படுத்தி கொள்வதற்காக Import configparser.
Import time.
Import shutil.
Import hashlib.
From the distutils.dir_util import copy_tree.
From the collections, import OrderedDict.
Import the OS.
Import logger1 as log1.
எனும் கட்டளைவரிகளின் வாயிலாக தேவையான நூலகங்களை பதிவிறக்கம் செய்து கொள்க
அதனை தொடர்ந்து
def ConfRead():
config = configparser.ConfigParser()
config.read(“Sync1.ini”)
return (dict(config.items(“Para”)))
எனும் குறிமுறைவரிகள் Sync1.ini எனும் கோப்பினை படித்தறிகின்றது
Sync.ini எனும் கோப்பிலிருந்து பின்வரும் குறிமுறைவரிகள் ஒருசில மாறிகள் பெறப்படுகின்றன
All_Config = ConfRead()
Freq = int(All_Config.get(“freq”))*60
Total_time = int(All_Config.get(“total_time”))*60
repeat = int(Total_time/Freq)
கோப்பின் புலத்தை கணக்கிட பின்வரும் md5எனும்செயலி பயன்படுத்தப்படுகிறது. நாம் ஒரு கோப்பினை மாற்றினால், அதனுடைய பெயர் ஒரே மாதிரியாகவே இருக்கும், ஆனால்அதனுடைய ஹாஷ் மட்டும் மாறியமையும்.
def md5(fname,size=4096):
hash_md5 = hashlib.md5()
with open(fname, “rb”) as f:
for chunk in iter(lambda: f.read(size), b””):
hash_md5.update(chunk)
return hash_md5.hexdigest()
பின்வரும் செயலி இடைப்பட்டிகளுடன் முழு அடைவையும் நகலெடுக்கின்றது:
def CopyDir(from1, to):
copy_tree(from1, to)
பின்வரும் செயலி ஒரு கோப்பினை மட்டும் தேவையான இடத்தில் நகல்மட்டும் எடுக்கின்றது
def CopyFiles(file, path_to_copy):
shutil.copy(file,path_to_copy)
பின்வரும் செயலியானது ஒரு அகராதியை உருவாக்குகிறது, இது கோப்புகளின் புலத்துடன் கோப்பு பெயர்களைக் கொண்டுள்ளது. இந்த செயலியானது மூல இருப்பிடத்தை எடுநகலெடுத்து தற்போதுகைவசமுள்ள எல்லா கோப்புகளின் அகராதியை உருவாக்குகின்றது:
def OriginalFiles():
drive = All_Config.get(“from”)
Files_Dict = OrderedDict()
print (drive)
for root, dir, files in os.walk(drive, topdown=True):
for file in files:
file = file.lower()
file_path = root+’\\’+file
try:
hash1 = md5(file_path,size=4096)
#modification_time = int(os.path.getmtime(file_path))
rel_path = file_path.strip(drive)
Files_Dict[(hash1,rel_path)]= file_path
except Exception as e :
log1.logger.error(‘Error Original files: {0}’.format(e))
return Files_Dict
பின்வரும் செயலி ஒரு hash உடன் கூடி கோப்புகளின் பெயர்களைக் கொண்ட அகராதிஒன்றினஐ உருவாக்குகிறது. மேலும் இந்த செயலியானது நகலெடுக்கவிரும்பும இலக்கு இடத்தில் அனைத்து தற்போதைய கோப்புகளுடன் ஒரு அகராதியை உருவாக்குகின்றது.மேலும் இவ்வாறான செயலின்போது மூல கோப்புறை இல்லையென்றால், அது CopyDir எனும் செயலியை அழைக்கின்றது.
def Destination():
Files_Dict = OrderedDict()
from1 = All_Config.get(“from”)
to= All_Config.get(“to”)
dir1= from1.rsplit(“\\”,1)[1]
drive = to+dir1
#print (drive)
try:
if os.path.isdir(drive):
for root, dir, files in os.walk(drive, topdown=True):
for file in files:
file = file.lower()
file_path = root+’\\’+file
try:
hash1 = md5(file_path,size=4096)
#modification_time = int(os.path.getmtime(file_path))
rel_path = file_path.strip(drive)
Files_Dict[(hash1,rel_path)]= file_path
except Exception as e :
log1.logger.error(‘Error Destination foor loop: {0}’.format(e))
return Files_Dict
else :
CopyDir(from1,drive)
log1.logger.info(‘Full folder: {0} copied’.format(from1))
return None
except Exception as e :
log1.logger.error(‘Error Destination: {0}’.format(e))
கோப்பகத்துடன் கோப்பினை உருவாக்க பின்வரும் படத்திலுள்ளவாறான செயலி வரையறுக்கின்றது
கோப்பினைமட்டும் உருவாக்க பின்வரும் படத்திலுள்ளவாறான செயலி வரையறுக்கின்றது
இருசெயலிகளிலும் பின்வரும்குறிமுறைவரிகள் உண்மையான கோப்பினையும் நகலெடுக்கப்பட்ட கோப்பினை ஒப்பிட்டு சரிபார்த்திடுகின்றது ஏதேனும் மாறுதல்கள் இருந்தால உண்மை கோப்பில் உள்ளவாறு நகல்கோப்பில் மாறுதல்கள் செய்திடுகின்றது
def LogicCompare():
from1 = All_Config.get(“from”)
to= All_Config.get(“to”)
Dest_dict = Destination()
if Dest_dict:
Source_dict = OriginalFiles()
remaining_files = set(Source_dict.keys())- set(Dest_dict.keys())
remaining_files= [Source_dict.get(k) for k in remaining_files]
for file_path in remaining_files:
try:
log1.logger.info(‘File: {0}’.format(file_path))
dir, file = file_path.rsplit(“\\”,1)
rel_dir = from1.rsplit(“\\”,1)[1]
rel_dir1 = dir.replace(from1,””)
dest_dir = to+rel_dir+”\\”+rel_dir1
if not os.path.isdir(dest_dir):
os.makedirs(dest_dir)
CopyFiles(file_path, dest_dir)
except Exception as e:
log1.logger.error(‘Error LogicCompare: {0}’.format(e))
பின்வரும் குறிமுறைவரிகள் அதே செயல்களை திரும்பு செய்து கொண்டே இருக்குமாறு செய்கின்றது
= 0
while True:
if i >= repeat:
break
LogicCompare()
time.sleep(Freq)
i = i +1
Let us see the content of file Sync1.ini
[Para]
From = K:\testing1
To = E:\
Freq = 1
Total_time = 5
அதைவிட பின்வரும் குறிமுறைவரி மிகஎளியதாக NFO modeஎனும் நிலையில் செயல்படுமாறு செய்யப்பட்டுள்ளது
import logging
logger = logging.getLogger(“Mohit”)
logger.setLevel(logging.INFO)
fh = logging.FileHandler(“Sync.log”)
formatter = logging.Formatter(‘%(asctime)s – %(levelname)s – %(message)s’)
fh.setFormatter(formatter)
logger.addHandler(fh)
இடைநிலையாளர்வாயிலாக இந்த குறிமுறைவரிகளை செயல்படுத்திடுவதற்கு பதிலாக exe கோப்பாக மாற்றி எளிதாக செயல்படுத்திகொள்ளலாம் அல்லவா அதற்காக pyinstaller.என்பது பயன்படுகின்றது இது ஏற்கனவேநிறுவுகை செய்யப்பட்டுள்ளது
பின்வரும் படத்திலுள்ளவாறான கட்டளைவரிகள் இதனை செயற்படுத்திடுகின்றது
இதன்பின்னர் dist எனும் கோப்பகத்தில இதற்கான exe கோப்பு நாம் பயன்படுத்திகொள்வதற்கு தயாராக இருக்கின்றது இதன்பிறகு இதனை செயல்படுத்தி கோப்புகளை பிற்காப்பு செய்திட பயன்படுத்தி கொள்க