«بسم الله الرحمن الرحیم»
Notepad Python txt files DataBase Part1
چگونه داده ها را درنوت پد به صورت سطر وستون ذخیره کنیم ومانند پایگاه داده ازآن استفاده کنیم؟ بخش اول
حالت1 (یک کلید یک مقدار – یک کلید چند مقدار):
به پیاده سازی مطالبی که درقبل توضیح داده شد پرداخته می شود. حال با زبان پایتون ونوت پد مقادیر ذخیره می شود و سپس ازمقادیر ذخیره شده استفاده می شود.
یک کلید ویک مقدار:
حالت یک کلید یک مقدار همان مفهوم دیکشنری می باشد .
ازاین حالت بیشتر از پایگاه داده های اس کیو ال استفاده می شود .
.نکته) منظور از پایگاه داده نوت پد همان برنامه نوت پد می باشد
فرض کنید داده های زیر رادارید ومی خواهید درپایگاه داده notepad ذخیره کنید وازآن استفاده کنید.
ستون اول(کلید) : شماره شخص می باشد.
ستون دوم(مقدار) : تعداد روزهای مرخصی شخص در ماه بهمن می باشد.
:ساختاراین حالت در پایگاه داده نوت پد به شکل زیر می شود
person_id:num_day1|person_id2:num_day2 ,… or key1:value1|key2:value2|key3:value3|key4:value4|,….
.دراین قسمت به بررسی کد پرداخته می شود
def con(type): #line1 f=open("test.txt",type) return f #line3 person_id=["person1","person2","person3"] #key #line4 num_day=[5,4,10] #value #line5 str1="" #line6 for i in range(0,len(person_id)):#line7 str1=str1+person_id[i]+":"+str(num_day[i])+"|" #person_id1 :num_day1|person_id2:num_day2 |,... #line8 f=con("w")#line9 f.write(str1)#line10 f.close()#line11
خط 1 تا 3 یک ارتباط بافایل نوت پد برقرا می کند . خط 4و 5 مقادیر ستون اول ودوم را درلیست قرار می دهد(مقادیرمی تواند در هر ساختمان داده ای باشد). وخط 6 یک متغیر برای ذخیره مقادیر می باشد. خط 7 یک حلقه دارید که دراین حلقه خط 8 از همه بخش ها مهم تر می باشد . در این حلقه ساختار بالا که توضیح داده شد را پیاده سازی می کند . هر کلید ومقدار را بادونقطه وهر سطر را با نماد | از یکدیگر جدا می کند. وتمام رشته را در متغیری که درقبل ذخیره کرده اید ذخیره می کند . خط ۹ تا ۱۱ مقدار رشته را در فایل نوت پد ذخیره می کند.
حال با طرح یک سوال ازاین فایل ذخیره شده استفاده می شود .در اس کیوال به آن کوئری می گویند.
سوال: فرض کنید می خواهید بدانید درماه بهمن چه کسی مرخصی بیشتری گرفته است . از فایل ذخیره شده استفاده می شود.
روند کار به این صورت می باشد:
1- ابتدا مقادیر را ازفایل خوانده می شود.
2- سپس سطر ها تشخیص داده می شود.
4- سطرها دریک لیست ذخیره می شود و ساختار آن به شکل زیر می باشد.
list1=[[key,value], [key1,value1], [key2,value2],…] list1[i][1]=key , list1[i][0]=value
4- ماکزیمم از تعداد روزهای مرخصی گرفته می شود.
5- می توانید مقادیر هرسطررا ازهم جدا می کنید تا کلید ومقدار مشخص شود.(اختیاری)
#step1 str1="" f=con("r") str1=f.read() #-------------------- #step2 rows=str1.split("|") #-------------------- #step3 list1=[] for row in rows: list1.append(row.split(":")) #list1=[[key,value],[key1,value1]] #-------------------- #step4 max=int(list1[0][1]) for i in range(0,len(list1)): if(list1[i][0] and int(list1[i][1])>=max): #list[i][1]=value=num_day max=int(list1[i][1]) #-------------------- print(max)
#-------------------------------------
مفهوم حذف ازپایگاه داده بازهم باطرح یک سوال مطرح می شود.
سوال: کسی که کمترین مرخصی درماه بهمن گرفته است را ازپایگاه داده حذف کنید .
:روند کاربه این صورت است
1- ابتدا مقادیر را ازفایل خوانده می شود.
2- سپس سطر ها تشخیص داده می شود.
list1=['key:value','key:value','key:vaue',...]
3- سطرها دریک لیست ذخیره می شود و ساختار آن به شکل زیر می باشد.
list1=[[key,value],[key1,value1],[key2,value2],…] list1[i][1]=key , list1[i][0]=value
4- مینیمم از تعداد روزهای مرخصی گرفته می شود.
5- مقدارمینیمم از لیست ذخیره حذف می شود.
۶- عملیات اضافه به فایل دوباره انجام می شود.
#step1 str1="" f=con("r") str1=f.read() #-------------------- #step2 rows=str1.split("|") #list1=['key:value','key:value','key:vaue',...] #-------------------- #step3 list1=[] for row in rows: list1.append(row.split(":")) #list1=[[key,value],[key1,value1]] #-------------------- #step4 min=int(list1[0][1]) for i in range(0,len(list1)): if(list1[i][0] and int(list1[i][1])<=min): #list[i][1]=value=num_day min=int(list1[i][1]) index=i print(index,min) #------------------------------- #step5 del list1[index] #------------------------------- #step6 #list1=[['person1', '5'], ['person3', '10'], ['']] str1="" for i in range(0,len(list1)):#line7 if(list1[i][0]): str1=str1+list1[i][0]+":"+str(list1[i][1])+"|" #person_id1 :num_day1|person_id2:num_day2 |,... # f=con("w") f.write(str1) f.close()
یک کلید وچند مقدار از نظر تعداد ثابت ازنظر مقدار غیر یکسان:
دراین حالت تعداد ستون ها تغییر نمی کند پس ازنظر تعداد ثابت ومقادیر سطرها باهم متفاوت است پس ازنظر مقدار غیریکسان می باشد.
این حالت هم مانند حالت قبل بیشتر در پایگاه داده اس کیو ال استفاده می شود . اما می توان در نوت پد هم ذخیره کرد وازآن استفاده کرد .
حال فرض کنید داده های زیر رامی خواهید درنوت پد ذخیره کنید .
.ستون اول : دراین قسمت شماره شخص به عنوان کلید در نظر گرفته می شود
ستون های دیگر : ستون های دیگر به عنوان مقدار در نظر گرفته می شود. حالت یک کلید وچند مقدار تشکیل می شود
:ساختاراین حالت در پایگاه داده نوت پد به شکل زیر می شود(هرساختاری می توانید درنظر بگیرید)
person_id1:Name,Family,Code_meli;person_id2:Name,Family,Code_meli;person_id3:Name,Family,Code_meli
دراین قسمت کد برنامه بررسی می شود.
def con(type): #line1 #------- f=open("test.txt",type) return f #line3 #------------- person_id=["person1","person2","person3"] #key #line1 values=[("Mahdi","khoshnezhad","0370904"),("Akbar","barber","054256"),("javad","javati","587946")] #values #line2 #--------------- str1="" #line1 for i in range(0,len(person_id)):#line2 str2="" #line3 for j in range(0,len(values)): #line4 if(j==len(values)-1):#line5 str2=str2+str(values[i][j]) #line6 else: str2=str2+str(values[i][j])+"," #line8 str1=str1+person_id[i]+":"+str2+"" #person_id1 :Name,Family,Code_meli,;person_id2 :Name,Family,Code_meli,; line9 f=con("w")#line10 f.write(str1)#line11 f.close()#line12
سه خط اول درقسمت قبل توضیح داده شده است. دو خط بعدی مقادیر را دردولیست ذخیره می کند.لیست دوم ازتاپل های سه تایی تشکیل شده است . به خط های جدید پرداخته می شود.
خط 1 یک متغیربرای قرار دادن تمام مقادیر در نظر گرفته می شود. درخط 2شخص شمرده می شود. درخط 3 متغیر رشته موقت ایجادشده است که مقادیر را درخود نگه می دارد. در خط 4 تا 8 مقادیر از لیست مقدارها خوانده می شود و در رشته متغیر ذخیره می شود . درخط 9 رشته موقت به رشته اصلی اضافه می شود وبعد از هر تکرار مقدارمتغیر موقت خالی می شود تا شخص بعدی اضافه شود.. شرط برای این است که مقدار آخر دارای "," اضافه نباشد. خط 9 شماره شخص را که به عنوان کلید درنظر گرفته شده است به مقادیر نام و نام خانوادگی وشماره ملی می چسباند.خط ۱۰ تا 12 مقدار متغیراصلی را در فایل ذخیره می کند.
حال با طرح یک سوال ازاین فایل ذخیره شده استفاده می شود .در اس کیوال به آن کوئری می گویند.
سوال : آیا شخص با مشخصات زیر وجود دارد یا نه؟
Name=javad,Family=javati,code_meli=587946 Name=mahdi,Family=davvod,code_meli=587946
:روند کار به این صورت می باشد
1- ابتدا مقادیر را ازفایل خوانده می شود.
2- سپس سطر ها تشخیص داده می شود. (نوع جداکننده با حالت قبل متفاوت است)
list1=[‘person_id1:Name,Family,code_meli’, ‘person_id1:Name,Family,code_meli’,..]
3- سطرها دریک لیست ذخیره می شود و ساختار آن به شکل زیر می باشد.
list1= [[‘person_id1’,’Name,Family,code_meli’], [‘person_id2’,’Name,Family,code_meli’], [‘person_id3’,’Name,Family,code_meli’]] list1[i][0]=key ,list[i][1]=values(Name,Family,code_meli)
4- وجودداشتن ونداشتن هرشخص بررسی می شود.
هرشخص دریک لیست با سه عنصر ذخیره می شود . وبا لیست مقادیر درون حلقه مقایسه می شود . اگر شخص وجود داشته باشد پیغام وجود دارد می دهد واز حلقه خارج می شود چون که یک نفر بااین مشخصات وجود دارد چند نقر بااین مشخصات وجود ندارد . اگر شخص وجود نداشته باشد متغیر بولین درست نمی شود و درپایان حلقه وجودنداشتن شخص بررسی می شود.
#step1 str1="" f=con("r") str1=f.read() #-------------------- #step2 rows=str1.split("") #rows=['person_id:Name,Family,Code_meli','person_id1:Name,Family,Code_meli',...] #-------------------- #step3 list1=[] for row in rows: list1.append(row.split(":")) #list1=[['person_id','Name,Family,code_meli'],['person_id1',"Name,Family,code_meli'],...] #-------------------- person1=["javad","javati","587946"] person2=["mahdi","davvod","587946"] #step4 detect person=False for i in range(0,len(list1)): #------------------------ key=list1[i][0] #person_id #--------------------------------------- if(list1[i][0]): values=list1[i][1].split(","); #values=[Name,Family,code_Meli] if(values[0]==person1[0] and values[1]==person1[1] and values[2]==person1[2]): print("Exist=="+"Name:"+values[0]+" "+"Family:"+values[1]+" "+"code_meli:"+values[2]) person=True break if(not person): print("not Exist!")
#------------------------------
حال مفهوم حذف با طرح یک سوال مطرح می شود.
.سوال : شخصی بامشخصات زیر را از پایگاه داده حذف کنید
Name=mahdi,Family=khoshnezhad,code_meli=0370904
روند کاربه این صورت می باشد:
مانند روال وجود داشتن ونداشتن شخص (روال بالا) می باشد . فقط اگر شخص وجود داشته باشد حذف می شود. قسمت حذف نوشته می شود. بقیه روال تکراری می باشد.
ابتدا در شرط یک متغیر اضافه می شود.
if(values[0]==person1[0] and values[1]==person1[1] and values[2]==person1[2]): print("Exist=="+"Name:"+values[0]+" "+"Family:"+values[1]+" "+"code_meli:"+values[2]) person=True index=i break
سپس دربخش آخر این کد اضافه می شود.
if(not person): print("not Exist!") #-----------for del else: del list1[index] #[['person1', 'Mahdi,khoshnezhad,0370904'], ['person2', 'Akbar,barber,054256'], ['']] str1="" #line1 for i in range(0,len(list1)):#line2 str2="" #line3 if(list1[i][0]): values=list1[i][1].split(",") for j in range(0,len(values)): #line4 if(j==len(values)-1):#line5 str2=str2+str(values[j]) #line6 else: str2=str2+str(values[j])+"," #line8 str1=str1+list1[i][0]+":"+str2+"" #person_id1 :Name,Family,Code_meli,;person_id2 :Name,Family,Code_meli,; line9 f=con("w")#line10 f.write(str1)#line11 f.close()#line12
موفق باشید
به امید خدا