Làm cách nào để tạo một đối tượng giống tệp (giống vịt với Tệp) với nội dung là một chuỗi?
Làm cách nào để tạo một đối tượng giống tệp (giống vịt với Tệp) với nội dung là một chuỗi?
Câu trả lời:
Đối với Python 2.x, hãy sử dụng mô-đun StringIO . Ví dụ:
>>> from cStringIO import StringIO
>>> f = StringIO('foo')
>>> f.read()
'foo'
Tôi sử dụng cStringIO (nhanh hơn), nhưng lưu ý rằng nó không chấp nhận các chuỗi Unicode không thể được mã hóa thành chuỗi ASCII thuần túy . (Bạn có thể chuyển sang StringIO bằng cách thay đổi "từ cStringIO" thành "từ StringIO".)
Đối với Python 3.x, hãy sử dụng io
mô-đun.
f = io.StringIO('foo')
io.StringIO(u'foo')
Tôi sẽ sử dụng cái này
Trong Python 3.0:
import io
with io.StringIO() as f:
f.write('abcdef')
print('gh', file=f)
f.seek(0)
print(f.read())
with
-statement và các phương thức write, print, seek, read.
Nếu đối tượng giống tệp của bạn dự kiến chứa byte, thì chuỗi trước tiên phải được mã hóa dưới dạng byte, sau đó có thể sử dụng đối tượng BytesIO để thay thế. Trong 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')))
Hai câu trả lời hay. Tôi muốn thêm một mẹo nhỏ - nếu bạn cần một đối tượng tệp thực (một số phương pháp yêu cầu một đối tượng, không chỉ là một giao diện), đây là một cách để tạo một bộ điều hợp: