您的位置:首页 > 编程语言 > Python开发

python基础(四)文件操作和集合

2016-12-19 17:24 453 查看
一.文件操作

对文件的操作分三步:

1、打开文件获取文件的句柄,句柄就理解为这个文件

2、通过文件句柄操作文件

3、关闭文件。

1.文件基本操作:

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()#关闭文件

2.文件打开模式:

r:只读,不加模式默认为r
w:只写,[不可读,不存在则创建,存在则删除内容]
a:追加,[不可读,不存在则创建,存在则只追加内容]

"+"表示可以同时读写某个文件
r+:读写--可读、可写、可追加,如果打开的文件不存在的话,会报错
w+:写读--先创建文件,再写(在原文件上的修改都是覆盖操作)
a+:追加读--默认打开句柄在末尾,读取需先seek(0)指定位置,一写句柄就到末尾了
#r和w,seek指定句柄可以覆盖修改,a+指定句柄也是追加

"U"表示在读取时,可以将\r\n\r\n自动转换成\n(与r或r+模式同使用)
rU
r+U
#windows上换行符为\r\n

"b"表示处理二进制文件
rb:二进制文件读
wb:二进制文件写
ab:追加二进制
#文件存在硬盘上都是二进制,前边说encoding='utf-8'是指把二进制转换成utf-8编码打开,
#而“b”是指,不用转换编码,我直接读取二进制

3.文件操作:

f=open("1.txt",'r',encoding="utf-8")
#encoding="utf-8",utf-8编码打开文件,windows下默认gbk打开
f.readline()#读一行,字符串
f.readable()#判断文件是否可读
f.writable()#判断文件是否可写
f.encoding()#打印文件的编码
f.read()#读取文件句柄到结束所有内容,大文件时不要用,因为会把文件内容都读到内存中
f.readlines()#读取文件所有内容,返回一个list,元素是每行的数据,大文件时不要用
f.write("天安门")#写入内容,r和w模式,为句柄处覆盖写入,a模式写到最后
f.writelines(['zhangsan'],['李四'])#将一个列表写入文件中
f.flush()#强制刷新(默认缓冲区满了存入磁盘)
f.close()#文件关闭
f.closed()#判断文件是否关闭

f.read(5)#读取5个字符
f.tell()#查看文件句柄位置。按照字符计数
f.seek(0)#移动文件句柄到第0个字符位置

f.encoding#文件编码
f.truncate()#什么不写清空文件
f.truncate(10)#r模式截断出前10个字符,其他模式还是清空

大文件时,读取文件高效的操作方法:
用上面的read()和readlines()方法操作文件的话,会先把文件所有内容读到内存中,这样的话,内存数据一多,非常卡,高效的操作,就是读一行操作一行,读过的内容就从内存中释放了
f=open('file.txt')
forlineinf:#f变成了迭代器
  print(line)#判断行的话,需自己加个计数器

4.文件内容修改
前面说的文件修改,只是对原内容覆盖,并不会插入内容,原内容往后移,因为这样有可能就把其他文件覆盖了,文件发生损坏。so:
文件修改两个办法:
  1.加载到内存,内存修改,覆盖写回
  2.另打开一个文件,修改完写到新文件中

withopen("test",'r+',encoding='utf-8')asfr
res=fr.read()
  new_res=res.replace('我','me')
  fr.write(new_res)

withopen("test",'r',encoding='utf-8')asf,\
open("test.tmp",'w',encoding='utf-8')asf_new:
forlineinf:
if"聚焦头条"inline:
line=line.replace("聚焦头条","fgf")
f_new.write(line)

#os.path.exists("test.bak")判断文件是否存在
#os.remove("test.bak")删除文件
#os.rename(test.tmp,test)重命名

5.文件关闭(with语句)
为了避免打开文件后忘记关闭,可以通过管理上下文,即:

withopen('log')asf:
pass

如此方式,当with代码块执行完毕时,内部会自动关闭并释放文件资源。
Python2.7后,with又支持同时对多个文件的上下文进行管理

二.集合

集合也是一种数据类型,一个类似列表的东西,特点是一个无序的,不重复的数据组合,它的主要作用如下:

去重,把一个列表变成集合,就自动去重了

关系测试,测试两组数据之前的交集、差集、并集等关系

1、常用操作

去重
list_1=[1,1,2,3,4,5,6,6,7,7,8,8,9,9,3]
set_1=set(list_1)
>>>set_1
{1,2,3,4,5,6,7,8,9}
#集合用{}表示
交集
set_2={0,2,3,4}
set_1.intersection(set_2)
  set_1&set_2
并集:
set_1.union(set_2)
  set_1|set_2
差集:
set_1.difference(set_2)
  set_1-set_2
#inset_1butnotinset_2
子集:
set_1.issubset(set_2)#判断set_1是不是set_2的子集
父集:
set_1.issuperset(set_2)#判断
set_1是不是set_2的父集

对称差集:(并集去除交集,即并集和交集的差集)输出2个列表都没有的值
  set_1.symmetric_difference(set_2)即(set_1|set_2)-(set_1&set_2)
set_1^set_2
判断有没有交集,无交集,返回True
  set_1.isdisjoint(set_2)

2、符号操作

&:交集intersection
|:并集union
-:差集difference
s<=t:子集issubset
s>=t:父集issuperset
^:对称差集symmetric_difference

3、集合增删改查

添加:
set_1.add(99)
批量添加
set_1.update([1,2,3,4])
删除:
set_1.remove('h')#没有则报错
set_1.discard(99)#在则删除,不在就不操作。无返回信息
随机删:
set_1.pop()
长度:
len(set_1)
是否属于判断
sinset_1#(判断成员在不在都是这么写,字典中判断key)
返回set“s”的一个浅复制
s.copy()



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: