الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

برمجة سكربت حذف بعض الكلمات

بدأه python.sc في 26 أغسطس 2012 · 18 رد · 1,447 مشاهدة · في لغة Python
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

درست بايثون من أولها إلى آخرها عن طريق كتاب byteofpython ودرست مقالات أخرى ايضا

واليوم قررت أنني أبرمج أول سكربت لي

وهو سكربت مثلا عندي ملف txt يحتوي على Email:Password

test555555@gmail.com:test

test444444@gmail.com:test

أريد من السكربت أن يحذف كل الكلمات التي محصورة بين @ و :

يعني يبقى فقط test555555|test

ويضع علامة | عند الحذف لي يفصل username عن password

فواجهة صعوبة في برمجة السكربت كوني اول مرة أشرع في كتابة سكربت :wacko:

فمن يستطيع المساعدتي على برمجة السكربت فله جزيل الشكر والله في عون العبد ما كان العبد في عون أخيه

واي مبتدأ أيضا في البايثون ويريد ان يشاركني في برمجة السكربت وهو يستفيد وانا أستفيد وجميع يستفيد فمرحبا به

وشكرا لكم مسبقا :)

1
#2

انظر هنا فضلا

/index.php?showtopic=233470

(map share people)

فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader

#3
python.sc كتب:

السلام عليكم ورحمة الله وبركاته

درست بايثون من أولها إلى آخرها عن طريق كتاب byteofpython ودرست مقالات أخرى ايضا

واليوم قررت أنني أبرمج أول سكربت لي

وهو سكربت مثلا عندي ملف txt يحتوي على Email:Password

test555555@gmail.com:test

test444444@gmail.com:test

أريد من السكربت أن يحذف كل الكلمات التي محصورة بين @ و :

يعني يبقى فقط test555555|test

ويضع علامة | عند الحذف لي يفصل username عن password

فواجهة صعوبة في برمجة السكربت كوني اول مرة أشرع في كتابة سكربت :wacko:

فمن يستطيع المساعدتي على برمجة السكربت فله جزيل الشكر والله في عون العبد ما كان العبد في عون أخيه

واي مبتدأ أيضا في البايثون ويريد ان يشاركني في برمجة السكربت وهو يستفيد وانا أستفيد وجميع يستفيد فمرحبا به

وشكرا لكم مسبقا :)

السلام عليكم

أخي

هذا الكود يفي بطلبك

ولكنه سيئ جدا من حيث القواعد البرمجية

جبيت وصلك فكرة العمل

f=open("email.txt","r")
d=f.readline()
g=""
c=0 
a=0
for k in d:
    if k !="@" and c==0 :
        g+=k
    elif k=="@":

        c=1
    elif k==":" or a==1 :
        a=1
        g+=k

print g
1

.Because it's FUN to be ALIVE

#4

جزاك الله خيرا أخي احمد

ساقرأ المقال وأدرسه جيدا الليلة بإذن الله

شكرا أخي Py4object

الكود صحيح بنسبة 90% سأطوره وأجعله ينفذ المهمة على جميع الإميلات التي في الملف email وأجعله يحفظها في ملف rusult

ولو تطوعت خيرا وشرحتلي الكود جيدا :blush:

#5

اي والله نتمنى ان تشرحه وكيف عرفت القياسات

اي يبدا من 1

#6

بأمرك أخي

 f=open("email.txt","r")

أفتح الملف بصلاحية القرأة فقط

 d=f.readline()

اقرأ سطر واخزنه في المتحول d

g=""
c=0 
a=0

متحولات سأستخدمها فيما بعد

 for k in d:

حلقة for لأجل فحص محتويات المتحول d

حيث ان المتحول k في اول مرة سوف ياخذ اول حرف موجود في d وثاني مرة ثاني حرف وهكذا حتى يصل لنهاية السلسة النصية المسجلة في d

 if k !="@" and c==0 :

اختبر هل k لايساوي "@" و c يساوي الصفر (من اجل التاكد اني في الطرف الاول من الايميل قبل المحرف @)

g+=k

اضيف للمتحول g محتويات المتحول k

elif k=="@":

اذا كان k = "@"

  c=1

اسند 1 الى c

 elif k==":" or a==1 :
        a=1
        g+=k

او اذا كان k يساوي ":" او a يساوي 1

اسند 1 للمتحول a

اضف للg محتويات k

 print g

واخيرا اطبع g

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

تحياتي اتمنى أن تكون مشاركتي هذه قد أفادتك

