Python自动化运维开发----基础(十一)文件操作
1.文件的路径
(1) 相对路径:文件所在路径
(2) 绝对路径:从根路径起的目录
2.文件的类型
(1)文本文件 : 可以直接编写的文件
(2)二进制文件: 安装包 ,图片
3.mode相关
(1)关于文件操作的mode
mode 打开文件的方式
r 读
w 写
x 创建并写
a 追加
r+ 读写
w+ 写读
x+ 创建并写读
a+ 追加读
(2)关于文件的mode
mode 文本类型
t 文本(默认)
b 二进制
4.文件打开、读取、关闭的过程
文件打开
open('path', 'mode')
>>>handler=open('tpl.xml','rt')
文件读取
>>>handler.read()'<mysql>\n<host>{HOST}</host>\n<port>{PORT}</port>\n<user>{USER}</user>\n</mysql>\n'
文件关闭
>>>handler.close()
5.读文件
handler.read()读取所有的内容
handler.read(size)读取文件size个字节内容
handler.readline()读取文件一行
handler.readlines()读取文件所有行
判断文件是否读完的依据是判断最后一行是否为空
文件的可遍历性
>>>handler=open('tpl.xml','rt')>>>forlinesinhandler:...print(lines)...<mysql><host>{HOST}</host><port>{PORT}</port><user>{USER}</user></mysql>>>>handler.close()
对于二进制文件的读方式 只有 read 和 read(size)
read方式读取
>>>handler=open('1.py','rb')>>>handler.read()b'#!/usr/bin/python\n\na=1\nb=2\nc=[1,2]\n\ndeftest():\na=4\nb=5\nc=[]\nc.append(1)\nprint(a,b,c)\n\ntest()\nprint(a,b,c)\n'>>>handler.close()
read(size)
>>>handler=open('1.py','rb')>>>SIZE=10>>>whileTrue:...b_read=handler.read(SIZE)...ifb_read==b'':...break...print(b_read)...b'#!/usr/bin'b'/python\n\na'b'=1\nb=2'b'\nc=[1,2]'b'\n\ndeftest'b'():\na'b'=4\nb'b'=5\nc'b'=[]\n'b'c.append(1'b')\nprin'b't(a,b,c)\n\n'b'test()\npri'b'nt(a,b,c)\n'
6.字符串和二进制字符串的转换
字符串转换成二进制字符串
>>>"abc".encode()b'abc'
二进制字符串转换成字符串
>>>b'abc'.decode()'abc'
7.写文件
写文件 (文件不存在的时候创建)
>>>handler=open('2.txt','wt')>>>handler.write('123')3>>>handler.close()
当文件存在的时候就会清空原来的文件,覆盖之前的文件
>>>handler=open('2.txt','wt')>>>handler.write('111')3>>>handler.flush()>>>handler.close()
8.小练习
把一个字典列表中的value 拿出来写入到一个文件里
#!/usr/bin/pythonstudents=[{'id':1,'name':'likuan','sex':'m','age':25},{'id':2,'name':'lizhi','sex':'m','age':22},]path='student.txt'handler=open(path,'wt')forstudentinstudents:print(student)print('{0},{1},{2},{3}'.format(student['id'],student['name'],student['sex'],student['age']))handler.write('{0},{1},{2},{3}'.format(student['id'],student['name'],student['sex'],student['age']))handler.write('\n')handler.close()
从写入的文件在在转换成一个字典列表
#!/usr/bin/pythonpath='student.txt'students=[]handler=open(path,'rt')forlineinhandler:line=line.strip()id,name,sex,age=line.split(',')students.append({'id':id,'name':name,'sex':sex,'age':age})handler.close()print(students)
9.一些区别
x 和 w 的区别 w在文件存在会清空 文件的内容 x 不会清空文件的内容
>>>handler=open('2.txt','xt')Traceback(mostrecentcalllast):File"<stdin>",line1,in<module>FileExistsError:[Errno17]Fileexists:'2.txt'
a 是相当于追加
>>>handler=open('2.txt','at')>>>handler.write('test')4>>>handler.close()
文件指针tell()查看文件指针的位置,seek()重置文件指针的位置
>>>handler=open('2.txt','rt')>>>handler.read()'111test'>>>handler.tell()7>>>handler.read()''>>>handler.seek(0,0)0>>>handler.read()'111test'
小总结 关于文件mode
r+文件必须存在
w+文件如果存在清空
x+文件必须不存在
a+只往文件的末尾写
10.小练习2定义一个模板文件
例如模板文件中的配置
<mysql>
<host>{HOST}</host>
<port>{PORT}</port>
<user>{USER}</user>
</mysql>
通过format传值
#!/usr/bin/pythontpl_file='tpl.xml'conf_file='mysql.xml'tpl=open(tpl_file).read()open(conf_file,'wt').write(tpl.format(HOST='127.0.0.1',PORT='80',USER='kk'))
结果如下:
[root@Devop-python19-1-20]#catmysql.xml<mysql><host>127.0.0.1</host><port>80</port><user>kk</user></mysql>
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。