第3章自动化系列三之Python文件基础

Python自动化
时间:2016.08.09

笔者QQ:572891887、552408925
Linux架构交流群:471443208、524721466

1.1set集合

1.去重,把一个列表变成集合,就自动去重了
2.关系测试,测试两组数据之间的交集,差集,并集等关系。

创建一个数值集合

  1. list_1 = set([1,4,5,7,3,6,7,9])
  2. list_2 = set([2,6,0,66,22,8,4])
  1. print(list_1.intersection(list_2))
  1. print(list_1.union(list_2))
  1. print(list_1.difference(list_2))
  2. print(list_2.difference(list_1))
  1. print(list_1.issubset(list_2))
  1. list_3 = set([1,3,7])
  2. print(list_3.issubset(list_1)) #list_3是list_1的子集
  3. print(list_1.issuperset(list_3))
  1. print(list_1.symmetric_difference(list_2)) #对称差集,互相没有的取出来,去掉两个两个集合中重复的
  1. list_1.add(999) #添加一项
  2. list_1.update([888,777,555]) #添加多项
  3. print(list_1)
  1. print (list_1.discard(555)) #discard不存在不会报错
  2. print(list_1.remove(888)) #remove不存在,会报错,删掉了也不会返回数据
  3. print(list_1)

1.2文件操作

  1. 文件句柄 = file ('文件路径', '模式')
  2. 注:Python中打开文件有两种方式,open(...)和file(...) 本质上前者在内部会调用后者来进行文件操作,推荐使用open
  1. 打开文件模式有:
  2. f = open('db','r') # 只读模式,{默认}
  3. f = open('db','w') # 只写模式,{不可读;不存在则创建;存在则删除内容;}
  4. f = open('db','a') # 追加模式,{可读;不存在则创建;存在则只追加内容;}
  5. f = open('db','x') # 文件存在,则报错;不存在,则创建并写内容
  6. "+"表示可以同时读写某个文件:
  7. f = open('db','r+') # 可读写文件,{可读;可写;可追加}
  8. f = open('db','w+') # 写读。
  9. f = open('db','a+') # 同a。
  10. "U"表示在读取时,可以将\r\n自动转换成\n (与rr+模式同使用)
  11. f = open('db','rU')
  12. f = open('db','r+U')
  13. "b"表示处理二进制文件(如ftp上传ISO镜像,Linux忽略,windows处理二进制文件时需标注)
  14. f = open('db','rb') # 二进制只读
  15. f = open('db','wb') # 二进制只写
  16. f = open('db','ab') # 二进制追加
  17. f = open('db','r')
  18. data = f.read()
  19. print(data,type(data))
  20. f.close()
  1. f = open('db','r+',encoding="utf-8")
  2. data = f.read(1) # 如果打开模式无b,则read,按照字符读取
  3. print(f.tell()) # tell当前指针所在的位置(字节)
  4. f.seek(f.tell()) # 调整当前指着你的位置(字节)
  5. f.write("777") # 当前指针位置开始覆盖
  6. print(data) # 打印输出
  7. f.close() # 关闭当前文件
  8. 通过源码查看功能
  9. read() # 无参数,读全部;有参数,b字节,无b按字符
  10. tell() # 获取当前指针位置(字节)
  11. seek() # 指针跳转到指定位置(字节)
  12. write() # 写数据,b:字节,无b:字符
  13. close() # 关闭文件
  14. fileno() # 文件描述符
  15. flush() # 刷新文件内部缓冲区
  16. readline() # 仅读取一行
  17. truncate() # 截取,指针位置后的清空
  1. f = open(“”)
  2. for line in f:
  3. print(line)
  1. # db文件里面有"xuliangwei"字符串
  2. f = open("db","r",encoding="utf-8")
  3. f_new = open("db.bak","w",encoding="utf-8")
  4. for line in f:
  5. if "xuliangwei" in line:
  6. line = line.replace("xuliangwei","xuliangwei.com")
  7. f_new.write(line)
  8. f.close()
  9. f_new.close()
  1. f.close() #直接close文件
  2. 避免打开文件后忘记关闭,统一通过管理上下文,即:
  3. with open('db1','r') as f1, open("db2",'w' )as f2:
  4. pass

1.3Python字符编码转换

asiica 不支持中文
utf-8 一个汉子:三个字节
gbk 一个汉子:二个字节

Python3中默认字符编码是unicode

  1. #!/usr/bin/env python
  2. #-*- coding:utf-8 -*-
  3. # Author:xuliangwei
  4. xu = '徐亮偉'
  5. print(xu.encode('UTF-8')) # 转为UTF-8编码
  6. print(xu.encode('GBK')) # 转为GBK编码
  7. print(xu.encode('ASCII')) # 转为ASCII编码(ASCII码表中没有‘徐亮偉’这个字符集,会报错?)

Python2.X中默认字符编码是ASCII
在文件中指定编码为UTF-8,但是UTF-8如果你想转GBK的话是不能直接转,需要Ubicode做一个转换点,如下图:

Python编码