文件处理流程
(1)打开文件,得到文件句柄(文件对象)并赋值给一个变量
(2)通过句柄(文件对象)对文件进行操作
(3)关闭文件
1 1 # 打开文件:
2 2 f = open('联系方式.txt', 'a', encoding='utf-8') # 文件句柄
3 3 # 操作文件(读):
4 4 data = f.read()
5 5 # 输出读的结果:
6 6 print('--read:
', data)
7 7 # 关闭文件
8 8 f.close()
在Python中操作文件两种方式:1.内置函数open() 2.使用with来管理上下文
一、内置函数open()
file_obj=open(file, mode='r', encoding='utf-8')
参数file用来指定文件的相对路径或绝对路径。
参数mode用来指定文件的打开模式。
常用模式如下:
文件打开方式(文件打开模式)
r ,只读模式[默认模式,文件必须存在,不存在则抛出异常]
w,只写模式[不可读;不存在则创建;存在则清空内容]
x, 只写模式[不可读;不存在则创建,存在则报错]
a, 追加模式[不存在则创建;存在则只追加内容]
"+" 表示可以同时读写某个文件
r+, 读写[可读,可写]
w+,写读[可读,可写]
x+ ,写读[可读,可写]
a+, 写读[可读,可写]
"b"表示以字节的方式操作
rb 或 r+b
wb 或 w+b
xb 或 w+b
ab 或 a+b
参数encoding指定操作文件的字符编码,未指定encoding将使用当前操作系统的默认字符编码(Linux默认为UTF-8,Windows默认为GBK)。
二、使用with来管理上下文
上下文管理详细解释见https://blog.csdn.net/immortal_codeFarmer/article/details/76796868
with会打开文件将文件对象赋值给file_obj,然后在执行完子代码块的文件操作后自动调用file_obj.close()方法。
with open(file, mode='r', encoding='utf-8') as file_obj:
文件操作...
操作文件的方法:
文件对象file_obj内置了操作文件的方法,常用的读写方法有:
方法名 含义
file_obj.read() 默认读取文件所有内容。
file_obj.readline() 默认读取一行内容。
file_obj.readlines() 默认读取文件所有行,以列表的形式返回。
file_obj.write(s) 写入内容s。
file_obj.writelines(lines) 将序列lines中的所有元素写入。
当方法read()、readline()返回空字符串/字节串时,代表文件读取完毕
1 while True:
2 line=file_obj.readline()
3 if not line:
4 break
5 print(line)
也可以使用更为便捷的for循环来迭代读取文件的每一行内容
1 for line in file_obj: #迭代一次则读出文件一行内容并赋值给line,读完为止 2 print(line)
文件对象常用的方法:
flush() -> 把缓冲区的内容写入文件,当不关闭文件
close() -> 把缓冲区的内容写入文件,同时关闭文件,并释放文件对象
read([size]) -> 从文件中读取size个字节(python2)或字符(python3)的内容作为结果返回,如果省略size则一次性读取所有内容
readline() -> 从文本文件中读取一行内容作为结果返回
readlines() -> 把文本文件中的每一行作为一个字符串存入列表中返回该列表
tell() -> 返回文件指针的位置
seek(offset[,where]) -> 移动文件指针
truncate([size]) -> 删除从当前指针位置到文件末尾的内容,如果指定了size则不论指针在哪只留下前size个字符其余的删除
write(s) -> 把字符串s的内容写入文件
writelines(s) -> 把字符串列表写入文本文件,不添加换行符
文件指针移动
每个文件对象内部都维护一个文件指针,以r或w模式打开文件时指针指向文件开头,以a模式打开文件时指针指向文件末尾,读写操作都是基于上一次指针所在位置的基础上进行偏移的。
我们也可以使用方法file_obj.seek(offset,whence)控制指针的偏移:
offset代表偏移量,单位为字节。
whence默认值的为0,代表以文件开头为参照物。
whence=1则代表以当前位置为参照物。
where=2则代表以文件末尾为参照物。
1 with open('test.txt','w+b') as f:
2 f.write('大王叫我来巡山'.encode('utf-8'))
3 print(f.tell()) #查看当前指针所在位置为21
4 f.seek(3,0) #以文件开头为起始,移动3个字节,移过了中文字符'大'
5 print(f.tell()) #查看当前指针所在位置为3
6 print(f.read(3).decode('utf-8')) #再读取3个字节,解码的结果为字符'好'