StringIO

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

p = p / 'a'

print(p) #a

p1 = 'b' /pprint(p1) #b\a

p2 = Path('c')

p3= p2 /p1print(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 inp.parents:print(x)

#四个属性,两个方法

p = Path('E:\learnshare\ArticleSpider\e.xex.txt')print(p.name) #e.xex.txtprint(p.stem)   #e.xexprint(p.suffix)  #.txtprint(p.suffixes) #['.xex','.txt']print(p.with_name('c.y'))#E:\learnshare\ArticleSpider\c.yprint(p.with_suffix('.xxyy'))#E:\learnshare\ArticleSpider\e.xex.xxyy

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

通配符

glob(pattern)通配给定的模式

rglob(pattern)通配给定的模式,递归目录

from pathlib importPathprint(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复制

importshutil

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 notbuf:breakfdst.write(buf)

#copytree源码,这里主要了解一下ignore函数的使用技巧,过滤掉不需要拷贝的!

def copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2,

names=os.listdir(src)if ignore is notNone:

ignored_names=ignore(src, names)else:

ignored_names=set()

os.makedirs(dst)

errors=[]for name innames:if name inignored_names:continuesrcname=os.path.join(src, name)

dstname=os.path.join(dst, name)

...return dst

deffn(src,file_names):

filter(lambda x:x.startwith('t'),file_names)#上面的语句等同于下面的语句

fn = lambda src,names:filter(lambda x:x.startwith('t').file_names)#filter(function, iterable)#注意: Pyhton2.7 返回列表,Python3.x 返回迭代器对象

#假设D:/temp下有a,b目录

defignore(src,names):

ig= filter(lambda x:x.startwith('a'),names) #忽略a

returnset(ig)

shutil.copytree('o:/temp','o:/tt/o',ignore=ignore)

rm删除

shutil.rmtree('D:/tmp') #类似rm -rf

move移动

#在同一盘符下,其实质上就是rename,跨盘符的话才是真正的移动

os.rename('D:/temp/x.txt','D:/t.txt')

os.rename('test3','/tmp/py/test')

csv文件

csv文件简介(文本格式,半结构化数据)

手动生成CSV文件

from pathlib importPath

p= Path('F:\\百度网盘下载资料\\Python全栈开发\\python进阶1\\19Python的文件IO(三)(6)\\test.csv')

parent=p.parentif notparent.exists():

parent.mkdir(parents=True)

csv_body= '''\

id,name,age,comment

1,zs,18,"I'm 18"

2,ls,20,"This is a testing"

3,ww,232,"中

国"'''p.write_text(csv_body)

csv模块

from pathlib importPathimportcsv

p= Path('F:\\test.csv')

with open(str(p)) as f:

reader=csv.reader(f)print(next(reader))

row= [4,'cty',22,'tom']

rows=[

(1,'2',3,'55'),

(11,'123',22,"\"123123")

]

with open(str(p),'a+') as f:

writer=csv.writer(f)

writer.writerow(row)

writer.writerows(rows)

ini文件

作为配置文件,ini文件格式很流行

中括号里面的部分称为section。

每一个section内,都是key=value形成的键值对,key称为option选项。

configparser

from configparser importConfigParser

cfg=ConfigParser()

cfg.read('mysql.ini')print(cfg.sections())print(cfg.has_section('deploy'))print(cfg.items('deploy'))for k,v in cfg.items('deploy'):print(k,type(v))

tmp= cfg.get('deploy','a')print(tmp,type(tmp))print(cfg.get('deploy','a',fallback='python'))print(cfg.getint('mysql','aa'))if cfg.has_section('mysql'):

cfg.remove_section('mysql')

cfg.add_section('cy')

cfg.set('cy','ly','5')

cfg.set('cy','ggz','2')#上面的删除和新增功能需要重新写入文件才会生效

with open('mysql.ini','w') as f:

cfg.write(f)print(cfg.getint('cy','ggz'))print(cfg.remove_option('cy','ly'))

with open('mysql.ini','w') as f:

cfg.write(f)

注意:配置文件一般加载后常驻于内存中,且读取操作远远多于写入操作。

python bytes查找位置_Python进阶5---StringIO和BytesIO、路径操作、OS模块、shutil模块相关推荐

  1. python bytes查找位置_Python内置函数——bytes

    英文文档: classbytes([source[, encoding[, errors]]]) Return a new "bytes" object, which is an ...

  2. python字符串查找位置_python中怎么返回指定查找字符的位置

    展开全部 Python编程中对字符串进行搜索查找,并返回字符位e69da5e887aa62616964757a686964616f31333337396231置,案例代码如下:# multiple s ...

  3. Python中os和shutil模块实用方法集锦

    Python中os和shutil模块实用方法集锦 类型:转载 时间:2014-05-13 这篇文章主要介绍了Python中os和shutil模块实用方法集锦,需要的朋友可以参考下 复制代码代码如下: ...

  4. python使用os和shutil模块进行文件创建,删除,移动,复制,重命名

    python使用os和shutil模块进行文件创建,删除,移动,复制,重命名 文章目录: 1 os模块的使用 1.1 os不带path 1.1.1 os.sep 属性:返回系统路径分隔符 1.1.2 ...

  5. Python内置函数os模块shutil模块

    一.内置函数 内置函数就是python里面自带的一些函数,不需要自己定义,直接就可以使用的函数. print(sum([1,2,3])) #求和的 print(min("123") ...

  6. python中常用的模块(cleandar模块,time模块,datetime模块,OS模块,shutil()模块,random模块)

    常用模块-cleandar模块,time模块,datetime模块,OS模块,shutil()模块,random模块 claendar 跟日历相关的模块 语法 import calendar 常用方法 ...

  7. python二分法查找程序_Python程序查找最大EVEN数

    python二分法查找程序 Input N integer numbers and we have to find the maximum even number. 输入N个整数,我们必须找到最大的偶 ...

  8. python二分法查找程序_Python程序查找地板划分

    python二分法查找程序 When we divide a number by another number – division operator (/) return quotient it m ...

  9. python定位文件位置_python使用相对定位,绝对定位,选取同级别文件下的指定文件(csv,excel)...

    最近使用python读取同级下的data数据文件,开始找了很多方法.下面我总结成二种方法: 1.xxx.py想要打开.data.csv,使用相对路径,有如下方法: 思路: xxx.py想要打开的是mp ...

最新文章

  1. python文件的后缀名-python文件后缀是什么
  2. CCF-CSP 201703-1 试题名称: 分蛋糕
  3. VUE的ajax拦截器
  4. 接口 类型转换 try-catch(学习笔记)
  5. SAP C4C里销售订单行项目为什么无法添加产品
  6. 学习笔记整理之模式化方法
  7. ASP.NET开发安全问题
  8. PHP笔记-所有错误统一输出404页面(详细错误日志输出,提高安全性)
  9. 信息学奥赛一本通 2047:【例5.16】过滤空格 | OpenJudge NOI 1.7 23:过滤多余的空格
  10. 【C语言】两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单,a说他不和x比,c说他不和x,z比,编写程序找出三对赛手名单。...
  11. Jetson TX2软件源更新
  12. quartz获取缓存中所有运行中的Job
  13. oracle存储过程备份,Oracle存储过程(二)
  14. 阿里云云计算高级工程师ACP认证(Alibaba Cloud Certified Professional - Cloud Computing)考试大纲
  15. 零基础入门数据挖掘之金融风控-贷款违约预测
  16. java公社博客_Java的运算符
  17. uC/OS-III-3.0-uC/OS-III简介
  18. 排序算法,最全的10大排序算法详解(Sort Algorithm)
  19. oracle+创建diskgroup,Exadata下新建DiskGroup
  20. 勒索病毒猖獗,医疗机构因此损失超920亿美元

热门文章

  1. gateway网关_SpringCloud技术指南系列(十二)API网关之Gateway使用
  2. rdkafka线程过多_Kafka/RocketMQ 多线程消费时如何保证消费顺序?
  3. 作者:程学旗(1972-),男,中国科学院计算技术研究所研究员、博士生导师、副所长,中国科学院网络数据科学与技术重点实验室主任。...
  4. 命名实体识别以及词性自动标注
  5. redux 简明学习
  6. 8086CPU的8位寄存器数据存储情况
  7. 尚学堂科技_马士兵_设计模式
  8. WinCE 6.0中断驱动程序分析
  9. 咨询14个CEO,花了20小时,建设顶级数据团队的干货,被疯狂点赞
  10. ccmlt 2013 V2.0012