文件的读写

python操作文件——打开或新建文件——读、写文件——关闭资源

open()创建文件对象,程序里操作的对象映射的是磁盘上的真实文件,通过IO流将磁盘文件中的内容与程序中的对象中的内容进行同步

file=open(filename[,mode,encoding])

file:被创建的文件对象

filename要创建或者打开的文件名称

mode:模式是读还是写,打开模式默认为只读

encoding:默认文本文件中字符的编写格式为GBK

常用的文件类型打开方式

文件类型:

文本文件:存储的是普通"字符"文本,默认为unicode字符集,可以用记事本程序打开

二进制文件:把数据内容用“字节”进行存储,无法用记事本打开,必须使用专门的软件打开,比如MP3音频,jpg图片,doc文档等

打开模式
r以只读模式打开文件,文件的指针会放在文件开头
w以只写模式打开文件,若文件不存在则创建,文件存在则覆盖原有内容,文件指针在文件开头
a以追加模式打开文件,若文件不存在则创建,文件指针在文件开头,文件存在则在末尾追加内容,文件指针在原文件末尾
b以二进制方式打开文件,不能单独使用,需要与其他模式一起使用,rb或wb
+以读写方式打开文件,不能单独使用,需要与其他模式一起使用,a+

文件对象的常用方法

方法名说明
read([size])从文件中读取size个字节或字符的内容返回,若省略[size],则读取到文件末尾,即一次读取文件所有内容
readline()从文件中读取一行内容
readlines()把文件中每一行都作为独立的字符串对象,并将这些对象放入列表返回
write(str)‘将字符串str内容写入文件
writelines(s_list)将字符串列表s_list写入文件,不添加换行符
seek(offset[whence])

把文件指针移动到新的位置,offset表示相对于whence的位置,offset:为正往结束方向移动,为负往开始方向移动

whence 不同的值代表不同含义

0:从文件头开始计算

1:从当前位置开始计算

2:从文件尾开始计算

tell()返回文件指针的当前位置
flush()把缓冲区的内容写入文件,但不关闭文件
close()把缓冲区的内容写入文件,同时关闭文件,释放文件对象相关资源

seek()方法

file=open('c.txt','r')
file.seek(2)
print(file.read())

"""原文件为:let's try
执行结果为:t's try"""

file=open('a.txt','r',encoding='utf-8')
file.seek(6)
print(file.read())
file.close()
"""原文件为:覆盖文件追加文件
执行结果为:文件追加文件
UTF-8中一个汉字占3个字符,所以seek(6)是将指针挪到第二个汉字之后"""

修改whence会发现程序出现报错

file=open('c.txt','r')
file.seek(2,1)
print(file.read())
file.close()
"""文件报错
在文本文件中,没有使用b模式选项打开的文件,
只允许从文件头开始计算相对位置,从文件尾计算时就会引发异常,所以需要将'r'改为'rb'"""

file=open('c.txt','rb')
file.seek(2,0)
file.seek(2,1) """从上一次偏移的位置再挪两个位置"""
print(file.read())
file.close()
"""最终结果为:s try,相当于挪了四个字节"""

file=open('c.txt','rb')
file.seek(2,0)
file.seek(2,0) """这里默认还是从开头挪动指针,所以最终只挪了两个字节"""
print(file.read())
file.close()
"""最终结果为:t's try"""

with语句

【Python】with及上下文管理器的原理和应用_高岩_deal的博客-CSDN博客_上下文管理器

这篇文章中有相应解释 

使用with语句进行图片复制操作如下

"""with语句以只读方式打开a.png并调用给orgin_file,
创建一个copya.png文件,调用给target_file,
然后将orgin_file中的内容给target_file"""

with open('a.png','rb') as orgin_file:
    with open('copya.png','wb') as target_file:
        target_file.write(orgin_file.read())

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值