1.StringIO模块

StringIO用于像文件一样对字符串缓冲区或者叫做内存文件进行读写。

f = StringIO()      # ready for writing

f = StringIO(buf)   # ready for reading

f.close()           # explicitly release resources held

flag = f.isatty()   # always false

pos = f.tell()      # get current position

f.seek(pos)         # set current position

f.seek(pos, mode)   # mode 0: absolute; 1: relative; 2: relative to EOF

buf = f.read()      # read until EOF

buf = f.read(n)     # read up to n bytes

buf = f.readline()  # read until end of line ('\n') or EOF

list = f.readlines()# list of f.readline() results until EOF

f.truncate([size])  # truncate file at to at most size (default: current pos)

f.write(buf)        # write at current position

f.writelines(list)  # for line in list: f.write(line)

f.getvalue()        # return whole file's contents as a string

在有些时候python调用shell命令或者使用socket向端口发送命令后返回一大串分行的字符串。就可以使用StringIO对这些字符串分行读写。

例如向ZooKeeper的端口发送mntr命令

import sockets=socket.socket()
s.connect(('localhost',2181))
s.send('mntr')
data_mntr=s.recv(2048)
s.close()
print data_mntr
# python test.py
zk_version3.4.6-1569965, built on 02/20/2014 09:09 GMT
zk_avg_latency0
zk_max_latency0
zk_min_latency0
zk_packets_received335
zk_packets_sent334
zk_num_alive_connections1
zk_outstanding_requests0
zk_server_statefollower
zk_znode_count17159
zk_watch_count0
zk_ephemerals_count1
zk_approximate_data_size6666471
zk_open_file_descriptor_count27
zk_max_file_descriptor_count102400

data_mntr返回的数据就是一个string buffer,如果需要对每行数据进行读写,就需要像文件那样使用readline()或者readlines()

#!/usr/bin/python
import socket
from StringIO import StringIO
s=socket.socket()
s.connect(('localhost',2181))
s.send('mntr')
data_mntr=s.recv(2048)
s.close()h=StringIO(data_mntr)print h.readline()
print h.readlines()
# python test.py
zk_version3.4.6-1569965, built on 02/20/2014 09:09 GMT['zk_avg_latency\t0\n', 'zk_max_latency\t0\n', 'zk_min_latency\t0\n', 'zk_packets_received\t347\n', 'zk_packets_sent\t346\n', 'zk_num_alive_connections\t1\n', 'zk_outstanding_requests\t0\n', 'zk_server_state\tfollower\n', 'zk_znode_count\t17159\n', 'zk_watch_count\t0\n', 'zk_ephemerals_count\t1\n', 'zk_approximate_data_size\t6666471\n', 'zk_open_file_descriptor_count\t27\n', 'zk_max_file_descriptor_count\t102400\n']

2.cStringIO模块

cStringIO模块和StringIO模块功能类似。不过这个模块是用C语言编写的。

将以上的

from StringIO import StringIO

直接换成

from cStringIO import StringIO

参考文章:

https://docs.python.org/2.6/library/stringio.html

转载于:https://blog.51cto.com/john88wang/1745633

Python的StringIO模块和cStringIO模块相关推荐

  1. python中的io模块_Python的StringIO模块和cStringIO模块

    1.StringIO模块 StringIO用于像文件一样对字符串缓冲区或者叫做内存文件进行读写. f = StringIO()      # ready for writing f = StringI ...

  2. 学习Python:StringIO与cStringIO

    StringIO StringIO的行为与file对象非常像,但它不是磁盘上文件,而是一个内存里的"文件",我们可以将操作磁盘文件那样来操作StringIO.一个简单的例子,让你对 ...

  3. Python:StringIO与cStringIO

    StringIO StringIO的行为与file对象非常像,但它不是磁盘上文件,而是一个内存里的"文件",我们可以将操作磁盘文件那样来操作StringIO.一个简单的例子,让你对 ...

  4. Python并发编程——paramiko远程控制的模块、病毒攻击原理、dll注入、

    文章目录 paramiko模块 作业 攻击原理解析 一.什么是dll 二.为何要有dll 什么是dll注入: 什么时候需要dll注入 dll注入的方法 使用SetWindowsHookEx函数对应用程 ...

  5. python curl模块_python pycurl模块

    一.pycurl概述 PycURl是一个C语言写的libcurl的python绑定库.libcurl 是一个自由的,并且容易使用的用在客户端的 URL 传输库.它的功能很强大,在PyCURL的主页上介 ...

  6. Python多线程(3)——Queue模块

    Python多线程(3)--Queue模块 Queue模块支持先进先出(FIFO)队列,支持多线程的访问,包括一个主要的类型(Queue)和两个异常类(exception classes). Pyth ...

  7. python argparse模块_Python argparse模块应用实例解析

    这篇文章主要介绍了Python argparse模块应用实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 简介 argparse是python ...

  8. Python中常用的数据分析工具(模块)有哪些?

    本期Python培训分享:Python中常用的数据分析工具(模块)有哪些?Python本身的数据分析功能并不强,需要安装一些第三方的扩展库来增强它的能力.我们课程用到的库包括NumPy.Pandas. ...

  9. Python学习系列(六)(模块)

    Python学习系列(六)(模块) Python学习系列(五)(文件操作及其字典) 一,模块的基本介绍 1,import引入其他标准模块 标准库:Python标准安装包里的模块. 引入模块的几种方式: ...

最新文章

  1. LeetCode简单题之判断字符串的两半是否相似
  2. python编程可视化小程序_人人都可以写的可视化Python小程序第二篇:旋转的烟花...
  3. 微服务化后,这几点一定要注意
  4. android 壁纸 裁剪,Android图片裁剪之自由裁剪
  5. 30人NLP公司获4000万美元投资,杜兰特也入股了
  6. 计算机软件与程序没有任何关系,提示“该文件没有与之关联的程序来执行该操作”怎么解决?...
  7. nginx 缓存设置
  8. stack overflow at line
  9. leetcode 140. 单词拆分 II(记忆化)
  10. 带有书签的Android WebView
  11. Python学习笔记五
  12. [Java基础] 使用JMAP dump及分析dump文件
  13. 普通卷积、转置卷积、空洞卷积(dilated convolution、Atrous Convolution)
  14. [转帖][攻防测试工具]系统监控必备工具procexp和procmon
  15. JS实现文件的上传与下载
  16. 股票估值法研究报告_论述股票的估值方法
  17. mysql服务starting_MySQl服务无法启动(Starting MySQL.The server quit withou)
  18. python验证身份证最后一位数字代表什么_身份证最后一位不是数字而是X,代表什么含义?涨知识了...
  19. x86架构和arm架构的cpu简图
  20. 如何在ps中将图片素描化

热门文章

  1. React使用Styled-Componets来添加样式
  2. Sprint软银宣布计划2019年推出5G商用服务
  3. 一个想法照进现实-《IT连》创业项目:直觉型面试招聘的Bug
  4. apu和atom处理器两者的定位
  5. 07年了,新的一年又开始了
  6. BCH钱包的“现金”支持比特币现金NFC交易
  7. 深入探究Java中equals()和==的区别是什么
  8. 大尺寸3D打印机:不再是“围城”!工业级3D打印的瞬发时代已来!
  9. git(码云):如何把本地代码提交到码云代码管理项目上
  10. 如果修改postgresql的最大连接数