كيفية التحقق من وجود أي ملف على اي دليل مع بايثون

تحدثنا في السابق على طريقة عرض محتويات أي دليل باستخدام لغة بايثون أما اليوم سنتحدث عن كيفية التحقق من وجود ملف ما على أي دليل باستخدام نفس اللغة، في الحقيقة يوجد طرق عديدة للتحقق من وجود الملفات ولكني ساقوم بشرح فعل ذلك باستخدام os.path.isfile().

os.path.exists(path)

قبل التحدث عن معرفة وجود الملف اولا يجب ان نتأكد من وجوده اولا على الدليل باستخدام الدالة
os.path.exists()

import os
os.path.exists("/home/kader/text.txt")

اذا كان الملف موجود فعلا سيقوم بايثون بعرض صح واذا لم يكن موجود سيقوم بعرض خطأ
ولكن مع هذه الدالة لا يمكننا ان نعرف ما اذا كان ملف او عبارة عن دليل وهنا تاتي فائدة الدالة التالية .
os.path.isfile()
بعد تأكدنا من وجود الملف على الدليل علينا الان ان نعرف ما اذا كان عبارة عن ملف أو دليل
 

import os
os.path.isfile("/home/kader/text.txt")

اذا كان text.txt عبارة عن ملف سيقوم بايثون بعرض صح واما اذا كان عبارة عن دليل سيعرض خطا

ولتحقق أيضا من وجود دليل يمكن استخدام الدالة os.path.isdir()

ولمزيد من المعلومات يمكنكم زيارة موقع بايثون

استيراد * في بايثون

في هذه التدوينة سنتحدث عن

from module import *

وكيفية عملها ولماذا يجب ان لا نستخدم هذه الطريقة في عملية الاستراد .



استراد * من module
هذا السطر يعني اني اريد الوصول الى جميع الأسماء الموجودة داخل module ومن المفترض اني استطيع استعمال جميع الوظائف والصفوف الموجودة داخل هذا الموديل .

ومن أجل فهم اكبر سنقوم باخذ مثال بانشاء ملف something.py

# something.py

public_variable = 42
_private_variable = 141

def public_function():
    print("I'm a public function! yay!")

def _private_function():
    print("Ain't nobody accessing me from another module...usually")

class PublicClass(object):
    pass

class _WeirdClass(object):
    pass

الان نقوم بتشغيل مترجم بايثونIDLE ونقوم بتشغيل السطر التالي :

from something import *

الان نقوم بتجريب السطور التالية

from something import *
public_variable
42
_private_variable
...
NameError: name '_private_variable' is not defined
public_function()
"I'm a public function! yay!"
_private_function()
...
NameError: name '_private_function' is not defined
c = PublicClass()
c

c = _WeirdClass()
...
NameError: name '_WeirdClass' is not defined

اذاالسطر from something import * قام باستراد جميع الأسماء الموجودة داخل ملف something ماعدا الأسماء التي تبدا ب _ لانها تعني أسماء خاصة .
اذا ما هو الحل؟
لم نقم بذكر بعد __all__ وماذا تعني .
__all__ هي قائمة تحتوي على سلاسل لتحديد وتعريف الرموز الموجودة في module ويتم استخدامها عند عملية استراد *.
عندما لا نقوم بتعريف __all__ فان عملية استراد * ستقوم باستراد جميع الأسماء ما عدا الاسماء التي تبدا بالعلامة _ والتي تعني انها أسماء خاصة .
الان سنقوم بتعريف __all__ في ملف something.py .

# something.py

__all__ = ['_private_variable', 'PublicClass']

# The rest is the same as before

public_variable = 42
_private_variable = 141

def public_function():
    print("I'm a public function! yay!")

def _private_function():
    print("Ain't nobody accessing me from another module...usually")

class PublicClass(object):
    pass

class _WeirdClass(object):
    pass

الان من المفروض عند كتابةالسطر from something import * ان يقوم باستراد كل من _private_variables و PublicClass

>>> from something import *
>>> public_variable
...
NameError: name 'public_variable' is not defined
>>> _private_variable
0
>>> public_function()
...
NameError: name 'public_function' is not defined
>>> _private_function()
...
NameError: name '_private_function' is not defined
>>> c = PublicClass()
>>> c

>>> c = _WeirdClass()
...
NameError: name '_WeirdClass' is not defined

كان هذاهو درسنا اليوم أرجوا أن تكونوا قد استمتعتم واستفدتم وأي تعليق عن الموضوع مرحبا به

كيفية انشاء حزمة بايثون

عندما يكون لديك العديد من الصفوف classes أو ال modules و تريد ان تنظمها على شكل حزم خاصة اذا كان لديك مشروع ينمو بسرعة كبيرة فمن الحكمة ان ننظمها في حزم وهذه العلمية تشبه وضع الصفوف classes و ال modules في نفس الدليل ومن أجل كل هذا سنقوم بشرح طريقة انشاء الحزم في بايثون .




خطوات لانشاء الحزم في بايثون

  • انشاء دليل وتسميته باسم الحزمة المراد انشاءها
  • وضع جميع الصفوف داخل الدليل 
  • انشاء ملف __init__.py داخل الدليل

