5.6 å—符串的I/Oæ“�作¶
问题¶
ä½ æƒ³ä½¿ç”¨æ“�作类文件对象的程åº�æ�¥æ“�作文本或二进制å—符串。
解决方案¶
使用 io.StringIO() å’Œ io.BytesIO() ç±»æ�¥åˆ›å»ºç±»æ–‡ä»¶å¯¹è±¡æ“�作å—符串数æ�®ã€‚比如:
>>> s = io.StringIO()
>>> s.write('Hello World\n')
12
>>> print('This is a test', file=s)
15
>>> # Get all of the data written so far
>>> s.getvalue()
'Hello World\nThis is a test\n'
>>>
>>> # Wrap a file interface around an existing string
>>> s = io.StringIO('Hello\nWorld\n')
>>> s.read(4)
'Hell'
>>> s.read()
'o\nWorld\n'
>>>
io.StringIO å�ªèƒ½ç”¨äºŽæ–‡æœ¬ã€‚å¦‚æžœä½ è¦�æ“�作二进制数æ�®ï¼Œè¦�使用 io.BytesIO ç±»æ�¥ä»£æ›¿ã€‚比如:
>>> s = io.BytesIO()
>>> s.write(b'binary data')
>>> s.getvalue()
b'binary data'
>>>
讨论¶
å½“ä½ æƒ³æ¨¡æ‹Ÿä¸€ä¸ªæ™®é€šçš„æ–‡ä»¶çš„æ—¶å€™ StringIO å’Œ BytesIO 类是很有用的。
比如,在å�•元测试ä¸ï¼Œä½ å�¯ä»¥ä½¿ç”¨ StringIO æ�¥åˆ›å»ºä¸€ä¸ªåŒ…å�«æµ‹è¯•æ•°æ�®çš„类文件对象,
这个对象å�¯ä»¥è¢«ä¼ ç»™æŸ�个å�‚数为普通文件对象的函数。
需è¦�注æ„�的是, StringIO å’Œ BytesIO 实例并没有æ£ç¡®çš„æ•´æ•°ç±»åž‹çš„æ–‡ä»¶æ��述符。
å› æ¤ï¼Œå®ƒä»¬ä¸�能在那些需è¦�使用真实的系统级文件如文件,管é�“或者是套接å—的程åº�ä¸ä½¿ç”¨ã€‚