بطبيعتها ليست بسيطة. ثيريس أي وسيلة لمعرفة بالتأكيد، على الرغم من أنك يمكن أن تأخذ تخمين جيد إلى حد معقول في معظم الحالات. أشياء قد ترغب في القيام بها: ابحث عن أرقام السحر المعروفة في التوقيعات الثنائية ابحث عن ونيكود بايت ترتيب النظام في بداية الملف إذا كان الملف بانتظام 00 شكس 00 شكس 00 شكس (ل شكس التعسفي) أو العكس بالعكس، وهذا من المحتمل جدا أوتف-16 وإلا، والبحث عن 0S في ملف ملف مع 0 في من غير المرجح أن يكون ملف نصي بترميز واحد بايت. ولكن كل شيء الاستدلال - من الممكن جدا أن يكون الملف الذي هو ملف نصي صالح وملف صورة صالح، على سبيل المثال. قد يكون هراء كملف نصي، ولكن مشروعة في بعض الترميز أو غيرها. الرد أفاتار سيب 18 09 في 09: 20 كيفية قراءة وكتابة الملفات في بيثون عند البرمجة you39re في لغة بايثون وراء البرامج الأكثر تافهة، you39ll وعادة ما تكون هناك حاجة لقراءة البيانات من وكتابة البيانات إلى الملفات الموجودة خارج البرنامج نفسه. بيثون يوفر آليات سهلة للوصول وتعديل ملفات محددة باستخدام وظائف قياسية التي هي جزء من اللغة الأساسية. فتح الملفات في بيثون قرر سياسة الاستخدام. تحتاج إلى معرفة ما إذا كنت بحاجة إلى قراءة من أو الكتابة إلى الملف قبل أن تتمكن من فتح الملف. فقط فتح الملف مع الأذونات التي تحتاج إليها حقا و don39t فتح ملف في وضع القراءة والكتابة عندما تحتاج فقط لقراءة منه. سيؤدي ذلك إلى منع الكتابة غير المقصودة إلى الملف الذي يجب أن تكون مكتوبة عليه. تقرر ما إذا كان سيتم استخدام أسي أو وضع ثنائي. إذا كنت 39re قراءة النص، you39ll تريد استخدام وضع أسي. إذا كنت تقرأ البيانات الثنائية 39، استخدام الوضع الثنائي. سيؤدي هذا الوضع إلى ترجمة نهايات الخط إلى الوضع الذي يستخدمه نظام التشغيل. إنشاء سلسلة الوضع. الحرف الأول هو قراءة أو كتابة الوضع. إذا كنت تريد فتح في وضع ثنائي، إضافة كوتكوت إلى نهاية السلسلة. على سبيل المثال، لقراءة في وضع أسي، سلسلة الوضع سيكون كوتوركوت والكتابة في وضع ثنائي، سلسلة الوضع سيكون كوتكوت. افتح الملف باستخدام الدالة المفتوحة. قم بتخزين عنصر الملف الناتج في متغير. على سبيل المثال: f أوبين (كوتيلناميجوزيريكوت، كوتوركوت) قراءة من الملفات في بايثون إيتيرات على جميع الخطوط. يمكن استخدام كائن ملف كمجموعة مع حلقة كوتفوركوت. يمكنك تكرار عبر كافة الأسطر في ملف (إجراء شائع) مع عبارة فور. للخط في f: خط الطباعة البحث عن نقطة معينة في الملف. لا يتم قراءة الملفات دائما بالتتابع حتى it39s غالبا ما تكون ضرورية للبحث عن نقطة معينة في الملف قبل القراءة من الملف. يمكنك القيام بذلك باستخدام طريقة البحث لكائن ملف. سعى إلى 100 بايت f. seek (100) تسعى إلى 10 بايت من بايت الحالي f. seek (10، 1) قراءة البيانات الثنائية من ملف. باستخدام طريقة قراءة كائن ملف، يمكنك قراءة عدد تعسفي من وحدات البايت من ملف. قراءة 16 بايت من ملف بوف f. read (16) الكتابة إلى ملفات بيثون كتابة البيانات إلى ملف. إذا تم فتح ملف في وضع الكتابة، يمكنك كتابة أسي أو البيانات الثنائية إليها. يتم ذلك باستخدام طريقة كتابة كائن ملف. f. write (هذا هو بعض تكستكوت) كتابة الكائنات إلى ملف. إذا كنت بحاجة إلى حفظ حالة داخلية object39s، يمكنك كوتبيكليكوت ذلك. لخلط كائن، لديك أولا لاستيراد وحدة المخلل. بعد ذلك، يمكنك مخلل تقريبا أي كائن مع وظيفة pickle. dump. استيراد مخلل pickle. dump (أنيوبجيكت، و) إغلاق الملف. بعد اكتمال الكتابة، عليك إغلاق الملف. وهذا يضمن أن يتم مسح كافة المخازن المؤقتة و لا يتم تأمين الملف حتى البرامج الأخرى يمكن الوصول إليه. ويتم ذلك بالطريقة الوثيقة لكائن الملف. المدخلات والمخرجات هناك عدة طرق لعرض مخرجات بيانات البرنامج يمكن طباعتها في شكل قابل للقراءة، أو كتابة إلى ملف لاستخدامها في المستقبل. وسيناقش هذا الفصل بعض الاحتمالات. 7.1. المخرجات تنسيق الإخراج حتى الآن واجهنا we8217ve طريقتين من كتابة القيم: عبارات التعبير وبيان الطباعة. (الطريقة الثالثة تستخدم طريقة الكتابة () في ملف الملفات يمكن أن يشار إلى ملف الإخراج القياسي كما sys. stdout انظر مرجع المكتبة لمزيد من المعلومات حول هذا.) في كثير من الأحيان كنت ترغب في 8217ll أكثر من السيطرة على تنسيق الإخراج الخاص بك من مجرد طباعة القيم المفصولة بفضاء. هناك طريقتان لتنسيق الإخراج الخاص بك الطريقة الأولى هو أن تفعل كل سلسلة التعامل مع نفسك باستخدام سلسلة تشريح وعمليات تسلسل يمكنك إنشاء أي تخطيط يمكنك أن تتخيل. أنواع السلاسل لها بعض الأساليب التي تؤدي عمليات مفيدة لسلاسل الحشو إلى عرض عمود معين سيتم مناقشتها قريبا. الطريقة الثانية هي استخدام أسلوب str. format (). تحتوي وحدة السلسلة على فئة قالب تقدم طريقة أخرى لاستبدال القيم بالسلاسل. يبقى سؤال واحد، بطبيعة الحال: كيف يمكنك تحويل القيم إلى سلاسل لحسن الحظ، بيثون لديه طرق لتحويل أي قيمة إلى سلسلة: تمريرها إلى ريبر () أو ستر () وظائف. وتهدف الدالة ستر () إلى إعادة تمثيل القيم التي يمكن قراءتها إلى حد ما، في حين أن ريبر () يهدف إلى توليد تمثيل يمكن قراءته من قبل المترجم (أو سيجبر سينتاكسيرور إذا لم يكن هناك بناء جملة مكافئ). للكائنات التي don8217t لها تمثيل معين للاستهلاك البشري، ستر () سيعود نفس القيمة كما ريبر (). العديد من القيم، مثل الأرقام أو الهياكل مثل القوائم والقواميس، لها نفس التمثيل باستخدام أي وظيفة. أما السلاسل وأرقام النقاط العائمة، على وجه الخصوص، فتكون تمثيلين متميزين. فيما يلي طريقتان لكتابة جدول مربعات ومكعبات: (لاحظ أنه في المثال الأول، تمت إضافة مسافة واحدة بين كل عمود بالطريقة التي تعمل بها الطباعة: فهي تضيف دائما مسافات بين وسيطاتها). يوضح هذا المثال ستر. () كائنات سلسلة، الذي يبرر حق سلسلة في حقل عرض معين من خلال حشو مع مسافات على اليسار. هناك أساليب مشابهة str. ljust () و str. center (). هذه الأساليب لا يكتب أي شيء، أنها مجرد عودة سلسلة جديدة. إذا كانت سلسلة الإدخال طويلة جدا، فإنها don8217t اقتطاع ذلك، ولكن إعادته دون تغيير هذا سوف يفسد العمود الخاص بك وضع ولكن هذا 8217s عادة أفضل من البديل، الذي سيكون الكذب حول قيمة. (إذا كنت تريد حقا اقتطاع يمكنك دائما إضافة عملية شريحة، كما هو الحال في x. ljust (n): n.) هناك طريقة أخرى، str. zfill (). والتي تفرز سلسلة رقمية على اليسار مع الأصفار. تفهم علامات زائد و ناقص: الاستخدام الأساسي للطريقة str. format () يشبه هذا: يتم استبدال الأقواس والحروف داخلها (تسمى حقول التنسيق) بالأشياء التي تم تمريرها إلى أسلوب str. format (). يشير عدد بين الأقواس إلى موضع الكائن الذي تم تمريره إلى أسلوب str. format (). في حالة استخدام وسيطات الكلمات الرئيسية في أسلوب str. format ()، تتم الإشارة إلى قيمها باستخدام اسم الوسيطة. يمكن الجمع بين وسيطات الموضع والكلمات الرئيسية بشكل تعسفي: 7.2. القراءة والكتابة تقوم الملفات المفتوحة () بإرجاع كائن ملف، وتستخدم بشكل شائع مع وسيطتين: أوبين (فلنام، واسطة). الوسيطة الأولى عبارة عن سلسلة تحتوي على اسم الملف. الوسيطة الثانية عبارة عن سلسلة أخرى تحتوي على عدد قليل من الأحرف تصف الطريقة التي سيتم استخدام الملف بها. يمكن أن يكون r عندما سيتم قراءة الملف فقط، w للكتابة فقط (سيتم مسح ملف موجود بنفس الاسم)، وفتح الملف لإلحاق أي بيانات مكتوبة إلى الملف تتم إضافتها تلقائيا إلى النهاية. r يفتح الملف لكل من القراءة والكتابة. وسيتحمل الوسيطة الأسلوب R اختياري إذا تم حذف 8217s. على ويندوز، ب إلحاق إلى وضع يفتح الملف في وضع ثنائي، لذلك هناك أيضا وسائط مثل رب. البنك الدولي. و رب. بيثون على ويندوز يجعل التمييز بين النص والملفات الثنائية يتم تغيير حرف نهاية الخط في الملفات النصية تلقائيا قليلا عند قراءة البيانات أو كتابتها. هذا وراء الكواليس تعديل البيانات ملف على ما يرام لملفات نصية أسي، ولكن it8217ll البيانات الثنائية الفاسدة مثل ذلك في ملفات جبيغ أو إيكس. كن حذرا جدا لاستخدام الوضع الثنائي عند قراءة وكتابة هذه الملفات. على أونيكس، فإنه doesn8217t يصب إلحاق ب إلى الوضع، حتى تتمكن من استخدامه منصة بشكل مستقل لجميع الملفات الثنائية. 7.2.1. طرق كائنات الملف بقية الأمثلة في هذا القسم سوف تفترض أن كائن ملف يسمى f قد تم بالفعل إنشاء. لقراءة محتويات file8217s، اتصل f. read (الحجم). الذي يقرأ بعض كمية البيانات ويعيدها كسلسلة. الحجم هو وسيطة رقمية اختيارية. عندما يتم حذف حجم أو سلبية، سيتم قراءة محتويات الملف بالكامل وإعادته 8217s مشكلتك إذا كان الملف هو ضعف حجم ذاكرة الجهاز 8217s. وإلا، يتم قراءة وإرجاع بايت الحجم الأكبر. إذا تم الوصول إلى نهاية الملف، سوف f. read () إرجاع سلسلة فارغة (كوتكوت). f. readline () يقرأ سطر واحد من الملف يتم ترك حرف جديد (n) في نهاية السلسلة، ويتم حذفه فقط على السطر الأخير من الملف إذا كان الملف don8217t نهاية في خط جديد. وهذا يجعل قيمة العودة لا لبس فيها إذا كان f. readline () بإرجاع سلسلة فارغة، تم التوصل إلى نهاية الملف، في حين يمثل سطر فارغ بواسطة n. سلسلة تحتوي على خط جديد واحد فقط. بالنسبة لخطوط القراءة من ملف، يمكنك إجراء حلقة فوق كائن الملف. هذا هو كفاءة الذاكرة وسريعة، ويؤدي إلى رمز بسيط: إذا كنت ترغب في قراءة كافة خطوط ملف في قائمة يمكنك أيضا استخدام قائمة (و) أو f. readlines (). f. write (سلسلة) يكتب محتويات السلسلة إلى الملف، لا يعود. لكتابة شيء آخر غير سلسلة، فإنه يحتاج إلى تحويل إلى سلسلة أولا: f. tell () بإرجاع عدد صحيح إعطاء الكائن ملف 8217s الموقف الحالي في الملف، يقاس بايت من بداية الملف. لتغيير موضع ملف الكائن 8217s، استخدم f. seek (أوفست، فروموات). يتم حساب الموضع من إضافة الإزاحة إلى نقطة مرجعية يتم اختيار النقطة المرجعية بواسطة الوسيطة من. A من قيمة قيمة 0 تدابير من بداية الملف 1 يستخدم موضع الملف الحالي و 2 يستخدم نهاية الملف كنقطة مرجعية. فروموت يمكن حذفها والإعدادات الافتراضية 0، وذلك باستخدام بداية الملف كنقطة مرجعية. عندما فعلت you8217re مع ملف، استدعاء f. close () لإغلاقه وتحرير أي موارد النظام التي يستغرقها الملف المفتوح. بعد استدعاء f. close (). فإن محاولات استخدام كائن الملف سوف تفشل تلقائيا. من الممارسة السليمة استخدام الكلمة الرئيسية مع عند التعامل مع كائنات الملف. هذا له ميزة أن الملف مغلق بشكل صحيح بعد انتهاء جناحه، حتى إذا تم رفع استثناء على الطريق. هو أيضا أقصر بكثير من كتابة محاولة مكافئة - أخيرا كتل: كائنات ملف لديها بعض الأساليب الإضافية، مثل إيساتي () واقتطاع () والتي هي أقل استخداما استشارة مرجع المكتبة للحصول على دليل كامل لملفات الكائنات. 7.2.2. حفظ البيانات المنظمة مع جسون يمكن بسهولة كتابة السلاسل إلى وقراءة من ملف. الأرقام تأخذ المزيد من الجهد، لأن طريقة القراءة () ترجع فقط السلاسل، والتي يجب أن يتم تمريرها إلى وظيفة مثل إنت (). الذي يأخذ سلسلة مثل 123 ويعيد قيمته الرقمية 123. عندما تريد حفظ أنواع بيانات أكثر تعقيدا مثل القوائم المتداخلة والقواميس، يصبح التحليل والتسلسل باليد معقدا. بدلا من وجود المستخدمين باستمرار الكتابة وتصحيح التعليمات البرمجية لحفظ أنواع البيانات المعقدة إلى الملفات، بيثون يسمح لك باستخدام تنسيق تبادل البيانات شعبية تسمى جسون (جافاسكريبت كائن تدوين). وحدة نمطية القياسية تسمى جسون يمكن أن تأخذ تسلسل هرمي البيانات بيثون، وتحويلها إلى تمثيلات سلسلة تسمى هذه العملية تسلسل. إعادة بناء البيانات من تمثيل سلسلة يسمى ديسيرياليزينغ. بين تسلسل و ديسيرياليزينغ، السلسلة التي تمثل الكائن قد تم تخزينها في ملف أو بيانات، أو إرسالها عبر اتصال شبكة إلى بعض الجهاز البعيد. يستخدم شكل جسون عادة من قبل التطبيقات الحديثة للسماح لتبادل البيانات. العديد من المبرمجين بالفعل على دراية به، مما يجعله خيارا جيدا للتشغيل البيني. إذا كان لديك كائن x. يمكنك عرض تمثيل سلسلة جسون مع سطر بسيط من التعليمات البرمجية: البديل آخر من دومبس () وظيفة، ودعا تفريغ (). ببساطة تسلسل الكائن إلى ملف. إذا كان f هو كائن ملف فتح للكتابة، يمكننا القيام بذلك: فك الكائن مرة أخرى، إذا كان f هو كائن ملف الذي تم فتحه للقراءة: هذه التقنية التسلسلية بسيطة يمكن التعامل مع القوائم والقواميس، ولكن تسلسل حالات الطبقة التعسفية في جسون يتطلب قليلا من جهد إضافي. يحتوي مرجع وحدة جسون على شرح لذلك. مخلل - وحدة المخلل على عكس جسون. المخلل هو بروتوكول الذي يسمح تسلسل كائنات بيثون معقدة بشكل تعسفي. وعلى هذا النحو، فإنها تخص بيثون ولا يمكن استخدامها للتواصل مع التطبيقات المكتوبة بلغات أخرى. كما أنها غير آمنة افتراضيا: ديسيرياليزينغ البيانات المخلل القادمة من مصدر غير موثوق بها يمكن تنفيذ أوامر تخريبية، إذا تم وضع البيانات من قبل مهاجم ماهرة. باقتراح من كريسبي: لاحظ أن البيان مع غير متوفر في إصدارات بيثون أدناه 2.5. لاستخدامه في v 2.5 ستحتاج لاستيراده: في 2.6 هذا ليس هناك حاجة. في بيثون 3، لها مختلفة قليلا. لن نحصل على أحرف خام من تيار في وضع البايت ولكن الكائنات بايت، وبالتالي نحن بحاجة إلى تغيير الشرط: أو كما يقول بينهويت، تخطي لا يساوي والاستفادة من حقيقة أن ب يقيم إلى كاذبة. وهذا يجعل التعليمات البرمجية متوافقة بين 2.6 و 3.x دون أي تغييرات. فإنه أيضا يوفر لك من تغيير حالة إذا ذهبت من وضع بايت إلى نص أو العكس. لقراءة ملف بايت واحد في المرة الواحدة (تجاهل التخزين المؤقت)، يمكنك استخدام الدالة المضمنة إيتر (قابلة للاستدعاء، الحارس) المضمنة: وهي تستدعي file. read (1) حتى لا تقوم بإرجاع أي شيء b (فارغ). الذاكرة لا تنمو غير محدود للملفات الكبيرة. يمكنك تمرير buffering0 لفتح (). لتعطيل التخزين المؤقت يضمن أن يتم قراءة بايت واحد فقط في التكرار. مع - statement يغلق الملف تلقائيا بما في ذلك الحالة عندما رمز تحتها يثير استثناء. على الرغم من وجود التخزين المؤقت الداخلي افتراضيا، فإنه لا يزال غير فعال لمعالجة بايت واحد في وقت واحد. على سبيل المثال، هيريس الأداة المساعدة blackhole. py أن يأكل كل ما تعطى: 1.5 غيغابايت مع بوفسيزي الافتراضي على الجهاز الخاص بي و 7.5 مبس فقط إذا bufsize1. وهذا هو، فمن 200 مرات أبطأ لقراءة بايت واحد في وقت واحد. خذها في الاعتبار إذا كان يمكنك إعادة كتابة المعالجة الخاصة بك لاستخدام أكثر من بايت واحد في وقت واحد وإذا كنت بحاجة إلى الأداء. ماباب يسمح لك لعلاج ملف كما بيتيراي وكائن ملف في وقت واحد. يمكن أن تكون بديلا لتحميل الملف بأكمله في الذاكرة إذا كنت بحاجة إلى الوصول إلى كل من الواجهات. على وجه الخصوص، يمكنك إيتيريت بايت واحد في وقت واحد على ملف تعيين الذاكرة فقط باستخدام عادي ل - lop: يدعم ماب التدوين شريحة. على سبيل المثال، ممي: إلين ترجع وحدات البايت لين من الملف بدءا من الموضع i. لا يتم اعتماد بروتوكول مدير السياق قبل بيثون 3.2 تحتاج إلى الاتصال mm. close () صراحة في هذه الحالة. يتكرر فوق كل بايت باستخدام مماب يستهلك المزيد من الذاكرة من file. read (1). ولكن مماب هو أمر من حجم أسرع. أجاب نوف 16 13 في 4:47 لتلخيص كل النقاط الرائعة من كريسبي، سكورمديل، بن هويت وبيتر هانسن، وهذا سيكون الحل الأمثل لمعالجة ملف ثنائي بايت واحد في وقت واحد: لإصدارات بيثون 2.6 وما فوق، لأن: الثعبان مخازن داخليا - لا حاجة لقراءة قطع مبدأ دري - لا تكرار خط القراءة مع بيان يضمن ملف نظيفة وثيقة بايت يقيم إلى كاذبة عندما لا يكون هناك المزيد من بايت (وليس عندما بايت هو صفر) أو استخدام حل جف سيباستيانز لتحسين سرعة أو إذا كنت تريد ذلك كدالة مولد مثل أظهرت من قبل كوديب: أجاب 6 سبتمبر في 7:55 جفسباستيان - أنت 100 صحيح - ربما أسرع بكثير نداش هولغر بيل 9 مايو 16 في 8:12 كما الجواب المرتبط يقول، ريادسبروسيسينغ بايت واحد في وقت لا يزال بطيئا في بايثون حتى لو كانت قراءات مخزنة. يمكن تحسين الأداء بشكل كبير إذا كان يمكن معالجة عدة بايتات في وقت واحد كما هو الحال في المثال في الإجابة المرتبطة: 1.5GBs مقابل 7.5MBs. نداش J. F. سيباستيان قد 9 16 في 11:49 إذا كان لديك الكثير من البيانات الثنائية للقراءة، قد ترغب في النظر في وحدة الهيكل. يتم توثيقها على أنها تحويل بين أنواع C و بيثون، ولكن بطبيعة الحال، بايت بايت، وما إذا كانت تلك التي تم إنشاؤها كما أنواع C لا يهم. على سبيل المثال، إذا احتوت بياناتك الثنائية على عددين صحيين من بايتين و عدد صحيح من 4 بايت، يمكنك قراءتها على النحو التالي (مثال مأخوذ من الوثائق الهيكلية): قد تجد هذا أكثر ملاءمة أو أسرع أو كليهما، محتوى الملف. أجاب على 1 يوليو 15 في 11:24 قراءة الملف الثنائي في بيثون وحلقة فوق كل بايت يتيح جعل ملف: الآن يتيح التكرار أكثر من ذلك، وذلك باستخدام العلم رب (قراءة الوضع، وضع بايت). لاحظ أن تعدد الحلقات لا يزيد من التعقيد (الذي يبقى O (n)) - هذه هي الطريقة التي تكرر بها بشكل متكرر على ملف - خط سطرا. هذا سوف حلقة فوق كل بايت في التعليمات البرمجية، دون أي هاكي. read (1) الأعمال. هذا هو أكثر بكثير بيثونيك والطبيعية من الحلقة بينما تعقيد إيف رأيت في الأجوبة الأخرى هنا. قراءة مخزنة مؤقتا إذا كان لديك ملفات كبيرة مع عدم وجود خطوط جديدة، قد تحتاج إلى عازلة القراءة الخاصة بك. يتطلب بيثون 2.7 io. open للحصول على هذا: ولدينا الآن قارئ مخزنة: بيثون 3S بنيت وظيفة مفتوحة هو 2S io. open.
No comments:
Post a Comment