هذا كل شئ الطريقة  جد سهلة ولا تتطلب عملية معقدة والملف__init__.py ضروري لان بايثون سيعرف بواسطته ان هذا الدليل عبارة عن حزمة بايثون وليس مجرد دليل او ملف  يحتوي على صفوف وملفات.
على كل حال ماسنقوم بكتابته على هذا الملف هو عبارات استيراد import جميع الصفوف الى حزمتنا.


انشاء حزمة بايثون
سنقوم باشاء حزمة ونقوم بتسميتها Animals حيث تحتوي على 2  module ونقوم بتسميتهما Mammals و Birds .

  1.  انشاء دليل خاص بالحزمة

أولا نقوم بانشاء ديلي ونقوم بتسميته Animals


2.اضافة صفوف
الان نقوم بانشاء مصفوفتين، اولا نقوم بانشاء ملف Mammals.py داخل الدليلونقوم بكتابة الكود التالي بداخله.

class Mammals:
    def __init__(self):
        ''' Constructor for this class. '''
        #انشاء مجموعة من الحيونات 
        self.members = ['Tiger', 'Elephant', 'Wild Cat']
 
 
    def printMembers(self):
        print('Printing members of the Mammals class')
        for member in self.members:
            print('t%s ' % member)

الكود جد سهل حيث لدينا مصفوفة تحتوي على مجموعة من الحيوانات ونقوم بعرض تلك المجموعة .
ملاحظة : عند انشاء حزم بايثون يجب استراد المصفوفات عبر دالة import ولا يمكن تنفيذها مياشرة .

الان نقوم بانشاء ملف اخر ونقوم بتسميته Birds.py ونضعه داخل الدليل Animals ونقوم بكتابة الكود التالي بداخله .

class Birds:
    def __init__(self):
        ''' Constructor for this class. '''
        # انشاء مجموعة من الحيوانت 
        self.members = ['Sparrow', 'Robin', 'Duck']
 
    def printMembers(self):
        print('Printing members of the Birds class')
        for member in self.members:
           print('t%s ' % member)

هذاالكود مشابه للكود الأول .
3 اضافة ملف __init__.py الى الدليل
بعد انشاء هذا الملف نقوم بكتابة الكود التالي بداخله .

from Mammals import Mammals
from Birds import Birds

هذ اكل شيء وهكذا قمنا بانشاء حزمة اسمها Animals ولكي نقوم باختبارها نقوم بانشاء ملف test.py على نفس الدليل السابق ونقوم بكتابة الكود التالي بداخله .

# استراد المصفوفات 
from Animals import Mammals
from Animals import Birds
 
# انشاء كائن للمصفوفة 
myMammal = Mammals()
myMammal.printMembers()
 
# انشاء كائن 
myBird = Birds()
myBird.printMembers()

استعراض قائمة الملفات في اي دليل باستخدام بايثون

أحب ادارة والعمل على ملفات النظام باستخدام لغة بايثون ولهذا ساقوم بمشاركة طريقة تمكنم من عرض محتويات اي دليل باستخدام  os.listdir.
واذا كانت لديكم اي طرية ارجوا ان تشاركونا اياها.
import os
dirlist=os.listdir('d:/')
from pprint import pprint
pprint(dirlist)>

النتيجة

['$Recycle.Bin',
 'Atlas2004.css',
 'autoexec.bat',
 'Config.Msi',
 'config.sys',
 'Documents and Settings',
 'files',
 'found.000',
 'hiberfil.sys',
 'history.js',
 'Intel',
 'IO.SYS',
 'MSDOS.SYS',
 'MSOCache',
 'pagefile.sys',
 'Partition Images',
 'PerfLogs',
 'Portable Python 3.2.1.1',
 'Program Files',
 'ProgramData',
 'Python34',
 'rb_config.js',
 'Recovery',
 'Restored Files',
 'System Volume Information',
 'Users',
 'Windows',
 'Windows.old',
 'xampp']

 

نظرة عامة حول الصفوف في بايثون Tuples

الصفوف tuples هي نوع أخر من البيانات في بايثون وهي تتكون أو تحتوي على مجموعة من القيم مفصولة بفواصل ودائما ما تكون بين قوسين وتكون قيمها ثابتة غير قابلة للتبديل أو التعديل أو حذف احد قيمها وهذا هو الفرق الذي بينها وبين القوائم  ويتم استخدام الصفوف في حالات واغراض مختلفة .
ويتم انشاء صفوف لا تحتوي على اي قيمة باستخدام زوجين من الأقواس كما يتم انشاء صفوف تحتوي على قيمة واحدة ولكن يجب اضافة فاصلة أخر تلك القيمة.امثلة عن الصفوف .

x = ()              # صف من دون أي قيمة
x = (0,)         # صف بقيمة واحد ولاحظ انه تنتهي بفاصلة
x = (0, 1, 2, "abc")       # صف تحتوي على 4 قيم
x = (0, 1, 2, 3, (1, 2))   # صف داخل صف
y = x[0]            # فهرسة القيم في الصفوف
y = x[4][0]                # فهرسة صف داخل صف
x = (0, 1) * 2             # تكرار الصف
x = (0, 1, 2) + (3, 4)     # الجمع بين صفين
for item in x: print item  # التكرار خلال الصفوف
b = 3 in x             # اختبار عضوية الصفوف