أسماء فؤاد نشر 15 أغسطس 2018 أرسل تقرير نشر 15 أغسطس 2018 مرحبا .. سؤال من مرحلة ابتدائية لما اكتب كود بلغة البايثون ع اساس انه يقرأ من ملف txt : و هذا جزء من النص اللي فيه المشكلة :1!2!3 اذا نسخت النص و لصقته في ملف txt و حفظته و عملت run تطلع نتيجة ال run طبيعية ['1', '2', '3'] لكن اذا كتبت ملف ال txt يدوياً و حفظته تطلع النتيجة بالشكل دا l ['1\xe2\x80\xaa', '\xe2\x80\xac2\xe2\x80\xaa', '\xe2\x80\xac3'] l للارقام فقط ، أما الحروف تطلع عادية ['a', 'b', 'c'] للنص a!b!c اذا عملت print "\xe2\x80\xac".decode("utf-8")l تطلع النتيجة ع انها سطر او مسافة ،نفس الشي ل \xe2\x80\xaa اللاب توب :ماك البيئة : pycharm النسخة : ٢.٧ الموجود ع الماك لكم الشكر مسبقاً .. اقتباس
2 Amjad Alsharafi نشر 20 أغسطس 2018 أرسل تقرير نشر 20 أغسطس 2018 (معدل) أولا: عند كتابة هذا النوع من الأسئلة يجب كتابة الكود أو (الجزء ذو المشكلة من الكود)، أيضا يفضّل ارفاق ملف النص ذو المشكلة. السؤال ليس سؤال مرحلة ابتدائية أبدا. هذا بسبب اليونيكود و طريقة كتابة اللغة العربية. كما هو معروف اللغة العربية و بعض اللغات الأخرى تكتب من اليمين الى اليسار بعكس اللغة الإنجليزية. لكي يقوم الحاسب الآلي بكتابة الحروف العربية(مثلا) بطريقة صحيحة تم إستعمال حروف/رموز خاصة غير مرئية تخبر البرنامج بأنه يجب تغيير اتجاه الكتابة من هنا، ومنها: \xe2\x80\xaa (U+202A) -> LEFT-TO-RIGHT \xe2\x80\xab (U+202B) -> RIGHT-TO-LEFT \xe2\x80\xac (U+202C) -> POP DIRECTIONAL FORMATTING اعادة الوضع الإفتراضي **وغيرها. من أسباب ظهور هذه الرموز عند التشغيل الملف: 1-ملف النص باللغة العربية وهذا الجزئ باللغة الإنجليزية. 2-أن هذه الأرقام مسجلة كرموز عربية بسبب لوحة المفاتيح. (لهذا السبب يتم تجاهل رموز التحويل عند النسخ ). ---------------------------- اذا كانت المشكلة بسبب لوحة المفاتيح: تستطيع عمل فلتر داخل البرنامج اذا كان هذا لا يؤثر على إتجاه النص. إذا كنت تريدين معرفة المزيد بهذا الشأن تستطيعين البحث عن اليونيكود(Unicode) وكيفية عمله. روابط: Bi-directional_text Unicode تم التعديل في 20 أغسطس 2018 بواسطة Amjad Alsharafi 1 اقتباس
0 أسماء فؤاد نشر 16 أغسطس 2018 الكاتب أرسل تقرير نشر 16 أغسطس 2018 بتاريخ On ١٥/٨/٢٠١٨ at 09:42 قال أسماء فؤاد: اذا كتبت ملف ال txt يدوياً و حفظته تطلع النتيجة بالشكل دا l ['1\xe2\x80\xaa', '\xe2\x80\xac2\xe2\x80\xaa', '\xe2\x80\xac3'] l هذا سؤالي اعذرني ما فهمتك ليش تطلع نتيجة ال run بهذا الشكل عند كتابة الملف يدوياً وحفظه بينما تظهر ['1', '2', '3'] اذا نسخت بيانات الملف و الصقتها و حفظت الملف؟؟ مالمشكلة و كيف احلها ؟ اقتباس
0 أسماء فؤاد نشر 25 أغسطس 2018 الكاتب أرسل تقرير نشر 25 أغسطس 2018 اشكر لك ردك .. جداً amjad alsharafi فعلاً هو بسبب حفظ الملف باتجاه الكتابة من اليمين لليسار بتاريخ On 8/20/2018 at 19:43 قال Amjad Alsharafi: اذا كانت المشكلة بسبب لوحة المفاتيح: تستطيع عمل فلتر داخل البرنامج اذا كان هذا لا يؤثر على إتجاه النص. اذا ممكن تشرح لي هذا الجزء، فضلاً.. كيف اعمل فلتر ؟ النص الموجود بداخل الملف: ١!٢!٣ ٢!٣!٤ ٣!٤!٥ آو ارقام انجليزية محفوظة باتجاه من اليمين لليسار عملتها بهذا الشكل: def parse (file,x=";",y="#"): f = open(file).readlines() result = [] for line in f: if line[0] == y: continue else: line = line.strip() line = line.split(x) temp = [] for element in line: element = element.replace("\xe2\x80\xaa", "") element = element.replace("\xe2\x80\xac", "") element = element.replace("\xe2\x80\xab", "") if "\xd9" in element: temp.append(arabic_num(element)) else: temp.append(element) result.append(temp) return result print parse('file.txt', '!', '#'),"\n" هل تقصد شيء آخر؟ اوحل آخر ليس لدي الكثير من المعرفة حتى الآن سؤال متعلق .. إذا عملت def parse_1 (file,x=";",y="#"): f = open(file).readlines() for line in f: print "\n",line #string line = line.strip() line = line.split(x) print line #list for element in line: print(element) تكون النتيجة ١!٢!٣ ['\xd9\xa1\xe2\x80\xab', '\xe2\x80\xac\xd9\xa2\xe2\x80\xab', '\xe2\x80\xac\xd9\xa3'] ١ ٢ ٣ ٢!٣!٤ ['\xd9\xa2\xe2\x80\xab', '\xe2\x80\xac\xd9\xa3\xe2\x80\xab', '\xe2\x80\xac\xd9\xa4'] ٢ ٣ ٤ ٣!٤!٥ ['\xd9\xa3\xe2\x80\xab', '\xe2\x80\xac\xd9\xa4\xe2\x80\xab', '\xe2\x80\xac\xd9\xa5'] ٣ ٤ ٥ بمعنى انه من الممكن ان يطبع الارقام العربية او باتجاه من اليمين الا اذا دخلت في list هنا تحدث المشكلة أي تفسير ؟ أو حل ؟ جزيت عني الجنة .. اقتباس
0 Amjad Alsharafi نشر 26 أغسطس 2018 أرسل تقرير نشر 26 أغسطس 2018 بتاريخ 21 ساعات قال أسماء فؤاد: هل تقصد شيء آخر؟ اوحل آخر لا، الحل جيد. تستطيعين اختصار بعض السطور: # element = element.replace("\xe2\x80\xaa", "") # element = element.replace("\xe2\x80\xac", "") # element = element.replace("\xe2\x80\xab", "") # translate يستخدم للتبديل بين الحروف لكن يمكن حذف الحروف غيرالمرغوبة # .عن طريق وضعها في الخانة الثانية element = element.translate(None, "\xe2\x80\xaa" + "\xe2\x80\xac" + "\xe2\x80\xab") بالنسبة لمشكلة عدم ظهور الحروف العربية داخل القائمة(list)، فلم أجد تفسيرا لها، لكن هناك حل. يبدو أن المشكلة غير موجودة في نسخة البايثون3 (Python3). #Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:54:40) [MSC v.1900 64 bit (AMD64)] on win32 def parse_1 (file, x=";", y="#"): f = open(file, encoding='utf-8').readlines() # ^^^^^^^ # .يجب تحديد طريقة التشفير التي يجب قراءة الملف بها # . من الممكن أن يتم قراءة الملف بشك خاطئ اذا تم استعمال التشفير التلقائي for line in f: if line[0] == y: continue line = line.strip() print(line) #string line = line.split(x) print(line) #list for element in line: print(element) print() parse_1('arabic.txt', '!') الناتج: ١!٢!٣ ['١', '٢', '٣'] ١ ٢ ٣ ٢!٣!٤ ['٢', '٣', '٤'] ٢ ٣ ٤ ٣!٤!٥ ['٣', '٤', '٥'] ٣ ٤ ٥ 1 اقتباس
0 أسماء فؤاد نشر 26 أغسطس 2018 الكاتب أرسل تقرير نشر 26 أغسطس 2018 جزيل شكري .. بالنسبة للسؤال الثاني بتاريخ 5 ساعات قال Amjad Alsharafi: f = open(file, encoding='utf-8').readlines()l # ^^^^^^^ # .يجب تحديد طريقة التشفير التي يجب قراءة الملف بها # . من الممكن أن يتم قراءة الملف بشك خاطئ اذا تم استعمال التشفير التلقائي لما غيرت السطر إلى المذكور ظهر لي هذا الخطأ التالي : TypeError: 'encoding' is an invalid keyword argument for this function او انه خاص بنسخة البايثون٣ ؟ اقتباس
0 Amjad Alsharafi نشر 27 أغسطس 2018 أرسل تقرير نشر 27 أغسطس 2018 بتاريخ 11 ساعات قال أسماء فؤاد: او انه خاص بنسخة البايثون٣ ؟ نعم. عند استخدام بايثون2 ليس من الضروري تحديد نوع التشفير. 1 اقتباس
السؤال
أسماء فؤاد
مرحبا ..
سؤال من مرحلة ابتدائية
لما اكتب كود بلغة البايثون ع اساس انه يقرأ من ملف txt : و هذا جزء من النص اللي فيه المشكلة :1!2!3
اذا نسخت النص و لصقته في ملف txt و حفظته و عملت run تطلع نتيجة ال run طبيعية ['1', '2', '3']
لكن اذا كتبت ملف ال txt يدوياً و حفظته تطلع النتيجة بالشكل دا
l ['1\xe2\x80\xaa', '\xe2\x80\xac2\xe2\x80\xaa', '\xe2\x80\xac3'] l
للارقام فقط ، أما الحروف تطلع عادية ['a', 'b', 'c'] للنص a!b!c
اذا عملت print "\xe2\x80\xac".decode("utf-8")l تطلع النتيجة ع انها سطر او مسافة ،نفس الشي ل \xe2\x80\xaa
اللاب توب :ماك
البيئة : pycharm
النسخة : ٢.٧ الموجود ع الماك
لكم الشكر مسبقاً ..
7 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.