文件对象
处理文件的三个步骤:打开,读写,关机.
文件读取
[root@666 ~]# python3
Python 3.6.7 (default, Feb 20 2019, 15:08:07)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> f=open('/etc/passwd') #默认以r的方式打开
>>> data=f.read() #默认read读取全部数据
>>> data=f.read() #因为文件指针已经到文件结尾,在读数据是空
>>> data
''
>>> f.close() #关掉文件
#重新打开文件
>>> f=open('/etc/passwd')
>>> f.read(4) #读取4字节
'root'
>>> f.read(4)
':x:0'
>>> f.readline() #读取到遇到的第一个/n
':0:root:/root:/bin/bash\n' #把文件的第一行作为列表项,保存
>>> f.readlines()
>>> f.close()
最常用的,读取文件的方式是for循环遍历:
f=open('/etc/passwd')
for line in f:
print(line,end='')
f.close()
写入文件
>>> f=open('/zhuhaiyan','w') #文件不存在则创建,存在会清空
>>> f.write('hello world!\n') #返回写入到文件的字节数
13
>>> f.writelines(['2nd line.\n','3rd line.\n']) #此时文件还是空的,因为写到了缓存区,没有写入到硬盘,文件一段时间后或者关闭文件的时候会被写入到硬盘中,这样是为了节省效率
>>> f.flush() #将缓存的数据写入到磁盘中
>>> f.write('end\n')
4
>>> f.close() #关闭文件的时候,也同样的会写入磁盘数据
处理非文本文件,与文本文件大体相似,只不过在打开文件时,需要加上b
>>> f=open('/tmp/cat','rb') #以bytes类型打开
>>> f.read(10)
b'\x7fELF\x02\x01\x01\x00\x00\x00' #读取的是二进制文件打开
>>> f.close()
#文本文件也能以byte的方式打开
>>> f=open('/zhuhaiyan','rb')
>>> f.read()
b'hello world!\n2nd line.\n3rd line.\nend\n'
>>> f.close()
使用with语句打开文件,当with语句结束时,文件自动关闭
>>> with open('/zhuhaiyan') as f:
... f.readline()
... f.readline()
...
'hello world!\n'
'2nd line.\n'
>>> f.readline()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: I/O operation on closed file.
移动文件指针:seek(x,y) y可以取值0,1,2,分别表示文件开头,当前位置和结尾.x是偏移量.
>>> f=open('/zhuhaiyan')
>>> f.tell() #显示当前位置,永远从开头算偏移量
0
>>> f.seek(5,0)
5
>>> f.read(1)
' '
>>> f.close()
>>> f=open('/zhuhaiyan')
>>> f.read() #读取文件开头
'hello world!\n2nd line.\n3rd line.\nend\n'
>>> f.read() #在读则没有内容
''
>>> f.seek(0,0) #回到文件开头
0
>>> f.read() #在读文件
'hello world!\n2nd line.\n3rd line.\nend\n'
>>> f.close() #关闭文件
>>> f = open('/zhuhaiyan','rb')
>>> f.seek(-5,2) #指针移动到文件结尾前5个字节处
32
>>> f.read()
b'\nend\n'