البرمجة

كيفية العثور على رقم السطر النهائي في AST لـ end-of-statement في Python

للحصول على رقم السطر النهائي لـ “نهاية التعبير” في AST للبايثون، يمكنك استخدام مكتبة AST المدمجة في Python. عادةً ما تستخدم لتحليل وتغيير الشيفرة البرمجية بطريقة برمجية. في حالتك، تريد العثور على رقم السطر النهائي لتعبير “description” في كود Python.

أولاً، يجب أن تستخدم مكتبة AST لتحليل كود Python والعثور على التعبيرات التي تحمل الاسم “description”. يمكنك فعل ذلك باستخدام وحدة ast من مكتبة Python القياسية. ثم، بعد أن تجد التعبير الذي تريد، يمكنك استخدام طرق العثور على المواضع الفعلية في الشيفرة البرمجية (مثل lineno) للعثور على السطر النهائي.

في هذا السياق، إليك مقترح لكيفية تنفيذ ذلك:

أولاً، استيراد المكتبات اللازمة:

python
import ast

ثم، قم بتحليل كود Python الخاص بك باستخدام ast.parse():

python
with open('your_script.py', 'r') as file: code = file.read() parsed_code = ast.parse(code)

بعد ذلك، قم بالمشي عبر العناصر الموجودة في الشيفرة المحللة لتحديد التعبير الذي تبحث عنه. يمكنك استخدام ast.NodeVisitor لذلك:

python
class DescriptionFinder(ast.NodeVisitor): def __init__(self): self.description_lineno = None def visit_Assign(self, node): if isinstance(node.targets[0], ast.Name) and node.targets[0].id == 'description': self.description_lineno = node.lineno self.generic_visit(node) description_finder = DescriptionFinder() description_finder.visit(parsed_code)

بعد تنفيذ هذا الكود، ستكون لديك الآن رقم السطر الذي يحتوي على تعبير “description” في متغير description_finder.description_lineno.

الآن، للعثور على السطر النهائي لتعبير “description”، يمكنك تحديد أين ينتهي هذا التعبير. في هذه الحالة، تحتاج إلى التحقق مما إذا كان التعبير متعدد الأسطر أم لا، ثم استخدام ذلك لحساب السطر النهائي. يمكنك استخدام المكتبة التالية لذلك:

python
def find_end_lineno(code, start_lineno): lines = code.split('\n') current_lineno = start_lineno for line in lines[start_lineno:]: if line.strip().endswith('\\'): current_lineno += 1 else: break return current_lineno end_lineno = find_end_lineno(code, description_finder.description_lineno)

الآن، end_lineno سيحتوي على السطر النهائي لتعبير “description” في الشيفرة البرمجية.

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

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

بعد أن تم العثور على السطر النهائي لتعبير “description”، يمكنك الآن استخدام هذه المعلومات لإصلاح الكود الخاص بك بشكل صحيح. فيما يلي مثال على كيفية استخدامها:

python
# قم بفحص ما إذا كانت قيمة "description" متعددة الأسطر أم لا is_multiline = False for node in parsed_code.body: if isinstance(node, ast.Assign) and isinstance(node.targets[0], ast.Name) and node.targets[0].id == 'description': if isinstance(node.value, ast.Str) and '\n' in node.value.s: is_multiline = True break # إذا كانت القيمة متعددة الأسطر، قم بتغيير السطر النهائي إلى السطر الجديد الصحيح if is_multiline: with open('your_script.py', 'r') as file: lines = file.readlines() # قم بتغيير السطر النهائي بالقيمة الجديدة lines[description_finder.description_lineno - 1] = f" description = 'new value'\n" # قم بتجميع الأسطر مرة أخرى مع السطر النهائي الجديد new_code = ''.join(lines) # قم بكتابة الكود الجديد إلى الملف with open('your_script.py', 'w') as file: file.write(new_code) else: # قم بتغيير السطر المباشر لتعبير "description" with open('your_script.py', 'r') as file: lines = file.readlines() # احذف الأسطر الإضافية del lines[description_finder.description_lineno] # أضف السطر الجديد lines.insert(description_finder.description_lineno - 1, " description = 'new value'\n") # قم بتجميع الأسطر مرة أخرى مع السطر الجديد new_code = ''.join(lines) # قم بكتابة الكود الجديد إلى الملف with open('your_script.py', 'w') as file: file.write(new_code)

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

باستخدام هذا الكود، يمكنك الآن التعامل بشكل صحيح مع تعبيرات “description” في الشيفرة البرمجية الخاصة بك، بغض النظر عن ما إذا كانت متعددة الأسطر أم لا.

مقالات ذات صلة

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

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر