เปิดไฟล์ในโหมด 'rt' และ 'wt'


109

หลายครั้งที่นี่ฉันเคยเห็นคนใช้rtและwtโหมดสำหรับการอ่านและเขียนไฟล์

ตัวอย่างเช่น:

with open('input.txt', 'rt') as input_file:
     with open('output.txt', 'wt') as output_file: 
         ...

ฉันไม่เห็นโหมดที่บันทึกไว้แต่เนื่องจากopen()ไม่เกิดข้อผิดพลาด - ดูเหมือนว่าจะใช้งานได้ค่อนข้างถูกกฎหมาย

มีไว้ทำอะไรและมีความแตกต่างระหว่างการใช้wtvs wและ rtvs rอย่างไร?

คำตอบ:


194

tหมายถึงโหมดข้อความ ไม่มีความแตกต่างระหว่างrและrtหรือwและwtเนื่องจากโหมดข้อความเป็นค่าเริ่มต้น

เอกสารที่นี่ :

Character   Meaning
'r'     open for reading (default)
'w'     open for writing, truncating the file first
'x'     open for exclusive creation, failing if the file already exists
'a'     open for writing, appending to the end of the file if it exists
'b'     binary mode
't'     text mode (default)
'+'     open a disk file for updating (reading and writing)
'U'     universal newlines mode (deprecated)

โหมดเริ่มต้นคือ'r'(เปิดสำหรับการอ่านข้อความคำพ้องความหมาย'rt')


4
Gotcha มันถูกบันทึกไว้ในเอกสาร python3 ดังนั้นโดยพื้นฐานแล้วไม่มีความแตกต่างระหว่างwtvs wและrtvs r- เพียงแค่explicit is better than implicit?
alecxe

@alecxe ถูกต้องเนื่องจากโหมดข้อความเป็นค่าเริ่มต้นจึงไม่มีความแตกต่างระหว่างrและrt...
devnull

9
โปรดทราบว่าwไม่เท่ากับwt. กรณีหนึ่งคือgzip.openโหมดไบนารีเป็นค่าเริ่มต้นไม่ใช่โหมดข้อความ คำถามที่เกี่ยวข้อง: stackoverflow.com/questions/42013083/…
Carl Ekerot

9

tบ่งชี้โหมดข้อความหมายความว่า\nตัวละครจะถูกแปลไปยังโฮสต์ OS ปลายสายเมื่อเขียนไปยังแฟ้มและกลับมาอีกครั้งเมื่อมีการอ่าน ค่าสถานะเป็นเพียงเสียงรบกวนเนื่องจากโหมดข้อความเป็นค่าเริ่มต้น

อื่น ๆ กว่าUผู้ธงโหมดมาโดยตรงจาก C ไลบรารีมาตรฐานของfopen()ฟังก์ชั่นความจริงที่ว่ามีการบันทึกไว้ในวรรคหกของเอกสาร python2open()สำหรับ

เท่าที่ฉันรู้tไม่ใช่และไม่เคยเป็นส่วนหนึ่งของมาตรฐาน C ดังนั้นแม้ว่าการใช้งานไลบรารี C จำนวนมากจะยอมรับอย่างไรก็ตามไม่มีการรับประกันว่าทั้งหมดจะทำได้ดังนั้นจึงไม่มีการรับประกันว่าจะใช้งานได้กับทุกรุ่น หลาม นั่นอธิบายได้ว่าทำไมเอกสาร python2 จึงไม่แสดงรายการและเหตุใดจึงใช้งานได้โดยทั่วไป เอกสาร python3ทำให้มันอย่างเป็นทางการ


4

'r' ใช้สำหรับการอ่าน 'w' สำหรับการเขียนและ 'a' สำหรับต่อท้าย

't' หมายถึงโหมดข้อความเมื่อผนวกเข้ากับโหมดไบนารี

หลายครั้งที่นี่ฉันเคยเห็นคนใช้โหมด rt และ wt เพื่ออ่านและเขียนไฟล์

แก้ไข:คุณแน่ใจหรือไม่ว่าคุณเห็น rt และไม่ใช่ rb?

โดยทั่วไปฟังก์ชันเหล่านี้จะห่อหุ้มฟังก์ชันfopenซึ่งอธิบายไว้ที่นี่:

http://www.cplusplus.com/reference/cstdio/fopen/

ดังที่คุณเห็นกล่าวถึงการใช้ b เพื่อเปิดไฟล์ในโหมดไบนารี

ลิงก์เอกสารที่คุณระบุยังอ้างอิงถึงโหมด b นี้ด้วย:

การต่อท้าย 'b' มีประโยชน์แม้ในระบบที่ไม่ถือว่าไฟล์ไบนารีและไฟล์ข้อความแตกต่างกันโดยทำหน้าที่เป็นเอกสารประกอบ


ใช่มันชัดเจนrtเช่นstackoverflow.com/questions/10971033/…หรือstackoverflow.com/questions/17127853/…เป็นต้นขอบคุณสำหรับข้อมูลน่ารู้
alecxe

ในลิงค์ที่ devnull ให้ตัวเลือกข้อความ 't' แสดงอยู่ สิ่งที่ทำให้ฉันประหลาดใจคือลิงก์ C ++ ไม่ได้พูดถึงตัวเลือก 't' นั้นด้วยเพราะฉันค่อนข้างแน่ใจว่าฉันใช้ตัวเลือก 'rt' และ 'wt' ในโค้ด C fopen ที่เขียนไว้เมื่อหลายปีก่อน
jussij

ใช่นั่นเป็นเหตุผลที่ฉันถาม - มันเป็นเหมือนคุณสมบัติที่ไม่มีเอกสารสำหรับฉัน หวังว่ากระทู้จะช่วยใครบางคนในอนาคต ขอบคุณอีกครั้ง.
alecxe

3

t บ่งชี้สำหรับ text mode

https://docs.python.org/release/3.1.5/library/functions.html#open

บน linux ไม่มีความแตกต่างระหว่างโหมดข้อความและโหมดไบนารีอย่างไรก็ตามใน windows พวกเขาจะแปลง\nเป็น\r\nเมื่อโหมดข้อความ

http://www.cygwin.com/cygwin-ug-net/using-textbinary.html


5
ใน Python 3 มีความแตกต่างเพิ่มเติมระหว่างโหมดข้อความและไฟล์ไบนารี (ในทุกแพลตฟอร์ม) ในโหมดข้อความreadส่งคืนสตริง Unicode ในโหมดไบนารีreadส่งคืนbytesอินสแตนซ์ หากคุณต้องการเขียนโค้ด Python 2 โดยคำนึงถึงความเข้ากันได้ของฟอร์เวิร์ดคุณสามารถใช้io.openแทนที่จะใช้มาตรฐานopenเพื่อรับลักษณะการทำงานของ Python 3 ( unicodeเมื่อเทียบกับstrอินสแตนซ์)
Blckknght
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.