Wednesday 16 August 2017

งูใหญ่ อ่าน ข้อความ ไฟล์ เป็น ไบนารี ตัวเลือก


7. อินพุตและเอาต์พุตมีหลายวิธีที่จะนำเสนอผลลัพธ์ของข้อมูลโปรแกรมสามารถพิมพ์ในรูปแบบที่มนุษย์สามารถอ่านได้หรือเขียนลงในไฟล์เพื่อใช้ในอนาคต บทนี้จะกล่าวถึงความเป็นไปได้บางอย่าง 7.1 การจัดรูปแบบผลลัพธ์ Fancier จนถึงตอนนี้เราพบกับสองวิธีในการเขียนค่า: statement statement และ print statement (วิธีที่สามคือการใช้วิธี write () ของอ็อบเจ็กต์ไฟล์ไฟล์เอาต์พุตมาตรฐานสามารถถูกอ้างถึงเป็น sys. stdout ดูข้อมูลอ้างอิงเกี่ยวกับ Library Reference สำหรับข้อมูลนี้) บ่อยครั้งที่คุณต้องการควบคุมรูปแบบการแสดงผลของคุณมากกว่าเพียงแค่ ค่าที่คั่นด้วยพื้นที่พิมพ์ มีสองวิธีในการจัดรูปแบบเอาท์พุทของคุณวิธีแรกคือการทำสตริงทั้งหมดด้วยตัวเองโดยใช้การตัดสตริงและการดำเนินการแบ่งส่วนซึ่งคุณสามารถสร้างโครงร่างที่สามารถจินตนาการได้ ประเภทสตริงมีวิธีการบางอย่างที่ใช้ในการดำเนินการที่เป็นประโยชน์สำหรับการเบาะ padding เพื่อความกว้างคอลัมน์ที่กำหนดเหล่านี้จะมีการกล่าวถึงในไม่ช้า วิธีที่สองคือการใช้วิธี str. format () โมดูลสตริงประกอบด้วยชั้นเทมเพลตซึ่งมีวิธีอื่นในการเปลี่ยนค่าเป็นสตริง คำถามหนึ่งคงยังคงแน่นอนว่า: คุณแปลงค่าเป็นสตริงอย่างไรโชคดี Python มีวิธีการแปลงค่าใด ๆ ให้เป็นสตริง: ส่งผ่านไปยังฟังก์ชัน repr () หรือ str () ฟังก์ชัน str () หมายถึงการแสดงค่าที่อ่านได้อย่างเป็นธรรมในขณะที่ repr () หมายถึงการสร้างตัวแทนซึ่งสามารถอ่านได้โดยล่าม (หรือจะบังคับ SyntaxError หากไม่มีไวยากรณ์เทียบเท่า) สำหรับวัตถุที่ don8217t มีการแสดงเฉพาะสำหรับการบริโภคของมนุษย์ str () จะคืนค่าเดียวกับ repr () ค่าหลายค่าเช่นหมายเลขหรือโครงสร้างเช่นรายการและพจนานุกรมมีการใช้ฟังก์ชันเดียวกันแทน สตริงและตัวเลขจุดลอยโดยเฉพาะอย่างยิ่งมีสองตัวแทนที่แตกต่างกัน ต่อไปนี้เป็นสองวิธีในการเขียนตารางสี่เหลี่ยมจัตุรัสและสี่เหลี่ยม (โปรดสังเกตว่าในตัวอย่างแรกช่องว่างระหว่างแต่ละคอลัมน์จะถูกเพิ่มโดยวิธีการพิมพ์: จะเพิ่มช่องว่างระหว่างอาร์กิวเมนต์เสมอ) ตัวอย่างนี้แสดงให้เห็นถึงการใช้งาน STR. Rjust () ของวัตถุสตริงซึ่งจะทำให้สตริงถูกต้องในฟิลด์ที่มีความกว้างโดยการเว้นช่องว่างไว้ทางด้านซ้าย มีวิธีการที่คล้ายกัน str. ljust () และ str. center () วิธีการเหล่านี้ไม่ได้เขียนอะไรพวกเขาเพียงแค่ส่งกลับสตริงใหม่ หากสตริงอินพุทยาวเกินไปพวกเขาจะตัดมันออก แต่กลับไม่ได้เปลี่ยนค่านี้จะทำให้คอลัมน์ของคุณเลอะเลือนออกไป แต่ that8217s มักจะดีกว่าทางเลือกอื่นซึ่งจะเป็นการโกหกเกี่ยวกับค่า (ถ้าคุณต้องการตัดทอนจริงๆคุณสามารถเพิ่มการดำเนินการของชิ้นส่วนได้เช่นเดียวกับใน x. ljust (n): n) มีวิธีอื่นคือ str. zfill () ซึ่งจะใส่สตริงตัวเลขทางด้านซ้ายให้กับศูนย์ เข้าใจเกี่ยวกับเครื่องหมายบวกและลบ: การใช้พื้นฐานของเมธอด str. format () จะมีลักษณะดังนี้วงเล็บและอักขระภายใน (เรียกว่าฟอร์แมตฟอร์แมต) จะถูกแทนที่ด้วยอ็อบเจ็กต์ที่ส่งเข้ามาในเมธอด str. format () จำนวนในวงเล็บหมายถึงตำแหน่งของวัตถุที่ส่งเข้ามาในวิธี str. format () ถ้าอาร์กิวเมนต์คำหลักถูกใช้ในเมธอด str. format () ค่าของพวกเขาจะถูกอ้างถึงโดยใช้ชื่อของอาร์กิวเมนต์ อาร์กิวเมนต์ตำแหน่งและคำหลักสามารถรวมกันโดยพลการ: 7.2. การอ่านและการเขียนไฟล์ open () ส่งคืนออบเจ็กต์ไฟล์และใช้กันมากที่สุดโดยมีอาร์กิวเมนต์สองแบบคือ open (filename, mode) อาร์กิวเมนต์แรกคือสตริงที่มีชื่อไฟล์ อาร์กิวเมนต์ที่สองเป็นสตริงที่มีอักขระสองสามตัวที่อธิบายถึงวิธีการใช้ไฟล์ โหมดสามารถ r เมื่ออ่านไฟล์ได้เฉพาะ w เท่านั้นสำหรับการเขียน (แฟ้มที่มีอยู่เดิมโดยจะถูกลบ) และจะเปิดไฟล์สำหรับผนวกข้อมูลใด ๆ ที่เขียนขึ้นในไฟล์โดยอัตโนมัติจนจบ r เปิดไฟล์สำหรับทั้งการอ่านและเขียน อาร์กิวเมนต์โหมดเป็นตัวเลือก r จะถูกสันนิษฐานหาก it8217s ถูกละไว้ ใน Windows b ต่อท้ายโหมดจะเปิดไฟล์ในโหมดไบนารีดังนั้นจึงมีโหมดเช่น rb wb และ rb Python บน Windows ทำให้ความแตกต่างระหว่างข้อความและไฟล์ไบนารีอักขระบรรทัดสุดท้ายในไฟล์ข้อความจะถูกปรับเปลี่ยนเล็กน้อยเมื่ออ่านหรือเขียนข้อมูล การแก้ไขข้อมูลเบื้องหลังนี้เป็นข้อมูลไฟล์ ASCII ที่ถูกต้อง แต่ข้อมูลไบต์ที่มันมีความเสียหายเท่ากับไฟล์ JPEG หรือ EXE ระมัดระวังในการใช้โหมดไบนารีเมื่ออ่านและเขียนไฟล์ดังกล่าว ใน Unix จะไม่สามารถเพิ่มโหมด b ลงในโหมดได้ดังนั้นคุณจึงสามารถใช้แพลตฟอร์มนี้ได้อย่างอิสระสำหรับไฟล์ไบนารีทั้งหมด 7.2.1 เมธอด File Objects ส่วนที่เหลือของตัวอย่างในส่วนนี้จะถือว่าอ็อบเจ็กต์ไฟล์ f ถูกสร้างขึ้นแล้ว หากต้องการอ่านเนื้อหา file8217s ให้เรียก f. read (ขนาด) ซึ่งอ่านปริมาณข้อมูลบางส่วนและส่งกลับเป็นสตริง ขนาดเป็นอาร์กิวเมนต์ตัวเลขที่เป็นตัวเลือก เมื่อขนาดถูกลบหรือลบเนื้อหาทั้งหมดของไฟล์จะได้รับการอ่านและส่งคืนปัญหานี้หากไฟล์มีขนาดใหญ่เป็นสองเท่าของหน่วยความจำเครื่อง8217ของคุณ มิฉะนั้นไบต์ที่มีขนาดใหญ่ที่สุดจะอ่านและส่งคืน ถ้าถึงจุดสิ้นสุดของไฟล์ f. read () จะส่งคืนสตริงว่าง (quotquot) f. readline () อ่านบรรทัดเดียวจากไฟล์อักขระ newline (n) จะถูกปล่อยทิ้งไว้ที่ส่วนท้ายของสตริงและจะถูกละเว้นเฉพาะในบรรทัดสุดท้ายของไฟล์หากไฟล์ doesn8217t สิ้นสุดลงในบรรทัดใหม่ ซึ่งทำให้ค่าที่ส่งคืนไม่คลุมเครือถ้า f. readline () ส่งกลับค่าสตริงที่ว่างเปล่าตอนท้ายของไฟล์ถึงแล้วในขณะที่บรรทัดว่างจะแสดงด้วย n สตริงที่มีบรรทัดใหม่เพียงบรรทัดเดียว สำหรับการอ่านบรรทัดจากไฟล์คุณสามารถวนรอบวัตถุไฟล์ได้ นี่คือหน่วยความจำที่มีประสิทธิภาพรวดเร็วและนำไปสู่โค้ดง่ายๆ: ถ้าคุณต้องการอ่านบรรทัดทั้งหมดของไฟล์ในรายการคุณสามารถใช้รายการ (f) หรือ f. readlines () f. write (string) เขียนเนื้อหาของสตริงไปยังไฟล์โดยส่งคืน None เมื่อต้องการเขียนสิ่งอื่นที่ไม่ใช่สตริงจะต้องแปลงเป็นสตริงก่อน: f. tell () จะคืนค่าจำนวนเต็มให้กับตำแหน่งปัจจุบันของไฟล์ object8217s ในไฟล์วัดเป็นไบต์จากจุดเริ่มต้นของไฟล์ ในการเปลี่ยนตำแหน่งไฟล์ object8217s ให้ใช้ f. seek (offset, fromwhat) ตำแหน่งจะถูกคำนวณจากการเพิ่มค่าชดเชยให้กับจุดอ้างอิงจุดอ้างอิงถูกเลือกโดยอาร์กิวเมนต์ fromwhat ค่าจาก 0 จากจุดเริ่มต้นของแฟ้ม 1 ใช้ตำแหน่งแฟ้มปัจจุบันและ 2 ใช้จุดสิ้นสุดของแฟ้มเป็นจุดอ้างอิง fromwhat สามารถละเว้นและค่าเริ่มต้นเป็น 0 โดยใช้จุดเริ่มต้นของไฟล์เป็นจุดอ้างอิง เมื่อ you8217re ทำกับไฟล์โทร f. close () เพื่อปิดและเพิ่มทรัพยากรระบบใด ๆ ที่นำขึ้นโดยเปิดไฟล์ หลังจากโทร f. close () ความพยายามที่จะใช้วัตถุแฟ้มจะล้มเหลวโดยอัตโนมัติ ควรใช้คำหลักกับคำหลักในการจัดการกับอ็อบเจ็กต์ไฟล์ ข้อดีของไฟล์นี้คือการปิดไฟล์อย่างถูกต้องหลังจากเสร็จสิ้นชุดโปรแกรมแล้วแม้ว่าจะมีข้อยกเว้นเกิดขึ้นก็ตาม นอกจากนี้ยังน้อยกว่าการเขียนเทียบเท่ากันลอง - finally blocks: วัตถุ File มีวิธีการเพิ่มเติมบางอย่างเช่น isatty () และ truncate () ซึ่งใช้บ่อยๆน้อยลงไปดู Reference Library สำหรับคำแนะนำในการเก็บไฟล์ 7.2.2 การบันทึกข้อมูลที่มีโครงสร้างด้วยสตริง json สามารถเขียนและอ่านจากไฟล์ได้อย่างง่ายดาย ตัวเลขต้องใช้ความพยายามอีกเล็กน้อยเนื่องจาก read () จะคืนค่าสตริงซึ่งจะต้องส่งผ่านไปยังฟังก์ชันเช่น int () ซึ่งใช้สตริง 123 เช่นเดียวกับค่าตัวเลข 123 เมื่อคุณต้องการบันทึกชนิดข้อมูลที่ซับซ้อนกว่าเช่นรายการที่ซ้อนกันและพจนานุกรมการแยกวิเคราะห์และการทำให้เป็นอันดับด้วยมือจะกลายเป็นเรื่องยุ่งยาก แทนที่จะให้ผู้ใช้เขียนและแก้จุดบกพร่องรหัสเพื่อจัดเก็บชนิดข้อมูลที่ซับซ้อนลงในไฟล์ Python จะช่วยให้คุณสามารถใช้รูปแบบการแลกเปลี่ยนข้อมูลที่เป็นที่นิยมเรียกว่า JSON (JavaScript Object Notation) โมดูลมาตรฐานที่เรียกว่า json สามารถใช้ลำดับชั้นข้อมูล Python และแปลงให้เป็นสตริงการแทนกระบวนการนี้เรียกว่า serializing การสร้างข้อมูลใหม่จากการแทนสตริงจะเรียกว่า deserializing ระหว่างการจัดลำดับและ deserializing สตริงที่เป็นตัวแทนของวัตถุอาจถูกเก็บไว้ในไฟล์หรือข้อมูลหรือส่งผ่านการเชื่อมต่อเครือข่ายไปยังเครื่องที่ห่างไกล รูปแบบ JSON มักถูกใช้โดยแอพพลิเคชั่นที่ทันสมัยเพื่อให้สามารถแลกเปลี่ยนข้อมูลได้ โปรแกรมเมอร์หลายคนคุ้นเคยกับมันอยู่แล้วซึ่งเป็นทางเลือกที่ดีสำหรับการทำงานร่วมกัน ถ้าคุณมีวัตถุ x คุณสามารถดูการแทนสตริง JSON ด้วยบรรทัดง่ายๆของโค้ด: ตัวแปรอื่นของ dumps () เรียกว่า dump () เพียง serializes วัตถุไปยังแฟ้ม ดังนั้นหาก f เป็นอ็อบเจ็กต์ไฟล์ที่เปิดขึ้นสำหรับการเขียนเราสามารถทำได้ดังนี้: หากต้องการถอดรหัสวัตถุอีกครั้งถ้า f เป็นอ็อบเจ็กต์ไฟล์ที่ถูกเปิดอ่านแล้ว: เทคนิคการเรียงลำดับแบบนี้สามารถจัดการรายการและพจนานุกรมได้ ใน JSON ต้องใช้ความพยายามเป็นพิเศษ การอ้างอิงสำหรับโมดูล json ประกอบด้วยคำอธิบายนี้ ดอง - โมดูลกระป๋องขัดต่อ JSON ดองเป็นโปรโตคอลที่ช่วยให้การทำให้เป็นอันดับของวัตถุ Python ที่ซับซ้อนโดยพลการ เช่นนี้เป็นเฉพาะ Python และไม่สามารถใช้ในการสื่อสารกับโปรแกรมที่เขียนในภาษาอื่น ๆ นอกจากนี้ยังมีความไม่ปลอดภัยโดยค่าดีฟอลต์: ข้อมูล deserializing pickles ที่มาจากแหล่งที่มาที่ไม่น่าเชื่อถือสามารถรันโค้ดได้ตามใจชอบหากข้อมูลถูกสร้างขึ้นโดยผู้ที่มีทักษะในการโจมตีด้วยคำแนะนำของ chrispy: โปรดทราบว่าคำสั่ง with ไม่มีใน Python เวอร์ชัน 2.5 เพื่อใช้ใน v 2.5 คุณจะต้องนำเข้า: ใน 2.6 นี้ไม่จำเป็นต้อง ใน Python 3 มีความแตกต่างเล็กน้อย เราจะไม่ได้รับอักขระดิบจากสตรีมในโหมดไบต์ แต่ไบต์ดังนั้นเราจำเป็นต้องปรับเปลี่ยนเงื่อนไข: หรือเป็น benhoyt กล่าวว่าข้ามค่าเท่ากันและใช้ประโยชน์จากข้อเท็จจริงที่ว่า b ประเมินเป็นเท็จ ทำให้โค้ดมีความเข้ากันได้ระหว่าง 2.6 และ 3.x โดยไม่มีการเปลี่ยนแปลงใด ๆ นอกจากนี้ยังช่วยให้คุณประหยัดจากการเปลี่ยนเงื่อนไขถ้าคุณไปจากโหมดไบต์เป็นข้อความหรือย้อนกลับ หากต้องการอ่านไฟล์ทีละไบต์ (ละเว้นบัฟเฟอร์) คุณสามารถใช้ฟังก์ชัน built-in ที่มีสองอาร์กิวเมนต์ (callable, sentinel): เรียกไฟล์ file. read (1) จนกว่าจะไม่มีข้อมูล b (empty bytestring) หน่วยความจำไม่สามารถเติบโตได้ไม่ จำกัด สำหรับไฟล์ขนาดใหญ่ คุณสามารถผ่าน buffering0 เพื่อเปิด () เพื่อปิดใช้งานบัฟเฟอร์จะรับประกันได้ว่าจะอ่านได้เพียงหนึ่งไบต์ต่อการทำซ้ำ กับ - สถานะปิดไฟล์โดยอัตโนมัติรวมทั้งกรณีเมื่อโค้ดด้านล่างยกข้อยกเว้น แม้จะมีการแสดงบัฟเฟอร์ภายในตามค่าดีฟอลต์ แต่ก็ยังไม่สามารถประมวลผลไบต์ได้ทีละหนึ่งไบต์ ตัวอย่างเช่นเฮ้อรรถประโยชน์ blackhole. py ที่กินทุกอย่างที่จะได้รับ: 1.5 GBs กับ bufsize เริ่มต้นในเครื่องของฉันและเพียง 7.5 MBs ถ้า bufsize1 กล่าวคือช้ากว่า 200 ครั้งในการอ่านหนึ่งไบต์ในแต่ละครั้ง นำไปพิจารณาหากคุณสามารถเขียนการประมวลผลเพื่อใช้มากกว่าหนึ่งไบต์ในแต่ละครั้งและหากต้องการประสิทธิภาพ mmap ช่วยให้คุณสามารถจัดการกับแฟ้มเป็น bytearray และวัตถุแฟ้มพร้อมกัน สามารถใช้เป็นทางเลือกในการโหลดไฟล์ทั้งหมดในหน่วยความจำหากคุณต้องการเข้าถึงอินเทอร์เฟซทั้งสอง โดยเฉพาะอย่างยิ่งคุณสามารถย้ำหนึ่งไบต์ได้ตลอดเวลาผ่านไฟล์ที่แมปหน่วยความจำเพียงแค่ใช้ plain สำหรับ - loop: mmap สนับสนุนสัญกรณ์ slice ยกตัวอย่างเช่น mmi: ilen ส่งกลับ len bytes จากไฟล์เริ่มต้นที่ตำแหน่ง i โพรโทคอลตัวจัดการบริบทไม่ได้รับการสนับสนุนก่อนที่จะใช้งูหลาม 3.2 คุณต้องเรียกใช้ mm. close () อย่างชัดเจนในกรณีนี้ การวนซ้ำของแต่ละไบต์โดยใช้ MMap จะใช้หน่วยความจำมากกว่า file. read (1) แต่ mmap เป็นลำดับความเร่งเร็วขึ้น ตอบว่าน่าจะเป็นทางออกที่ดีที่สุดสำหรับการประมวลผลไบนารีไฟล์หนึ่งไบต์ต่อครั้ง: สำหรับไพ ธ อนเวอร์ชัน 2.6 และสูงกว่า, เนื่องจาก: บัฟเฟอร์หลามภายใน - ไม่จำเป็นต้องอ่านหลักการ chunks DRY - อย่าอ่านบรรทัดอ่านพร้อมคำสั่งเพื่อให้แน่ใจว่าไฟล์ที่ใกล้เคียงกับไบต์จะประเมินเป็นเท็จเมื่อไม่มีไบต์มากขึ้น (ไม่ใช่ไบต์เมื่อเป็นศูนย์) หรือใช้วิธีแก้ปัญหาของ JF Sebastians สำหรับความเร็วที่ดีขึ้นหรือถ้าคุณต้องการเป็นฟังก์ชั่นเครื่องกำเนิดไฟฟ้าเช่นแสดงให้เห็นโดย codeape: ตอบ 6 กันยายน 13 เวลา 7:55 JFSebastian - คุณมี 100 ถูกต้อง - อาจเร็วขึ้นมาก #: 18938 Holger Bille เป็นคำตอบที่เชื่อมโยง กล่าวว่า readprocessing หนึ่งไบต์ในเวลายังคงช้าใน Python แม้ว่าอ่านจะ buffered ประสิทธิภาพสามารถปรับปรุงได้อย่างมากถ้าหลายไบต์ในแต่ละครั้งสามารถประมวลผลได้ตามตัวอย่างในคำตอบที่เชื่อมโยง: 1.5GBs vs. 7.5MBs ndash J. F. เซบาสเตียน 9 พฤษภาคม 16 เวลา 11:49 ถ้าคุณมีข้อมูลไบนารีมากในการอ่านคุณอาจต้องการพิจารณาโมดูล struct เป็นเอกสารที่แปลงระหว่างประเภท C และ Python แต่แน่นอนว่าไบต์เป็นไบต์และไม่ว่าจะเป็นแบบ C ที่สร้างขึ้นก็ไม่สำคัญ ตัวอย่างเช่นถ้าข้อมูลไบนารีของคุณประกอบด้วยสองจำนวนเต็ม 2 ไบต์และจำนวนเต็ม 4 ไบต์คุณสามารถอ่านได้ดังนี้ (ตัวอย่างจากโครงสร้างเอกสาร): คุณอาจพบว่าสะดวกรวดเร็วและเร็วกว่าการวนซ้ำอย่างชัดเจน เนื้อหาของไฟล์ อ่านไฟล์ไบนารีในงูหลามและวนลูปมากกว่าแต่ละไบต์ให้ไฟล์: ตอนนี้ให้ย้ำผ่านมันโดยใช้ธง rb (โหมดอ่าน, โหมดไบต์) โปรดทราบว่าหลายลูปไม่เพิ่มความซับซ้อน (ซึ่งยังคงเป็น O (n)) - นี่เป็นเพียงวิธีการที่คุณวนซ้ำไปเรื่อย ๆ ผ่านไฟล์บรรทัดละบรรทัด นี้จะห่วงมากกว่าแต่ละ byte ในรหัสโดยไม่ hacky ใด ๆ . (1) ธุรกิจ นี้เป็น Pythonic มากขึ้นและเป็นธรรมชาติกว่าในขณะที่ห่วงและความซับซ้อน Ive เห็นในคำตอบอื่น ๆ ที่นี่ อ่านบัฟเฟอร์หากคุณมีไฟล์ขนาดใหญ่ที่ไม่มีบรรทัดใหม่คุณอาจต้องการอ่านข้อมูล Python 2.7 ต้องการ io. open เพื่อให้ได้ข้อมูลนี้และขณะนี้เรามีโปรแกรมอ่าน buffered: ฟังก์ชัน builtin ของ Python 3s คือ io. open 2 วินาทีวิธีการอ่านและเขียนไฟล์ใน Python เมื่อคุณกำลังเขียนโปรแกรมภาษา Python นอกเหนือจากโปรแกรมที่น่ารำคาญที่สุด โดยทั่วไปคุณจะต้องอ่านข้อมูลจากและเขียนข้อมูลลงในไฟล์ที่อยู่นอกโปรแกรม Python มีกลไกง่ายๆในการเข้าถึงและแก้ไขไฟล์โดยใช้ฟังก์ชันมาตรฐานซึ่งเป็นส่วนหนึ่งของภาษาหลัก เปิดไฟล์ใน Python ตัดสินใจเกี่ยวกับนโยบายการใช้งาน คุณจำเป็นต้องทราบว่าคุณจำเป็นต้องอ่านหรือเขียนไฟล์ก่อนจึงจะสามารถเปิดไฟล์ได้ เปิดเฉพาะไฟล์ที่มีสิทธิ์ที่คุณต้องการจริงๆและไม่ต้องเปิดไฟล์ในโหมดอ่านเขียนเมื่อคุณต้องการอ่านจากไฟล์เท่านั้น การดำเนินการนี้จะป้องกันการเขียนโดยไม่ได้ตั้งใจไปยังไฟล์ที่คุณไม่ควรเขียน ตัดสินใจว่าจะใช้ ASCII หรือโหมดไบนารีหรือไม่ หากคุณกำลังอ่านข้อความคุณจะต้องใช้โหมด ASCII หากคุณกำลังอ่านข้อมูลไบนารีให้ใช้โหมดไบนารี โหมดนี้จะแปลส่วนท้ายบรรทัดไปยังโหมดที่ระบบปฏิบัติการของคุณใช้ สร้างสตริงโหมด อักขระตัวแรกเป็นโหมดอ่านหรือเขียน ถ้าคุณต้องการเปิดในโหมดไบนารีเพิ่มโควต้าที่ส่วนท้ายของสตริง ตัวอย่างเช่นการอ่านในโหมด ASCII สตริงโหมดจะเป็น quotrquot และเขียนในโหมดไบนารีสตริงโหมดจะเป็น quotwbquot เปิดไฟล์โดยใช้ฟังก์ชันเปิด จัดเก็บออบเจกต์ไฟล์ที่เป็นผลลัพธ์ในตัวแปร ตัวอย่างเช่น: f open (quotfilenamegoesherequot, quotrquot) อ่านจากไฟล์ใน Python Iterate เหนือทุกบรรทัด อ็อบเจ็กต์ไฟล์สามารถใช้เป็นคอลเล็กชันกับลูป quotforquot คุณสามารถย้ำทุกบรรทัดในไฟล์ (การดำเนินการทั่วไป) ด้วยคำสั่ง for สำหรับบรรทัดใน f: print line ค้นหาจุดที่ต้องการในไฟล์ ไฟล์ไม่ได้อ่านตามลำดับเสมอไปดังนั้นจึงมักต้องหาจุดที่ต้องการในไฟล์ก่อนอ่านจากไฟล์ คุณสามารถทำสิ่งนี้ด้วยวิธีการค้นหาของอ็อบเจ็กต์ไฟล์ ค้นหาไบต์ 100 f. seek (100) ค้นหาไบต์ 10 ไบต์จากไบต์ปัจจุบัน (10, 1) อ่านข้อมูลไบนารีจากไฟล์ คุณสามารถอ่านจำนวนไบต์จากจำนวนไฟล์โดยใช้วิธีการอ่านของอ็อบเจ็กต์ไฟล์ อ่าน 16 ไบต์จากไฟล์ buf f. read (16) เขียนถึงไฟล์ Python เขียนข้อมูลลงในไฟล์ หากเปิดไฟล์ในโหมดเขียนคุณสามารถเขียน ASCII หรือข้อมูลไบนารีลงในไฟล์ได้ นี้จะกระทำด้วยวิธีการเขียนของวัตถุแฟ้ม f. write (quot นี่คือ textquot) เขียนอ็อบเจ็กต์ลงในไฟล์ ถ้าคุณต้องการบันทึกสถานะภายในของวัตถุคุณสามารถ quotpicklequot ได้ เมื่อต้องการดองวัตถุคุณต้องนำเข้าโมดูลดองก่อน หลังจากนั้นคุณสามารถดองเกือบทุกวัตถุใด ๆ ด้วยฟังก์ชัน pickle. dump นำเข้า pickle pickle. dump (anyobject, f) ปิดไฟล์ หลังจากเขียนเสร็จแล้วคุณต้องปิดไฟล์ เพื่อให้แน่ใจว่าบัฟเฟอร์ทั้งหมดจะถูกล้างและไฟล์ไม่ได้ล็อกไว้เพื่อให้โปรแกรมอื่นสามารถเข้าถึงได้ ซึ่งทำได้โดยใช้วิธีการปิดของอ็อบเจ็กต์ไฟล์

No comments:

Post a Comment