转自:http://www.nnzhp.cn/article/16/ python
这篇博客来讲一下python对文件的操做。linux
对文件的操做分三步:windows
一、打开文件获取文件的句柄,句柄就理解为这个文件性能
二、经过文件句柄操做文件学习
三、关闭文件。测试
现有如下文件file.txt: 编码
寂寞固然有一点
你不在我身边
老是特别想念你的脸
距离是一份考卷
测量相爱的誓言
最后会不会实现
咱们为爱还在学
学沟通的语言
学着谅解
学着不流泪
等到咱们学会飞
飞越黑夜和考验
日子就要从孤单里毕业
咱们用多一点点的辛苦
来交换多一点点的幸福
就算幸福
还有一段路
等咱们学会忍耐和付出
这爱情必定会有张证书
证实
今后不孤独
今后不孤独
文件基本操做:spa
f = open('file.txt','r') #以只读方式打开一个文件,获取文件句柄,若是是读的话,r能够不写,默认就是只读,
在python2中还有file方法能够打开文件,python3中file方法已经没有了,只有open
frist_line = f.readline()#获取文件的第一行内容,返回的是一个list
print(frist_line)#打印第一行
res = f.read()#获取除了第一行剩下的全部文件内容
print(res)
f.close()#关闭文件
打开文件时,须要指定文件路径和以何等方式打开文件,打开后,便可获取该文件句柄,后面经过此文件句柄对该文件操做,指针
打开文件的模式有:接口
r,只读模式(默认)。
w,只写模式。【不可读;不存在则建立;存在则删除内容;】
a,追加模式。【不可读; 不存在则建立;存在则只追加内容;】
"+" 表示能够同时读写某个文件
r+,【可读、可写;可追加,若是打开的文件不存在的话,会报错】
w+,【写读模式,使用w+的话,已经存在的文件内容会被清空,能够读到已经写的文件内容】
a+,【追加读写模式,不存在则建立;存在则只追加内容;】
"U"表示在读取时,能够将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用)
rU
r+U
"b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)
rb
wb
ab
文件操做方法:
f = open('file.txt','r+',encoding='utf-8')#encoding参数能够指定文件的编码
f.readline()#读一行
f.readable()#判断文件是否可读
fr.writable()#判断文件是否可写
fr.encoding#打印文件的编码
f.read()#读取全部内容,大文件时不要用,由于会把文件内容都读到内存中,内存不够的话,会把内存撑爆
f.readlines()#读取全部文件内容,返回一个list,元素是每行的数据,大文件时不要用,由于会把文件内容都读到内存中,内存不够的话,会把内存撑爆
f.tell()#获取当前文件的指针指向
f.seek(0)#把当前文件指针指向哪
f.write('爱情证书')#写入内容
f.fulsh()#写入文件后,当即从内存中把数据写到磁盘中
f.truncate()#清空文件内容
f.writelines(['爱情证书','孙燕姿'])#将一个列表写入文件中
f.close()关闭文件
大文件时,读取文件高效的操做方法:
用上面的read()和readlines()方法操做文件的话,会先把文件全部内容读到内存中,这样的话,内存数据一多,很是卡,高效的操做,就是读一行操做一行,读过的内容就从内存中释放了
f = open('file.txt')
for line in f:
print(line)
这样的话,line就是每行文件的内容,读完一行的话,就会释放一行的内存
with使用:
在操做文件的时候,常常忘了关闭文件,这样的就可使用with,它会在使用完这个文件句柄以后,自动关闭该文件,使用方式以下:
with open('file.txt','r') as f:#打开一个文件,把这个文件的句柄付给f
for line in f:
print(line)
with open('file.txt') as fr,with open('file_bak','w') as fw: #这个是多文件的操做,打开两个文件,fr是读file.txt,fw是新建一个file_bak文件
for line in fr:#循环file.txt中的每一行
fw.write(line)#写到file_bak文件中
修改文件:
修改文件的话,有两种方式,一种是把文件的所有内容都读到内存中,而后把原有的文件内容清空,从新写新的内容;第二种是把修改后的文件内容写到一个新的文件中
第一种
with open('file.txt','r+') as fr:
res = fr.read()
new_res = res.replace('我','me')
fr.write(new_res)
第二种
with open('file.txt') as fr,with open('file_new','w') as fw: #这个是多文件的操做,打开两个文件,fr是读file.txt,fw是新建一个file_bak文件
for line in fr:#循环file.txt中的每一行
new_line = line.replace('我','me')
fw.write(new_line)#写到file_bak文件中
集合:
集合也是一种数据类型,一个相似列表东西,它的特色是无序的,不重复的,也就是说集合中是没有重复的数据
集合的做用:
一、它能够把一个列表中重复的数据去掉,而不须要你再写判断
二、能够作关系测试,好比说有两个班,一个性能测试班,一个是接口测试班的,想找出来既学习了性能又学习了接口测试的同窗,就能够用集合
定义集合
list = [2,3,1,2,3,4] s_list = set(list)#这样就定义了一个集合 set1 = set([1,3,4,5,6])#这种方式和上面的都是把list转换成一个集合 set2={'hehe','hehe1','hehe3'}#这种方式是直接定义一个集合
集合操做
list1 = {1, 2, 3, 4, 5, 6, 9} list2 = {2, 3, 4, 6, 1} list3 = {1, 2, 3} print(list1.intersection(list2)) # 取交集,也就是取list1和list2中都有的 print(list1 & list2)# 取交集 print(list1.union(list2)) # 取并集,也就是把list1和list2合并了,而后去除重复的 print(list1 | list2)# 取并集 print(list1.difference(list2)) #取差集 在list中存在,在list2中没有的 print(list1 - list2) print(list3.issubset(list1))#判断list3是否是list1的子集 print(list1.issuperset(list3))#判断list1是否是list3的父集 print(list1.isdisjoint(list3))#判断list1和list3是否有交集 print(list1.symmetric_difference(list2))#对称差集,输出两个列表中都没有的值,也就是把两个集合中相同的去掉 print(list1 ^ list2) list1.add(888)#添加元素 list1.update([777,666,666]) list1.remove(777)#删除元素,若是元素不存在会报错 list1.pop()#删除一个随机的元素,并返回删除的元素 list1.discard('dddd')#若是删除的元素存在,删除,不存在不作处理