Python进阶5---StringIO和BytesIO、路径操作、OS模块、shutil模块
StringIO
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。StringIO操作
BytesIO
BytesIO操作
file-like对象
路径操作
路径操作模块
3.4版本之前:os.path模块
3.4版本开始
建议使用pathlib模块,提供Path对象来操作。包括目录和文件
pathlib模块
from pathlib import Path
目录操作
初始化
路径拼接和分解
#在windows下的Pycharm中运行 p = Path() print(type(p)) #<class 'pathlib.WindowsPath'> p = p / 'a' print(p) #a p1 = 'b' / p print(p1) #b\a p2 = Path('c') p3 = p2 / p1 print(p3) #c\b\a print(p3.parts) #('c', 'b', 'a') print(p3.joinpath('etc','init.d',Path('httpd'))) #c\b\a\etc\init.d\httpd
p = Path('/etc') print(str(p),bytes(p))
p = Path('/a/b/c/d') print(p.parent.parent) for x in p.parents: print(x)
#四个属性,两个方法 p = Path('E:\learnshare\ArticleSpider\e.xex.txt') print(p.name) #e.xex.txt print(p.stem) #e.xex print(p.suffix) #.txt print(p.suffixes) #['.xex','.txt'] print(p.with_name('c.y'))#E:\learnshare\ArticleSpider print(p.with_suffix('.xxyy'))#E:\learnshare\ArticleSpider\e.xex.xxyy
调用iterdir()方法后返回一个生成器对象
通配符
glob(pattern)通配给定的模式
rglob(pattern)通配给定的模式,递归目录
from pathlib import Path print(1,list(Path().glob('test*')))#返回当前目录对象下的test开头的文件 print(2,list(Path().glob('*/test*')))#返回当前目录的下一级目录以test开头的文件 print(3,list(Path().glob('**/test*')))#递归当前目录以及其下所有目录,返回以test开头的文件 print(4,list(Path().rglob('test*')))#同上一样
匹配
match(pattern)
模式匹配,成功返回True
文件操作
OS模块
fd表示文件描述符
shutil模块
到目前为止
文件拷贝:使用打开2个文件对象,源文件读取内容,写入目标文件中来完成拷贝过程。但是这样会丢失stat数据信息(权限等),因为根本就没有复制过去。
目录怎么办呢?
Python提供了一个方便的库shutil(高级文件操作)
Copy复制
import shutil with open('test1.txt','r+') as f1: f1.write('abcd\n1234') f1.flush() with open('test2.txt','w+')as f2: shutil.copyfileobj(f1,f2) #注意:由于指针的缘故,可参见源码如下。上述代码中abcd\n1234内容确实会写入到test1.txt,但是并没有复制到test2.txt中。
#copyfileobj源码 def copyfileobj(fsrc, fdst, length=16*1024): """copy data from file-like object fsrc to file-like object fdst""" while 1: buf = fsrc.read(length) if not buf: break fdst.write(buf)

更多精彩