将字符串当做文件处理

将字符串当做文件处理

StringIO将字符串当做文件处理,十分方便

>>> from StringIO import StringIO
>>> file_like_string = StringIO()
>>> file_like_string.write("hello\n") #写入数据
>>> file_like_string.write("world\n")
>>> file_like_string.write("I am StringIO\n")
>>> dir(file_like_string)
['__doc__', '__init__', '__iter__', '__module__', 'buf', 'buflist', 'close', 'closed', 'flush', 'getvalue', 'isatty', 'len', 'next', 'pos', 'read', 'readline', 'readlines', 'seek', 'softspace', 'tell', 'truncate', 'write', 'writelines']
>>> file_like_string.getvalue() #获取StringIO中包含的所有数据,与当前读写位置无关
'hello\nworld\nI am StringIO\n'
>>> file_like_string.tell() #获取当前读写位置
26
>>> file_like_string.read() #从末尾开始读取
''
>>> file_like_string.seek(0) #定位到开头
>>> file_like_string.read() #读取所有数据
'hello\nworld\nI am StringIO\n'
>>> file_like_string.seek(0)
>>> file_like_string.readline() #一次读取一行
'hello\n'
>>> file_like_string.readline()
'world\n'
>>> file_like_string.seek(0)
>>> file_like_string.readlines() #读取所有行放入列表中
['hello\n', 'world\n', 'I am StringIO\n']
>>> file_like_string.seek(0)
>>> for line in file_like_string: #StringIO对象可迭代,__iter__
... print line.strip()
...
hello
world
I am StringIO
>>> file_like_string.seek(6) #定位,起始位置偏移量为0
>>> file_like_string.getvalue()
'hello\nworld\nI am StringIO\n'
>> file_like_string.len #获取内部字符串长度
26
>>> file_like_string.truncate() #从指定位置开始截断数据
>>> file_like_string.getvalue()
'hello\n'
>> file_like_string.len
6
>>> file_like_string.close() #关闭StringIO对象
05-08 15:50