ฉันจะสร้างออบเจ็กต์ที่มีลักษณะคล้ายไฟล์ (เป็ดประเภทเดียวกับไฟล์) ด้วยเนื้อหาของสตริงได้อย่างไร
ฉันจะสร้างออบเจ็กต์ที่มีลักษณะคล้ายไฟล์ (เป็ดประเภทเดียวกับไฟล์) ด้วยเนื้อหาของสตริงได้อย่างไร
คำตอบ:
สำหรับ Python 2.x ให้ใช้โมดูลStringIO ตัวอย่างเช่น:
>>> from cStringIO import StringIO
>>> f = StringIO('foo')
>>> f.read()
'foo'
ฉันใช้ cStringIO (ซึ่งเร็วกว่า) แต่โปรดทราบว่ามันไม่ยอมรับสตริง Unicode ที่ไม่สามารถเข้ารหัสเป็นสตริง ASCII ธรรมดาได้ (คุณสามารถเปลี่ยนเป็น StringIO ได้โดยเปลี่ยน "จาก cStringIO" เป็น "จาก StringIO")
สำหรับ Python 3.x ให้ใช้io
โมดูล
f = io.StringIO('foo')
io.StringIO(u'foo')
ฉันจะใช้สิ่งนี้
ใน Python 3.0:
import io
with io.StringIO() as f:
f.write('abcdef')
print('gh', file=f)
f.seek(0)
print(f.read())
with
และการเขียนพิมพ์ค้นหาวิธีการอ่าน
ใช้ได้กับ Python2.7 และ Python3.x:
io.StringIO(u'foo')
หากคาดว่าวัตถุคล้ายไฟล์ของคุณมีไบต์สตริงควรเข้ารหัสเป็นไบต์ก่อนจากนั้นจึงสามารถใช้อ็อบเจ็กต์BytesIOแทนได้ ใน Python 3:
from io import BytesIO
string_repr_of_file = 'header\n byline\n body\n body\n end'
function_that_expects_bytes(BytesIO(bytes(string_repr_of_file,encoding='utf-8')))
สองคำตอบที่ดี ฉันจะเพิ่มเคล็ดลับเล็กน้อย - หากคุณต้องการอ็อบเจ็กต์ไฟล์จริง (บางวิธีคาดหวังอย่างใดอย่างหนึ่งไม่ใช่แค่อินเทอร์เฟซ) นี่คือวิธีสร้างอะแดปเตอร์: