方式一:编码
f = open('d:\word.txt',mode='r',encoding='utf-8') msg = f.read() f.close() print(msg)
read()将文件中的内容所有读取出来;弊端:若是文件很大就会很是的占用内存,容易致使内存奔溃.spa
解决:在r模式下,n按照字符读取code
f = open('d:\word.txt',mode='r',encoding='utf-8') msg = f.read(3) msg1 = f.read() f.close() print(msg) print(msg1)
方式二:视频
f = open('word.txt',mode='r',encoding='utf-8') msg1 = f.readline().strip() msg2 = f.readline().strip() msg3 = f.readline().strip() msg4 = f.readline().strip() f.close() print(msg1) print(msg2) print(msg3) print(msg4)
readline()读取每次只读取一行,注意点:readline()读取出来的数据在后面都有一个\n,解决这个问题只须要在咱们读取出来的文件后边加一个strip()就OK。blog
方式三;图片
f = open('word.txt',mode='r',encoding='utf-8') print(f.readlines()) f.close()
readlines() 返回一个列表,列表里面每一个元素是原文件的每一行,若是文件很大,占内存,容易崩盘。ip
方式四:内存
能够经过for循环去读取,文件句柄是一个迭代器,他的特色就是每次循环只在内存中占一行的数据,很是节省内存。utf-8
f = open('../path1/弟子规',mode='r',encoding='utf-8') for line in f: print(line) #这种方式就是在一行一行的进行读取,它就执行了下边的功能 print(f.readline()) print(f.readline()) print(f.readline()) print(f.readline()) f.close()
文件操做方式:it
#1. 打开文件的模式有(默认为文本模式): r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】 w,只写模式【不可读;不存在则建立;存在则清空内容】 a, 只追加写模式【不可读;不存在则建立;存在则只追加内容】 #2. 对于非文本文件,咱们只能使用b模式,"b"表示以字节的方式操做(而全部文件也都是以字节的形式存储的,使用这种模式无需考虑文本文件的字符编码、图片文件的jgp格式、视频文件的avi格式) rb wb ab 注:以b方式打开时,读取到的内容是字节类型,写入时也须要提供字节类型,不能指定编码 #3,‘+’模式(就是增长了一个功能) r+, 读写【可读,可写】 w+,写读【可写,可读】 a+, 写读【可写,可读】 #4,以bytes类型操做的读写,写读,写读模式 r+b, 读写【可读,可写】 w+b,写读【可写,可读】 a+b, 写读【可写,可读】
seek()
seek(n)光标移动到n位置,注意: 移动单位是byte,全部若是是utf-8的中文部分要是3的倍数
一般咱们使用seek都是移动到开头或者结尾
移动到开头:seek(0)
移动到结尾:seek(0,2) seek的第二个参数表示的是从哪一个位置进行偏移,默认是0,表示开头,1表示当前位置,2表示结尾
tell()
使用tell()能够帮咱们获取当前光标在什么位置
# 利用with上下文管理这种方式,它会自动关闭文件句柄。 with open('t1',encoding='utf-8') as f1: f1.read() # 一个with 语句能够操做多个文件,产生多个文件句柄。 with open('t1',encoding='utf-8') as f1,\ open('Test', encoding='utf-8', mode = 'w') as f2: f1.read() f2.write('老男孩老男孩')