StringIO

Python进阶5---StringIO和BytesIO、路径操作、OS模块、shutil模块 随笔 第1张

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

StringIO操作

Python进阶5---StringIO和BytesIO、路径操作、OS模块、shutil模块 随笔 第2张

Python进阶5---StringIO和BytesIO、路径操作、OS模块、shutil模块 随笔 第3张

BytesIO

Python进阶5---StringIO和BytesIO、路径操作、OS模块、shutil模块 随笔 第4张

BytesIO操作

Python进阶5---StringIO和BytesIO、路径操作、OS模块、shutil模块 随笔 第5张

 

file-like对象

Python进阶5---StringIO和BytesIO、路径操作、OS模块、shutil模块 随笔 第6张

 

 

路径操作

路径操作模块

3.4版本之前:os.path模块

Python进阶5---StringIO和BytesIO、路径操作、OS模块、shutil模块 随笔 第7张

3.4版本开始

建议使用pathlib模块,提供Path对象来操作。包括目录和文件

pathlib模块

from pathlib import Path

目录操作

初始化

Python进阶5---StringIO和BytesIO、路径操作、OS模块、shutil模块 随笔 第8张

 路径拼接和分解

Python进阶5---StringIO和BytesIO、路径操作、OS模块、shutil模块 随笔 第9张

#在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

Python进阶5---StringIO和BytesIO、路径操作、OS模块、shutil模块 随笔 第10张

p = Path('/etc')
print(str(p),bytes(p))

Python进阶5---StringIO和BytesIO、路径操作、OS模块、shutil模块 随笔 第11张

p = Path('/a/b/c/d')
print(p.parent.parent)
for x in p.parents:
    print(x)

Python进阶5---StringIO和BytesIO、路径操作、OS模块、shutil模块 随笔 第12张

#四个属性,两个方法
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

Python进阶5---StringIO和BytesIO、路径操作、OS模块、shutil模块 随笔 第13张

Python进阶5---StringIO和BytesIO、路径操作、OS模块、shutil模块 随笔 第14张

Python进阶5---StringIO和BytesIO、路径操作、OS模块、shutil模块 随笔 第15张

调用iterdir()方法后返回一个生成器对象 

Python进阶5---StringIO和BytesIO、路径操作、OS模块、shutil模块 随笔 第16张

 Python进阶5---StringIO和BytesIO、路径操作、OS模块、shutil模块 随笔 第17张

 Python进阶5---StringIO和BytesIO、路径操作、OS模块、shutil模块 随笔 第18张

通配符

 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

Python进阶5---StringIO和BytesIO、路径操作、OS模块、shutil模块 随笔 第19张

文件操作

 Python进阶5---StringIO和BytesIO、路径操作、OS模块、shutil模块 随笔 第20张

Python进阶5---StringIO和BytesIO、路径操作、OS模块、shutil模块 随笔 第21张

Python进阶5---StringIO和BytesIO、路径操作、OS模块、shutil模块 随笔 第22张

 

OS模块

Python进阶5---StringIO和BytesIO、路径操作、OS模块、shutil模块 随笔 第23张

Python进阶5---StringIO和BytesIO、路径操作、OS模块、shutil模块 随笔 第24张

fd表示文件描述符

Python进阶5---StringIO和BytesIO、路径操作、OS模块、shutil模块 随笔 第25张

Python进阶5---StringIO和BytesIO、路径操作、OS模块、shutil模块 随笔 第26张

 

shutil模块

到目前为止

文件拷贝:使用打开2个文件对象,源文件读取内容,写入目标文件中来完成拷贝过程。但是这样会丢失stat数据信息(权限等),因为根本就没有复制过去。

目录怎么办呢?

Python提供了一个方便的库shutil(高级文件操作)

Copy复制

Python进阶5---StringIO和BytesIO、路径操作、OS模块、shutil模块 随笔 第27张

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)

 Python进阶5---StringIO和BytesIO、路径操作、OS模块、shutil模块 随笔 第28张

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