StringIO

StringIO
io模块中的类
From io import StringIO
内存中,开辟的一个文本模式的buffer,可以像文件对象一样操作它
当close方法被调用的时候,这个buffer会被释放
StringIO操作
getvalue() 获取全部内容。跟文件指针没有关系
from io import StringIO
# 内存中构建
sio = StringIO() # 像文件对象一样操作
print(sio.readable(), sio.writable(), sio.seekable())
sio.write(“magedu\nPython”)
sio.seek(0)
print(sio.readline())
print(sio.getvalue()) # 无视指针,输出全部内容
sio.close()
好处
一般来说,磁盘的操作比内存的操作要慢得多,内存足够的情况下,一般的优化思路是少落地,减少 磁盘IO的过程,可以大大提高程序的运行效率
io模块中的类
from io import BytesIO
内存中,开辟的一个二进制模式的buffer,可以像文件对象一样操作它
当close方法被调用的时候,这个buffer会被释放
from io import BytesIO
bio = BytesIO()
print(bio.readable(),bio.writable(),bio.seekable())
bio.write(b”magedu\nPython”)
bio.seek(0)
print(bio.readline())
print(bio.getvalue())
bio.close()
类文件对象,可以像文件一样操作
socket对象、输入输出对象(stdin、stdout)都是类文件对象
from sys import stdout
f = stdout
print(type(f))
f.write(‘magedu.com’)
路径操作

from os import path

p = path.join(‘/etc’,’sysconfig’,’network’)
print(type(p),p)
print(path.exists(p))
print(path.split(p))
print(path.abspath(‘.’))
p = path.join(‘o:/’,p,’test.txt’)
print(path.dirname(p))
print(path.basename(p))
print(path.splitdrive(p))

p1 = path.abspath(__file__)
print(p1,path.basename(p1))
with p1 != path.dirname(p1):
p1 = path.dirname(p1)
建议使用pathlib模块,提供path
from pathlib import Path
目录操作
初始化p = Path()#当前目录
p = Path(‘a’,’b’,’c/d’) #当前目录下的a/b/c/d
p = Path(‘/etc’) #根下的etc目录
路径拼接和分解
操作符
Path对象/path对象
Path对象/字符串或则字符串 / path对象
分解
Parts属性 , 可以返回路径中的每一个部分
Joinpath(*other)连接多个字符串到path对象中
p = Path
p = p / ‘a’
p1 = ‘b ‘ /a
p2 = Path(‘c’)
p3 = p2 / p1
print(p3.parts)
p3.joinpath(‘etc’,’init.d’.path(‘httpd’))
获取路径,str获取路径字符串,bytes获取路径字符串的bytes
p = Path(‘/etc’)
print(p.parent.parent)
for x in p.parents:
print(x)
Name,stem,suffix,suffixes,with_suffix(suffix),with_name(name)
name目录的最后一个部分
Suffix 目录中的最后一个部分的扩展名
Stem 目录最后一个部分,没有后缀
Suffixes 返回多个扩展名列表
With_suffix(suffix)补充扩展名到路径尾部,返回新的路径,扩展名存在则无效
With_name(name)替换目录最后一个部分并返回一个新的路径
p = Path(‘/magedu/mysqllinstall/mysql.tar.gz’)
print(p.name)
print(p.suffix)
print(p.suffixes)
print(p.stem)
print(p.with_name(‘mysql-5.tgz’))
p = Path(‘README’)
print(p.with_suffix(‘.txt’))

Cwd()返回当前工作目录
Home()返回当前家目录

Is_dir()返回是否是目录,目录存在返回True
Is_()是否是普通文件,文件存在返回True
Is_symlink()是否是软连接
Is_socket()是否为socket文件
Is_block_device()是否是块设备文件
Is_char_device()是否是字符设备
Is_absolute()是否是绝对路径

