相对路径 :文件存在于当前目录 绝对路径
open解码当前系统编码 当前系统编码:gbk 如果打开utf-8,需要使用encoding=utf-8
文件处理流程:
1.打开文件,得到文件句柄并赋值给一个变量
2.通过句柄对文件进行操作
3.关闭文件
1 # r读 2 f=open('课程',encoding=utf-8) #文件句柄 3 data=f.read() 4 print(data) 5 f.close() # 不关闭就一直不释放 处理器一直传输 6 7 f.readable() #是否可读 8 f.readline() # 每执行一次读取一行 read之后再readline无结果 结果为空光标位置移动到结尾处 9 f.readlines() 10 11 # w写 12 f=open('课程','w',encoding='utf-8') #w新建空文档覆盖'课程'这个文档 13 \n 换行 14 f.write() #写入内容 writable 可写 15 writelines() 16 write() 写的类型必须是字符串类型。'' 读也是 17 18 # a添加 可追加 19 f=open('课程','a',encoding='utf-8')文件处理 r,w,add
with open('a.txt','w') as f: f.write('1111\n') # 不用再设置close关闭文件 此上可全部执行 with open('xx','r',encoding='gbk') as scr_f,\ open('xxx_new','w',encoding='gbk') as dst_f: # 同时读取两个文件 \ 转折 data=scr_f.read() dst_f.write(data) linux 处理文件默认二进制
文件处理模式b模式
硬盘存储以二进制形式 二进制处理文件原因:文件类型不同、操作系统不同(硬盘上存储文件相同)、linux默认以二进制形式
1 f=open('test.py','rb',encoding='utf-8') 2 # 以二进制方式读取,又以utf-8编码文件 两者冲突
ValueError:binary mode doesn't take an encoding argument
b的方式不能执行编码
'\r\n' Win 回车换行 \x 十六进制 newline 读取文件中真正的换行符号 utf-8 一个中文三个字符
f=open('b.txt.'r',encoding='utf-8',newline='')
1 f=open('test.py','rb') # 以二进制方式读取 结果呈现为字节形式 2 # 二进制形式转换为字符串形式 3 data=f.read() 4 # '字符串‘———encode----> bytes 5 # 'bytes'———decode-----> '字符串' 6 print(data) 7 print(data.decode('utf-8') 8 9 f=open('test1.py','wb') # b的方式不能指定编码 10 f.write('111\n') 11 # TypeError: a bites-like object is required,not 'str' 12 # 转换为二进制 byte(x,encoding='utf-8') 字符串转化为字节(编码) 13 有下面两种方式 14 f=write(bytes('111\n',encoding='utf-8')) # 1 15 16 x='hello' 17 x.encode('utf-8') # 2 18 # 直接b转换是错误的 19 20 f=open('test.py','ab') # 最后一行
文件操作的其他方法
文件内光标移动:read(3) 代表读取3个字符,其余文件内光标移动都是以字节为单位,如seek、tell、truncate。
tell 告诉光标当前位置
seek 控制光标移动 默认从0开始即文件开头开始 因此seek有两个参数,必须以b方式打开 seek(10,1) # 1表示从上一个位置开始 seek(-10,2) # 2表示从结尾开始 倒序10个字节(注意负号!!)
truncate 文件截断 从开头一直到()位置 silice 不同:truncate文件以写的方式打开,但不能是 w、w+, w存在则清空
# 读取文件中所有内容组成一个大列表 缺点:效率低且工作量大 for i in f.readlines: print(i) # 循环文件的推荐方式 文件句柄 for i in f: print(i) # 读取文件最后一行 for i in f: offs=-10 # 偏移量 while True: f.seek(offs,2) data=f.readlines() # 读取从当前位置到最后一行 表现为行 if len(data) >1; print('最后一行是%s' %(data[-1].decade('utf-8'))) break
标签:文件,utf,读取,encoding,处理,data,操作,open From: https://www.cnblogs.com/yt862569307/p/16881835.html