1

.Because it's FUN to be ALIVE

#7

نعم أخي شكرا لك وجزاك الله خيرا لك ولي والديك

وبالنسبة لمقال الأخ أحمد انا جالس أدرس فيه

وإن شاء لله نوصل لنتيجة وله جزيل الشكر له ولي والديه

وشكرا لك مرة ثانيا

#8
import re
s = "test555-555@gmail.com:test"
output = re.sub(r"(.*)@(.*):(.*)", r"\1|\3", s)
print(output)
1

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#9

الحل الأمثل لمشكلتك :

#!/usr/bin/python
f = open('email.txt','r') #فتح الملف بصلاحية القراءة فقط
for line in f :           #طالما لم تنتهي محتويات الملف كرر هذه الحلقة
    print '%s|%s' % (line[0 : line.find('@')], #'@' وينتهي بالحرف الموجود قبل index 0 يبدأ ب line الأول بجزء من %s تعويض الرمز 
                     line[line.find(':') + 1 : len(line)]) #يبدأ بعد الحرف ':' وينتهي بنهاية السطر line الثاني بجزء من %s تعويض الرمز
f.close() #غلق الملف بعد نهاية كل الأسطر
#10

هذا السكربت يقوم بإظافة الإيميلات و الباسوردات إلى الملف email.txt :

#!/usr/bin/python 
Email = raw_input('Email : ')
Passw = raw_input('Password : ')
Usrinf ='\n%s:%s' % (Email, Passw)
print"\nLINE : %s \nAPPEND TO 'email.txt'" % (Usrinf)
f = open('email.txt','a')
f.write(Usrinf) 
f.close()
1
#11

Xacker

=======

شكرا لك با أخي وربنا يجازيك أنت وولديك

السكربت لازم يقوم بعمل عملية الحذف على كافة إميلات الموجودة في ملف email.txt تخيل مثلا 5000 إميل وباس لازم السكربت يخليهم جميعا يوزر وباس فقط

*****

mohamedz

=======

مرسي عليك خويا ربي يجازيك كل خير أنت والديك

#12
python.sc كتب:

Xacker

=======

شكرا لك با أخي وربنا يجازيك أنت وولديك

السكربت لازم يقوم بعمل عملية الحذف على كافة إميلات الموجودة في ملف email.txt تخيل مثلا 5000 إميل وباس لازم السكربت يخليهم جميعا يوزر وباس فقط

*****

mohamedz

=======

مرسي عليك خويا ربي يجازيك كل خير أنت والديك

ربي يجازيك أنت كي شاركتنا بهذا اللغز الشيق.

#13
python.sc كتب:

Xacker

=======

شكرا لك با أخي وربنا يجازيك أنت وولديك

السكربت لازم يقوم بعمل عملية الحذف على كافة إميلات الموجودة في ملف email.txt تخيل مثلا 5000 إميل وباس لازم السكربت يخليهم جميعا يوزر وباس فقط

أنا وضعت لك مثال فقط

لم أضع سكربت كامل، وهذا واضح :)

كل ما تحتاجه هو تصفح بضع صفحات حول Python والتعامل مع الملفات ومن ثم تقوم بالتعديلات بنفسك، وإلا كيف تريد أن تتعلم؟ ما يؤخذ جاهز يُقرأ وينسى بسرعة.

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#14

نعم يا أخي

وهذا ما طلبته أنا

جزاك الله خيرا لك ولي والديك

في العبارة

re.sub(r"(.*)@(.*):(.*)", r"\1|\3", s)

sub هي لإستبدال كلمة او جملة مكان أخرى مثل ما هو مكتوب في مقال الأخ أحمد

ولكن ما لم أفهمه هو ما تقصد بهذا؟

(r"(.*)@(.*):(.*)", r"\1|\3", s)

وشكا لك مسبقا

#15
r"(.*)@(.*):(.*)"

هو تعبير منتظم، وضعنا r قبله حتى يتم معالجته على أساس أنه regular express

لو أزلناها سيتم التعامل مع السلسلة كنص عادي

لفهم التعابير المنتظمة بشكل كامل عليك البحث عنها عبر الانترنت.

بشكل عام التعبير السابق يقوم بالبحث والمطابقة match مع السلاسل النصية التي تكون بالشكل التالي (سأستعمل العبارة anything للدلالة على أحرف+أرقام+محارف خاصة)

anything@anything:anything

