StringIO,BytesIO
list1 = []
for i in range(2000):
list1.append(open('test')) #打开2000个文件对象
!lsof |grep python |wc -l
!ulimit -n #上限是1024
!ps aux|grep python #找到Python的pid号
!lsof -p 7373 |grep "/web/test/"|wc -l #统计打开文件个数
for i in list1:
i.close() #测试完关闭
!ulimit -a #查看上限
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 14960
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024 *****这个是文件打开上限*****
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 4096
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
StringIO
用于文本I / O的内存中流。当调用close()方法时,文本缓冲区将被丢弃。
可以通过提供initial_value来设置缓冲区的初始值。如果启用了换行符,则换行符将按照write()进行编码。流位于缓冲区的开始。
换行符参数,默认设置仅将\n字符视为行的末尾,并且不进行换行。如果换行符设置为None,则在所有平台上将换行符写为\n,但是读取时仍会执行通用换行符解码。
getvalue()
无视指针,输出全部内容
用法示例:
from io import StringIO
output = StringIO()
output.write('First line.\n')
print('Second line.', file=output)
contents = output.getvalue()
print(contents)
output.close()
打印结果:
First line.
Second line.
好处:磁盘操作比内存操作慢.内存足够情况下,优化思路是少落地,减少磁盘IO过程,提供程序运行效率
BytesIO
使用内存中字节缓冲区的流实现。它继承BufferedIOBase。当调用close()方法时,缓冲区将被丢弃。
getbuffer()
对缓冲区的内容返回可读写的视图,而不复制它们。另外,改变视图将透明地更新缓冲区的内容:
b = BytesIO(b"abcdef")
view = b.getbuffer()
view[2:4] = b"56"
b.getvalue()
print(b.getvalue())
打印结果:
b'ab56ef'
file-like对象
类文件对象,可以像文件对象一样操作
socket对象,输入输出对象(stdin,stdout)都是类文件对象
from sys import stderr,stdout
f = stdout
print(type(f))
print(f.write('666'))