编程过程中总免不了需要对各种文件进行读与写,这篇文章主要总结对文件的常用操作,以备以后不时之需。
1、读文件
1.1、读文本文件
# 1.打开文件
file_object = open('info.txt', mode='rt', encoding='utf-8')
# 2.读取文件内容,并赋值给data
data = file_object.read()
# 3.关闭文件
file_object.close()
print(data)
1.2 、读图片等非文本内容文件
file_object = open('a1.png', mode='rb')
data = file_object.read()
file_object.close()
print(data) # \x91\xf6\xf2\x83\x8aQFfv\x8b7\xcc\xed\xc3}\x7fT\x9d{.3.\xf1{\xe8\...
注意事项:
读文件时,文件不存在程序会报错。 (解决方法可以加判断)
# 判断路径是否存在?
import os
file_path = "E:\Pycharm_Project\lufeixuecheng\files"
exists = os.path.exists(file_path)
if exists:
# 1.打开文件
file_object = open('infower.txt', mode='rt', encoding='utf-8')
# 2.读取文件内容,并赋值给data
data = file_object.read()
# 3.关闭文件
file_object.close()
print(data)
else:
print("文件不存在")
2、写文件
2.1、写文本文件
# 1.打开文件
# 路径:info.txt
# 模式:wb(要求写入的内容需要是字节类型)
file_object = open("info.txt", mode='wb')
# 2.写入内容
file_object.write("HQSS".encode("utf-8"))
# 3.文件关闭
file_object.close()
# 1.打开文件
# 路径:info.txt
# 模式:wb(要求写入的内容需要是字符类型)
file_object = open("info.txt", mode='wt', encoding='utf-8')
# 2.写入内容
file_object.write("武沛齐")
# 3.文件关闭
file_object.close()
2.2、写图片等文件
f1 = open('hqss0.png',mode='rb')
content = f1.read()
f1.close()
f2 = open('hqss1.png',mode='wb')
f2.write(content)
f2.close()
注意事项:
路径
绝对路径
相对路径
文件不存在时,w模式会新建然后再写入内容;文件存在时,w模式会清空文件再写入内容。
3、文件打开模式
上文基于文件操作基本实现了读、写的功能,其中涉及的文件操作模式:rt、rb、wt、wb,其实在文件操作中还有其他的很多模式。
关于文件的打开模式常见应用有:
-
只读:
r
、rt
、rb
(用)-
存在,读
-
不存在,报错
-
-
只写:
w
、wt
、wb
(用)-
存在,清空再写
-
不存在,创建再写
-
-
只写:
x
、xt
、xb
-
存在,报错
-
不存在,创建再写。
-
-
只写:
a
、at
、ab
【尾部追加】(用)-
存在,尾部追加。
-
不存在,创建再写。
-
-
读写
-
r+、rt+、rb+,默认光标位置:起始位置
-
w+、wt+、wb+,默认光标位置:起始位置(清空文件)
-
x+、xt+、xb+,默认光标位置:起始位置(新文件)
-
a+、at+、ab+,默认光标位置:末尾
-
4、常见功能
在上述对文件的操作中,只使用了write和read来对文件进行读写,其实在文件操作中还有很多其他的功能来辅助实现更好的读写文件的内容。
4.1、read,读
读所有【常用】
f = open('info.txt', mode='r',encoding='utf-8')
data = f.read()
f.close()
f = open('info.txt', mode='rb')
data = f.read()
f.close()
读n个字符(字节)【会用到】
f = open('info.txt', mode='r', encoding='utf-8')
# 读1个字符
data = f.read(1)
f.close()
print(data) #
f = open('info.txt', mode='rb')
# 读1个字节
data = f.read(3)
f.close()
print(data, type(data))
readline,读一行
f = open('info.txt', mode='r', encoding='utf-8')
v1 = f.readline()
print(v1)
f.close()
f = open('info.txt', mode='r', encoding='utf-8')
v2 = f.readline()
print(v2)
f.close()
readlines,读所有行,每行作为列表的一个元素
f = open('info.txt', mode='rb')
data_list = f.readlines()
f.close()
print(data_list)
循环,读大文件(readline加强版)【常见】
f = open('info.txt', mode='r', encoding='utf-8')
for line in f:
print(line.strip())
f.close()
4.2、write,写
f = open('info.txt', mode='a',encoding='utf-8')
f.write("华青水上")
f.close()
f = open('info.txt', mode='ab')
f.write( "华青水上".encode("utf-8") )
f.close()
4.3、flush,刷到硬盘
f = open('info.txt', mode='a',encoding='utf-8')
while True:
# 不是写到了硬盘,而是写在缓冲区,系统会将缓冲区的内容刷到硬盘。
f.write("华青水上")
f.flush()
f.close()
4.4、移动光标位置(字节)
f = open('info.txt', mode='r+', encoding='utf-8')
# 移动到指定字节的位置
f.seek(3)
f.write("华青水上")
f.close()
注意:在a模式下,调用write在文件中写入内容时,永远只能将内容写入到尾部,不会写到光标的位置。
4.5、获取当前光标位置
f = open('info.txt', mode='r', encoding='utf-8')
p1 = f.tell()
print(p1) # 0
f.read(3) # 读3个字符 3*3=9字节
p2 = f.tell()
print(p2) # 9
f.close()
f = open('info.txt', mode='rb')
p1 = f.tell()
print(p1) # 0
f.read(3) # 读3个字节
p2 = f.tell()
print(p2) # 3
f.close()
5、上下文管理
之前对文件进行操作时,每次都要打开和关闭文件,比较繁琐且容易忘记关闭文件。
以后再进行文件操作时,推荐大家使用with上下文管理,它可以自动实现关闭文件。
with open("info.txt", mode='rb') as file_object:
data = file_object.read()
print(data)
在Python 2.7 后,with又支持同时对多个文件的上下文进行管理,即:
with open("xxxx.txt", mode='rb') as f1, open("xxxx.txt", mode='rb') as f2:
pass
至此,关于文件的基本操作总结完毕,有不当的地方,欢迎大家批评指正。