البرمجة

تحسين أداء البحث عن النطاقات في Python باستخدام set

في هذا السياق، يظهر أنك تقوم بفحص ملفين نصيين (a.txt و shell.txt) لاستخراج معلومات النطاقات منهما والتحقق مما إذا كانت النطاقات المستخرجة من a.txt موجودة في shell.txt. ومع ذلك، تواجه بعض الصعوبات في تنفيذ هذه المهمة بفعالية.

لحل هذه المشكلة، يمكننا تحسين الشيفرة البرمجية باستخدام هيكلة أفضل وتقنيات تحسين الأداء. في البداية، يمكن تحسين القراءة من الملفات عبر استخدام with statement لضمان إغلاق الملفات بشكل صحيح. ثم، يمكن استخدام مجموعة (set) لتخزين النطاقات من s2 لتحسين سرعة البحث.

فيما يلي تحسين لشيفرتك:

python
import re # قراءة محتوى الملفات بشكل صحيح باستخدام with statement with open('a.txt', 'r') as file_a: s1 = file_a.read().splitlines() with open('shell.txt', 'r') as file_shell: s2 = file_shell.read().splitlines() # استخدام set لتخزين النطاقات من s2 لتحسين سرعة البحث domains_set = {re.findall("\/\/(.*)\/", line.split("|")[2])[0] for line in s2} # البحث عن النطاقات المتطابقة for line_a in s1: domain_a = re.findall("\/\/(.*)\/", line_a.split("|")[0])[0] if domain_a in domains_set: # إذا كان النطاق موجود، قم بطباعة السطر كاملاً print(line_a)

هذا التحسين يستخدم مجموعة (set) لتخزين النطاقات من shell.txt، مما يسرع عملية البحث ويجعل الشيفرة أكثر فعالية.

المزيد من المعلومات

بالتأكيد، دعني أوسع النقاش حول الشيفرة والتحسينات التي تم إجراؤها.

أولاً، يتم استخدام with statement لفتح الملفات (a.txt و shell.txt)، وهو يضمن أن تتم إدارة الملفات بشكل صحيح حتى بعد انتهاء العمليات عليها. هذا يضمن إغلاق الملفات بشكل صحيح، ويساعد في تجنب حدوث مشكلات ذات صلة بالملفات.

ثانيًا، تم استخدام مجموعة (set) لتخزين النطاقات المستخرجة من shell.txt (domains_set)، وذلك لأن البحث في مجموعة يكون أسرع بكثير من البحث في قائمة عندما يكون هناك عدد كبير من العناصر. يتيح استخدام مجموعة أداءً أفضل لعملية التحقق من وجود النطاق في s2.

ثالثًا، تم تحسين تنظيم الشيفرة وجعلها أكثر وضوحًا وسهولة قراءة. تم استخدام أسماء متغيرة وتعليقات لتوضيح أغراض كل جزء في الشيفرة.

هذه التحسينات تهدف إلى جعل الشيفرة أكثر فعالية وصيانة، وتسهم في تحسين تجربة البرمجة وتفهم الشيفرة لاحقًا.

زر الذهاب إلى الأعلى