读完本篇你将学会文件的创建、读取、写入等。
在Python中使用文件的关键函数是open()函数。open()函数有两个参数:
文件名(file)
、模式(mode)
。
open()函数的基本格式如下⬇️:
file_obj = open(file,mode=“r”)
完整的语法格式为⬇️:
open(file, mode=‘r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
file_obj:文件对象,根据自己的喜好命名。不使用时要及时关闭,使用close()函数,才能返回操作系统的文件管理观察执行结果。
file:文件名。可以是相对路径或绝对路径。
mode:打开文件的模式。默认是:
mode='rt'
以下是文件的四种模式:
"r"
:读取。打开文件进行读取,如果不存在则报错。
"w"
:写入。打开文件进行写入,如果文件存在内容会被覆盖。
"a"
:追加。向原有的文件追加内容,如果没有则创建。
"x"
:创建。创建文件,如果文件存在则报错。以下是两种文件类型:
"t"
:文本模式,默认值。"x"
:二进制模式(例:图像)
read()
方法用于读取文件。可以使用size限制读取的字符数。
read()函数的基本格式如下⬇️:
file_obj.read([size])
案例⬇️:
f = open('sse','r') # sse想要打开的文件名 r 打开模式默认是r,可省略
read_file = f.read(78) # 将读取的文件保存到变量read_file中 78:限定输出的字符数
f.close() # 关闭文件
print(read_file) # 输出变量read_file相当于输出文件
执行结果为⬇️:
with关键词应用在
打开文件
和建立文件对象
时。with最大的优点是不需要使用file_obj.close()关闭文件,with在文件使用结束时,会自动关闭文件。
with基本格式如下⬇️:
with open(file) as file_obj:
读取代码
案例⬇️:
with open('k') as f: # 默认读取方式为r,可省略。 不需要使用close关闭文件
read_file = f.read()
print(read_file)
执行结果为⬇️:
可以使用循环逐行读取文件内容。
逐行读取基本格式如下⬇️:
for i in file_obj :
输出
案例⬇️:
fn = 'k'
with open(fn) as f:
for i in f: # 使用for循环遍历每一行
print(i) # 输出
执行结果为⬇️:
⭐原因:文本文件末尾有换行符,print结尾也有一个换行(end=‘\n’)。
解决办法一:去除字符右边的空格
fn = 'k'
with open(fn) as f:
for i in f:
print(i.rstrip()) # 使用rstrip去除字符右边的空格
解决办法二:更换结尾符
fn = 'k'
with open(fn) as f:
for i in f:
print(i,end='') # 使用end=''替换默认的end='\n'
**write()**方法用于写入文件。
write()函数的基本格式如下⬇️:
file_obj.write()
案例⬇️:
string = 'Now study Python.' # 要写入的字符串
with open('out','w') as f: # w:写入模式
f.write(string) # write()函数写入字符串
执行结果为⬇️:
write()方法不能写入数字,所以要对数字进行转换。
错误示范⬇️:
x = 100
with open('out2','w') as f:
f.write(x) # 此处会报错,类型错误。不能输入数字。
正确代码⬇️:
x = 100
with open('out2','w') as f:
f.write(str(x)) # 将数字转换为字符串。
执行结果为⬇️:
向原有的文件追加内容,如果文件不存在,则创建再填加内容。
案例⬇️:
add = 'I love Python' # 要追加的字符串
with open('out','a') as f: # a:追加模式
f.write(add) # 向文件out追加内容
执行结果为⬇️:
一般图片、音频文件等都是二进制文件。文件的默认类型是t(文本模式),二进制模式为b。所有读取文件使用’rb’,写入文件使用’wb’。
案例⬇️:
src = 'IronMan.jpg' # 读取文件名
dst = 'IronMan1.jpg' # 报存的文件名
tmp = '' # 保存读取到的二进制
with open(src, 'rb') as f:
tmp = f.read() # 读取
with open(dst, 'wb') as w:
w.write(tmp) # 写入