Resolve()也可以返回一个新的路径。但是推荐使用resolve
Exists()目录或者文件是否存在
Rmdir()删除空目录,没有提供判断目录为空的方法
Touch(mode=0o666,exist_ok=Ture)创建一个文件
As_uri()将路径返回成URI,例如file:///etc/passwd
Mkdir(mode=0o777,parents=False,exist_ok=False)
Parents,是否创建父目录,True等同于mkdir -p ;False时,父目录不存在,则抛出FileNoteFoundError
Exist_ok参数,在3.5版本中加入,False是路径存在,抛出FileExistsError;True时,FileExistsError被忽略
Iterdir
for x in p.parents[len(p.parents)-1].iterdir():
print(x,end=’\t’)
if x.is_dir():
flag = False
for _ in x.iterdir():
flag = True
break
print(‘dir’,’Not Empty’ if flag else ‘Empyt’,sep=’\t’)
elif x.is_file():
print(‘file’)
else:
print(‘other file’)

通配符
Glob(pattern)通配给定的模式
Rglob(patttern)通配给定的模式,递归目录
返回一个生成器
List(p.glob(‘test*’)) #返回当前目录对象下的test开头的文件
List(p.glob(‘**/*.py)) #递归所有目录。等同于rglob
g= p.rglob(‘*.py’) #生成器
Next(g)
匹配
Match(pattern)
模式匹配,成功返回True
Path(‘a/b.py’).match(‘*.py’)
Path(‘/a/b/c.py’).match(‘b/*.py’)
Path(‘/a/b/c.py’).match(‘a/*.py’)
Path(‘/a/b/c.py’).match(‘a/*/*.py’)
Path(‘/a/b/c.py’).match(‘a/**/*.py’)
Stat()相当于stat命令
Lstat()同stat(),但如果符号链接,则显示符号链接本身的文件信息
Open(mode=’r’,buffering=-1,encoding=None,error=None,newline=None)
使用方法类似内建函数open,返回一个文件对象
3.5增加的新函数read_bytes()
以’rb’方式读取路径对应文件 返回二进制流。看源码
Read_text(encoding=None,errors=None)
以’rt’方式读取路径对应文件,返回文本
Path.write_bytes(data)
以’wb’方式写入数据到路径对应文件
Write_text(data,encoding=None,errors=None)
以’wt’方式写入字符串到路径对应文件
from pathlib import Path
p = Path(‘my_binary_file’)
p.write_bytes(b’Binary file contents’)
p.read_bytes()

p = Path(‘my_text_file’)
p.write_text(‘text file contents’)
p.read_text()

from pathlib import Path
p = Path(‘o:/test.py’)
p.write_text(“HELLO PYTHON”)
print(p.read_text())
with p.open() as f:
print(f.read(5))
os模块
操作系统平台
os.name Windows是nt,linux是posix
os.uname() *nix支持
sys.platform Windows显示win32,linux显示linux
os.listdir(‘0:/temp’)
返回目录列表
os也有open,read,write等方法,但是太低级,建议使用内建函数
$ln -s test t1建立一个软连接
os.stat(path,*,dir_fd=None,follow_symlinks=True)
本质上调用的linux上的stat
Path:路径的string或者bytes,或者fd文件的描述符
follow_symlinks True返回文件本身信息,Flase且如果是软连接则显示软连接的本身
os.chmod(path,mode,*,dir_fd=None,follow_symlinks=True)
os.chmod(‘test’,0o777)
os.chown(path,uid,git)改变文件的属主,属组,但是需要足够的权限
Shutil模块
到目前为止
文件拷贝:使用打开2个文件对象,源文件兑取内容,写入目标文件中来完成拷贝过程,但是这样丢失stat数据信息,权限等,因为根本没有复制这些信息过去。
Python提供了一个很方便的库shutil(文件的高级操作)
Copy复制
Copyfileobj(fsrc,fdst[lenth])
文件的对象的复制,fsrc和fdst是open打开的文件对象,复制内容。Fdst要求可写。
Lenth 指定了表示buffer的大小:
import shutil
with open(‘o:/test’,’r+’) as f1:
f1.write(‘abcd\n1234’)
f1.flush()
with open(‘o:/test1′,’w+’) as f2:
shutil.copyfileobj(f1,f2)

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/97674

联系我们

400-080-6560

在线咨询

工作时间:周一至周五,9:30-18:30,节假日同时也值班

QR code