Python:文件操作
Python:文件操作
open()调用的内置函数,内置函数调用的系统内部的open,一切对文件进行的操作都是基于文件句柄f1.
文件操作的步骤:
打开文件 -> 操作文件 -> 关闭文件
切记:最后要关闭文件(否则可能会有意想不到的结果)
win的操作系统安装时是默认的gbk编码,而linux操作系统默认的是utf8编码;
打开文件
文件句柄 = open('文件路径',encoding='指定文件编码', mode='模式')
f1 = open(r'd:/联系方式.txt', encoding='gbk', mode='r') #指定绝对路径 print(f1.read()) f1.close() f1 = open('log1', encoding='gbk', mode='r') #相对路径是在该py文件同级目录下 print(f1.read()) f1.close()
为了防止忘记关闭文件,可以使用上下文管理器来打开文件
with open('文件路径','模式') as 文件句柄:
with open('log1', encoding='utf-8') as f1,\ open('log2', encoding='utf-8', mode='w') as f2: content = f1.read() f2.write(content) with open('log1', encoding='utf-8') as f1: print(f1.read()) f1.close() pass with open('log1', encoding='utf-8',mode='w') as f2: f2.write('666')
打开文件的模式有:
r,只读模式(默认)。 w,只写模式。【不可读;不存在则创建;存在则删除内容;】 a,追加模式。【可读; 不存在则创建;存在则只追加内容;】 r+,可读写文件。【可读;可写;可追加】 w+,写读 "U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用) rU r+U "b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注) rb wb ab
关闭文件
文件句柄.close()
文件:读
#读 r
#1 read() 全读出来 f1 = open('log1', encoding='utf-8') content = f1.read() print(content) f1.close() #2 read(n) 读一部分 f1 = open('log1', encoding='utf-8') content = f1.read(3) print(content) f1.close() f1 = open('log1', mode='rb') print(f1.read(3).decode('utf-8')) f1.close() # r 模式 read(n) n 按照字符读取。 # rb 模式 read(n) n 按照字节读取。 #3 readline() 按行读取 f1 = open('log1', encoding='utf-8') print(f1.readline()) print(f1.readline()) print(f1.readline()) f1.close() #4 readlines() 依次读取每行 f1 = open('log1', encoding='utf-8') print(f1.readlines()) f1.close() # 5 for 循环 f1 = open('log1', encoding='utf-8') for line in f1: print(line) f1.close()
# r+ 读写 先读后写 f1 = open('log1', encoding='utf-8', mode='r+') print(f1.read())f1.write('666') f1.write('a') print(f1.read()) f1.close()
文件:写
# w 没有文件,新建文件写入内容 # 有原文件,先清空内容,在写入新内容。 f1 = open('log2', encoding='utf-8', mode='w') f1.write('桃白白fdksagdfsa') f1.close() # 图片的读取及写入 f1 = open('1.jpg', mode='rb') content = f1.read() f2 = open('2.jpg', mode='wb') f2.write(content) f1.close() f2.close() # w+ 先写后读 f1 = open('log2', encoding='utf-8', mode='w+') f1.write('两款发动机了') f1.seek(0) print(f1.read()) f1.close() # 追加 a # a 没有文件,新建文件写入内容 f1 = open('log3', encoding='utf-8', mode='a') # f1.write('alex 666') f1.write('\nalex 666') f1.close() # a+ f1 = open('log3', encoding='utf-8', mode='a+') f1.write('python22期') f1.seek(0) print(f1.read()) f1.close()
文件:改
操作步骤如下:
# 1,以读模式打开原文件。
# 2,以写的模式打开一个新文件。
# 3,将原文件读出按照要求修改将修改后的内容写入新文件。
# 4,删除原文件。
# 5,将新文件重命名原文件。
import os with open('file', encoding='utf-8') as f1,\ open('file.bak', encoding='utf-8', mode='w') as f2: old_content = f1.read() new_content = old_content.replace('alex', 'SB') f2.write(new_content) os.remove('file') os.rename('file.bak', 'file')
升级版本
import os with open('file', encoding='utf-8') as f1,\ open('file.bak', encoding='utf-8', mode='w') as f2: for line in f1: new_line = line.replace('SB','alex') f2.write(new_line) os.remove('file') os.rename('file.bak', 'file')
其他操作:
# readable 是否可读 # writable 是否可写 # f1.seek(12) #任意调整 # f1.seek(0,2) #光标调整到最后 # f1.seek(0) #光标调整到开头 # f1.tell() #告诉光标的位置 # f1.truncate(3) #按照字节对原文件进行截取 必须在a 或 a+ 模式 f1 = open('log3', encoding='utf-8', mode='a+') # f1.write('python22期') # print(f1.read()) print(f1.readable()) print(f1.writable()) f1.close() f1 = open('log2', encoding='utf-8') f1.read() print(f1.tell()) print(f1.seek(0)) print(f1.seek(0,2)) f1.seek(12) #任意调整 f1.seek(0,2) #光标调整到最后 f1.seek(0) #光标调整到开头 print(f1.tell()) #告诉光标的位置 f1.close() f1 = open('log3', encoding='utf-8', mode='a+') f1.truncate(3) #按照字节对原文件进行截取 必须在a 或 a+ 模式 f1.close()