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>