.*: النقطة تطابق أي محرف سواء كان رقم أو حرف أو محرف خاص، و * بعدها يعني محرف أو أكثر أو لا محرف على الإطلاق (فمثلاً: لو كانت السلسلة @hotmail.com:password فهي ستتطابق)

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

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

الآن لو لاحظت فأنا وضعت 3 مجموعات للبحث عنها ومطابقتها والاحتفاظ بها

r"\1|\3"

هذا الجزء يعني استبدل السلسلة السابقة بالمجموعة الأولى ثم | ثم المجموعة الثالثة.

وكما ترى تجاهلت المجموعة الثانية لأنك لا تريدها.

هذا شرح بسيط وسريع بشكل عام.

أود الإشارة إلى أنه يمكن كتابة التعبير المنتظم بأشكال أخرى والحصول على ذات النتيجة أيضاً.

كما أرجو الانتباه إلى أن السلسلة someone@somewhere@hotmail.com:hello ستتطابق أيضاً وسيتم اعتبار الجزء somewhere@hotmail.com هو المجموعة الثانية .. لذلك كما قلت، أفترض أن البيانات المدخلة في الملف سليمة.

بالتوفيق

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#16
Xacker كتب:

r"(.*)@(.*):(.*)"

هو تعبير منتظم، وضعنا r قبله حتى يتم معالجته على أساس أنه regular express

لو أزلناها سيتم التعامل مع السلسلة كنص عادي

لفهم التعابير المنتظمة بشكل كامل عليك البحث عنها عبر الانترنت.

بشكل عام التعبير السابق يقوم بالبحث والمطابقة match مع السلاسل النصية التي تكون بالشكل التالي (سأستعمل العبارة anything للدلالة على أحرف+أرقام+محارف خاصة)

anything@anything:anything

.*: النقطة تطابق أي محرف سواء كان رقم أو حرف أو محرف خاص، و * بعدها يعني محرف أو أكثر أو لا محرف على الإطلاق (فمثلاً: لو كانت السلسلة @hotmail.com:password فهي ستتطابق)

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

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

الآن لو لاحظت فأنا وضعت 3 مجموعات للبحث عنها ومطابقتها والاحتفاظ بها

r"\1|\3"

هذا الجزء يعني استبدل السلسلة السابقة بالمجموعة الأولى ثم | ثم المجموعة الثالثة.

وكما ترى تجاهلت المجموعة الثانية لأنك لا تريدها.

هذا شرح بسيط وسريع بشكل عام.

أود الإشارة إلى أنه يمكن كتابة التعبير المنتظم بأشكال أخرى والحصول على ذات النتيجة أيضاً.

كما أرجو الانتباه إلى أن السلسلة someone@somewhere@hotmail.com:hello ستتطابق أيضاً وسيتم اعتبار الجزء somewhere@hotmail.com هو المجموعة الثانية .. لذلك كما قلت، أفترض أن البيانات المدخلة في الملف سليمة.

بالتوفيق

هذا هو السكربت النهائي بطريقتك :

#!/usr/bin/python
import re
f = open('email.txt','r')
for line in f :
    output = re.sub(r"(.*)@(.*):(.*)", r"\1|\3", line)
    print (output)
f.close()
#17

Xacker

==========

تبارك الله فيك وفي والديك

حقآ التعابير المنتظمة ستحل عديد من المشاكل في نفس الوقت لازم ندرسها بتأني

شكرا لك وحفظك الله وسدد خطاك

************

mohamedz

==========

جزاك الله خيرا أخي لك ولي والديك

وشكرا للجميع من ساعدني بالموضوع

ونلتقي في موضوع آخر إن شاء الله

سلام عليكم

#18
python.sc كتب:

Xacker

==========

تبارك الله فيك وفي والديك

حقآ التعابير المنتظمة ستحل عديد من المشاكل في نفس الوقت لازم ندرسها بتأني

شكرا لك وحفظك الله وسدد خطاك

************

mohamedz

==========

جزاك الله خيرا أخي لك ولي والديك

وشكرا للجميع من ساعدني بالموضوع

ونلتقي في موضوع آخر إن شاء الله

سلام عليكم

لا داعي للشكر فقد أفدتني اكثر مما أفدتك انا.

حاول الإكثار من هذه الالغاز البرمجية فهي مفيدة و تجعلك تفكر حتى يشتعل المصباح.

#19

نعم أخي

الله في عون العبد مدام العبد في عون اخيه

إن شاء الله نحط أفكار أخرى

جزاكم الله خيرا وبارك الله في والديكم

سلام عليكم

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…