Python第六例

文件对象

处理文件的三个步骤:打开,读写,关机.

文件读取

[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'
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值