الثلاثاء، 9 يونيو 2015

الحصول على نطاق Domain رابط ما

مقـدمة:
كلٌّنا يعرف الإعراب في اللُّغة العربية على الأقل!!..
كخلاصة:, الإعراب: هو تحليل للنص ومعرفة مدلولات الكلمات(الزمنية , العاطفية......إلخ)
كمثال:  شمَّ الطفل الزهرة.
شمَّ: ماضٍ مفتوح.....
الطفل: فاعل مرفوع.....
الزهرة: مفعول به منصوب........
(( على كلِّ حالٍ ليس الهدف الإعراب في اللغة العربية.))
=====================================================
=====================================================

سنتطرق إلى إعراب الروابط!! ( نعم إعراب الروابط)..

هناك مكتبة قياسية إسمها: urlparse , سنستعملها لهذا الغرض.
سنحصل كـ خرج على الصف tuple التالي:
(مخطَّط(بفتح الطاء)، موقع، مسار، تساؤل وقطعة)
(scheme, location, path, query and ‏fragment)

قبل البدء سنتطرق لمعرفة معنى الرابط أو URL
(محدد الموارد الفريد/العام - عنوان صفحة على الشبكة العنكبوتية الواسعة)
(url: universal [uniform] resource locator - The address of a World Wide Web Page)


جلب وحدة إعراب الروابط
import urlparse
إسناد العنوان(سلسلة نصية) إلى متغير
url = "http://python.org"
طباعة الخرج العام الذي تحدثنا عنه بداية
print "(scheme, location, path, query and ‏fragment)"
طباعة الخرج العام الناتج من الرابط أعلاه
print urlparse.urlsplit(url)
طباعة سطر فارغ
print # Empty line..

إسناد النطاق إلى متغير
domain = urlparse.urlsplit(url)[1].split(':')[0]

طباعة إسم النطاق
print "The domain name of the url is: ", domain

الخميس، 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