الخميس، 21 مايو 2015

مثال حول إستخدام وحدة التعابير المنظمة (النمطية) re في مطابقة النصوص

Regular Expressions

مشروح عربيا ووضعته في هذا الرابط من أجل الحفاظ على الإزاحات البيضاء

"""
[-]{3}
تعني ثلاث معترضات hyphen متتالية 
\w{3}
تعني كلمة word من ثلاثة أحرف متتالية (ليست محددة)
\d{3}
تعني ثلاثة أرقام متتالية (ليست محددة)..
|
تعني أي واحدة من القيمتين التي على جانبيها
$
تعني نهاية السلسلة النصية

لنرى التالي كـ مثال:
*. إنتبه للأقواس.....
'((\w{3})|([-]{3}))\d{3}$'
تعني سلسلة نصية تحوي 3 أحرف أو3 معترضات وتنتهي السلسلة بـ 3 أرقام

مثال تطبيقي:
"""
# جلب مكتبة التعابير المنظمة
import re
# القيم التي نريد المطابقة بها
values = ['cat100', '---200', 'xxxyyy', 'jjj', 'box4000', 'tent500']
for v in values:
    # يتطلب 3 أحرف أو 3 معترضات‎ ‎... وأيضا 3 أرقام
    # Require 3 letters OR 3 dashes.
    #... Also require 3 digits
    m = re.match('((\w{3})|([-]{3}))\d{3}$', v)
    if m:
        print 'Ok..', v
    else:
        print 'FAIL', v

"""
Output - الخرج


Ok.. cat100
Ok.. ---200
FAIL xxxyyy
FAIL jjj
FAIL box4000
FAIL tent500
"""


#re

فتح ملف مضغوط zip .. ومعرفة معلومات عن الملفات داخله

جلب مكتبة الملف المضغوط
import zipfile

إسناد المسار(سلسلة نصية) إلى متغير
path = "E://Sample.zip"

تعريف أساس التعامل مع الملف المضغوط!
File = zipfile.ZipFile(path)
----------------------------------------------------------------------------------------------
ملاحظة:: يمكن إضافة معطى parameter آخر إلى: (zipfile.ZipFile(path
فنفتح الملف في وضع القراءة ‎‏ ‏readعلى سبيل المثال فتصبح على الشكل التالي:
File = zipfile.ZipFile(path, 'r')
----------------------------------------------------------------------------------------------

الحصول على قائمة بأسماء الملفات الموجودة ضمن الملف المضغوط
NameList = File.namelist()

طباعة قائمة الملفات على الشاشة
print NameList

طباعة أسماء الملفات عاموديا ومرقمة
for number in range(len(NameList)):
    print number, '|', NameList[number]

طباعة تعريف بما سنقوم به..
print "file name and information:"

طباعة خصائص الملف، إسم الملف وتاريخ التعديل والحجم بالترتيب:
for info in File.infolist():
    print "file name: ", info.filename
    print "date of modifing: ", info.date_time
    print "size: ", info.file_size, "bytes"
    print
أمر الطباعة print لوحده يعني طباعة سطر فارغ!
----------------------------
النتائج بالترتيب:
['Sample.txt', 'Sample.jpg']
0 | Sample.txt
1 | Sample.jpg
file name and information:
file name:  Sample.txt
date of modifing:  (2014, 9, 25, 15, 17, 12)
size:  31 bytes

file name:  Sample.jpg
date of modifing:  (2011, 12, 12, 18, 19, 48)
size:  28351 bytes

#zipfile

قسمة عددين صحيحين ناتج قسمتهما هو عدد عشري

ما ستتعلمه هنا مطبق افتراضيا في بايثون 3
-------------------------------------------------------------------
في بايثون 2
#python2
من أجل قسمة عددين صحيحين ناتج قسمتهما هو عدد عشري(float) والحصول على الناتج بشكل عدد عشري دون الحاجة لوضع فاصلة لأحد أو كلا الرقمين، مثال:
>>> 5/2
2
>>> 5.0/2
2.5

جلب القسمة من مكتبة المستقبل(future)
((ملاحظة: يتم جلب هذه المكتبة في أي سطر من الأسطر الثلاث الأولى من برنامجك))
from __future__ import division

القيام بتجربة..
print 5/9

#__future__

عمليات الفصل في المسارات

جلب مكتبة النظام العملياتي(Operating System)
import os

إسناد المسار(سلسلة نصية) إلى متغير
path = "e://22.txt"

الحصول على لاحقة(امتداد) الملف بشكل منفصل
النتيجة:
(المسار+اسم الملف, الإمتداد)
print "splitext", "=>", os.path.splitext(path)

الحصول على اسم قرص التخزين منفصلا عن المسار
النتيجة:
(قرص التخزين, باق المسار)
print "splitdrive", "=>", os.path.splitdrive(path)

فصل اسم الملف عن المسار
النتيجة:
(المسار, اسم الملف+الإمتداد)
(dirname, basename)
print "split", "=>", os.path.split(path)

الحصول على اسم الملف المراد الوصول إليه في المسار المعطى
((الحصول على اسم الملف النهائي في المسار))
النتيجة:
اسم الملف+الإمتداد
print "basename", "=>", os.path.basename(path)

الحصول على المسار قبل اسم الملف المعطى في المسار
النتيجة:
المسار عدا: اسم الملف+الإمتداد
print "dirname", "=>", os.path.dirname(path)

النتيجة بالترتيب:
splitext => ('e://22', '.txt')
splitdrive => ('e:', '//22.txt')
split => ('e://', '22.txt')
basename => 22.txt
dirname => e://

#os.path

التأكد من وجود ملفات

جلب مكتبة النظام العمليّاتي ( Operating System )
import os

إسناد المسار(سلسلة نصية) إلى متغير
path = "e://22.txt"

التأكد من وجود الملف على الدليل
تعود ب صح إذا كان موجودا أو خطأ إذا لم يكن موجودا
print os.path.exists(path)

التأكد أنه فيما إذا كان الملف ملفا أم دليل
تعود ب صح إذا كان الملف ملفا أو خطأ إذا كان الملف دليلا 
print os.path.isfile(path)

التحقق من وجود دليل
print os.path.isdir(path)

#os.path