Python从零开始学 Day07~文件处理(初步)
本文是上一篇文章的后续,详情点击该链接~
创建文件对象open()
我们在上一集异常处理的时候,就使用过这种操作
打开的方式有以下几种:
模式 | 描述 |
r | 读read模式 |
w | 写write模式。如果文件不存在则创建;如果文件存在,则重写新内容; |
a | 追加append模式。如果文件不存在则创建;如果文件存在,则在文件末尾追加内容 |
b | 二进制binary模式(可与其他模式组合使用) |
+ | 读、写模式(可与其他模式组合使用) |
先来个简单的操作(本文就一直用桌面目录好了):
f = open(r"C:\Users\36961\Desktop\alvin.txt","a")
word = "hello world Python"
f.write(word)#写入
f.close()#关闭
在操作文本文件时,经常会操作中文,这时候就经常会碰到乱码问题。先来看看各种编码之间的关系。
关于哪些理论呢,这里就不啰嗦了,百度也是一大堆。我就直接撸代码了~
writelines()写入字符串列表
f = open(r"C:\Users\36961\Desktop\alvin.txt","a")
word = ['你好\n','我\n','想\n','和你们\n','做朋友']
f.writelines(word)#写入
f.close()#关闭
close()关闭文件流
由于文件底层是由操作系统控制,所以我们打开的文件对象必须显式调用close()方法关闭文件对象。当调用close()方法时,首先会把缓冲区数据写入文件(也可以直接调用flush()方法),再关闭文件,释放文件对象。
为了确保打开的文件对象正常关闭,一般结合异常机制的 finally或者with 关键字实现无论何种情况都能关闭打开的文件对象。
所以说,这才是我们最常用的~
try:
f = open(r"C:\Users\36961\Desktop\alvin.txt", "a")
word = ['你好\n', '我\n', '想\n', '和你们\n', '做朋友']
f.writelines(word) # 写入
except BaseException as e:
print(e)
finally:
f.close()#关闭
with语句(上下文管理器)
with关键字(上下文管理器)可以自动管理上下文资源,不论什么原因跳出with 块,都能确保文件正确的关闭,并且可以在代码块执行完毕后自动还原进入该代码块时的现场。
word = ['你好\n', '我\n', '想\n', '和你们\n', '做朋友']
with open(r"C:\Users\36961\Desktop\alvin.txt", "a") as f:
f.writelines(word) # 写入
文本文件的读取
read([size])
从文件中读取 size 个字符,并作为结果返回。如果没有 size 参数,则读取整个文件。读取到文件末尾,会返回空字符串。
readline()
读取一行内容作为结果返回。读取到文件末尾,会返回空字符串。
readlines()
文本文件中,每一行作为一个字符串存入列表中,返回该列表
话不多说,撸代码~
把文件里面的字读进来,也可以在read里面选择需要都进来的字符数
with open(r"C:\Users\36961\Desktop\alvin.txt","r",encoding="utf-8") as f:
print(f.read())
按行读取一个文件
with open(r"C:\Users\36961\Desktop\alvin.txt","r",encoding="utf-8") as f:
while True:
frag = f.readline()
if not frag:
break
else:
print(frag,end=" ")
二进制文件的读取和写入
二进制文件的处理流程和文本文件流程一致。首先还是要创建文件对象,不过,我们需要指定二进制模式,从而创建出二进制文件对象。
f = open(r"C:\Users\36961\Desktop\alvin.txt","wb") #可写的、重写模式的二进制文件对象
f = open(r"C:\Users\36961\Desktop\alvin.txt","ab") #可写的、追加模式的二进制文件对象
f = open(r"C:\Users\36961\Desktop\alvin.txt","rb") #可读的二进制文件对象
创建好二进制文件对象后,仍然可以使用 write()、read()实现文件的读写操作。
来,我们拷贝下图片试试?
with open('C://Users//36961//Desktop//IOStudy//timg.jpg','rb') as f: #读
with open('C://Users//36961//Desktop//IOStudyPlus//timg.jpg','wb') as w: #写
for line in f.readlines():
w.write(line)
拷贝成功了~
文件对象的常用属性
name | 返回文件的名字 |
mode | 返回文件的打开模式 |
closed | 若文件被关闭则返回True |
文件对象的常用方法
write(str) | 将字符串 str内容写入文件 |
flush() | 把缓冲区的内容写入文件,但不关闭文件 |
close() | 把缓冲区内容写入文件,同时关闭文件,释放文件对象相关资源 |
read([size]) | 从文件中读取size 个字节或字符的内容返回。若省略[size],则读 取到文件末尾,即一次读取文件所有内容 |
readlines() | 把文本文件中每一行都作为独立的字符串对象,并将这些对象放入 列表返回 |
writelines(s) | 将字符串列表 s 写入文件文件,不添加换行符 |
seek(offset) | 把文件指针移动到新的位置, offset 表示相对于whence 的多少个 |
([whence]) | 字节的偏移量; offset:off 为正往结束方向移动,为负往开始方向移动 whence 不同的值代表不同含义: 0: 从文件头开始计算(默认值) 1:从当前位置开始计算 2:从文件尾开始计算 |
tell() | 返回文件指针的当前位置 |
truncate([size]) | 不论指针在什么位置,只留下指针前 size 个字节的内容,其余全
部删除; 如果没有传入 size,则当指针当前位置到文件末尾内容全部删除 |
readline() | 从文本文件中读取一行内容 |