python笔记day12
文件高级及基本函数使用
1.文件模式
- x模式(控制文件操作模式)-》了解
x 只写模式【不可读:不存在则创建,存在则报错
#x模式 只写模式 安全写模式,避免覆盖
with open('a.txt',mode='x',encoding='utf-8') as f:
f.write('123')
- b模式补充(控制文件读写内容的模式)
bytes类型转换
x=10 #int(10)
'你'.encode('gbk)#bytres()
t 模式 读写都是字符串 只能针对文本文件 必须指定字符编码
b 模式 binary 读写以bytes为单位 针对所有文件 文本文件也可以 一定不能指定编码
with open(r'aa.webp',mode='r') as f:#默认文本模式 没有读的时候还没乱码
#res=f.read() #读入内存并decode解码操作 乱码
pass
with open('aa.jpeg',mode='rb') as f:#b模式是啥读啥二进制
res=f.read(24) #为了显示简单会进行封装显示成16进制
print(res)
print(type(res))
pass
with open('aa.txt',mode='rb') as f:#b模式是啥读啥二进制
res=f.read(24) #为了显示简单会进行封装显示成16进制 针对英文会直接按8个bytes显示
print(res)
print(type(res))
print(res.decode('utf-8'))
pass
#b模式应用案例
with open(r'e.txt',mode='wb')as f:
f.write('哈哈哈\n'.encode('utf-8'))
f.write('嘻嘻嘻\n'.encode('gbk'))
b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00H\x00H\x00\x00\xff\xe1\x00X'
<class 'bytes'>
b'\xe5\x93\x88\xe5\x93\x88\xe5\x93\x88xixixi'
<class 'bytes'>
哈哈哈xixixi
#文件拷贝工具
with open('e.txt',mode='rb') as f1,\
open('f.txt',mode='wb') as f2:
res=f1.read()
f2.write(res)
src_file=input('源文件路劲》》').strip()
dst_file=input('目标文件路径》》》').strip()
with open(r'{}'.format(src_file),mode='rt',encoding='utf-8') as f1,\
open(r'{}'.format(dst_file),mode='wt',encoding='utf-8') as f2:
# res=f1.read() #内存占用过大
# f2.write(res)
for line in f1:
f2.write(line)
#循环读取文件
#方式一 控制每次读取的数据量
with open('aa.jpeg',mode='rb') as f:
while True:
res=f.read(32768)#以字节为单位读入 当一行特别长的时候用while省内存
if len(res)==0:
break
print(len(res))
#方式二 以行为单位
with open('aa.jpeg',mode='rb') as f:
js=0
for line in f:
print(line)#以\n为分割
js+=1
if(js==1):break #文件太大了。。。
32768
32768
32768
32768
32768
32768
22428
b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00H\x00H\x00\x00\xff\xe1\x00XExif\x00\x00MM\x00*\x00\x00\x00\x08\x00\x02\x01\x12\x00\x03\x00\x00\x00\x01\x00\x01\x00\x00\x87i\x00\x04\x00\x00\x00\x01\x00\x00\x00&\x00\x00\x00\x00\x00\x03\xa0\x01\x00\x03\x00\x00\x00\x01\x00\x01\x00\x00\xa0\x02\x00\x04\x00\x00\x00\x01\x00\x00\x06@\xa0\x03\x00\x04\x00\x00\x00\x01\x00\x00\x06@\x00\x00\x00\x00\xff\xed\x008Photoshop 3.0\x008BIM\x04\x04\x00\x00\x00\x00\x00\x008BIM\x04%\x00\x00\x00\x00\x00\x10\xd4\x1d\x8c\xd9\x8f\x00\xb2\x04\xe9\x80\t\x98\xec\xf8B~\xff\xc0\x00\x11\x08\x06@\x06@\x03\x01"\x00\x02\x11\x01\x03\x11\x01\xff\xc4\x00\x1f\x00\x00\x01\x05\x01\x01\x01\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n'
2.文件操作的其他方法
读相关
- readline
- readlines
#按行读取readline
with open('e.txt',mode='rt',encoding='utf-8') as f:
# res1=f.readline()
# res2=f.readline()
# print(res2)
while True:
res=f.readline()
if len(res)==0:
break
print(res)
#readliens 按行读入到列表里 和read一样是一次性读入 读的文件过大时会溢出
with open('e.txt',mode='rt',encoding='utf-8') as f:
res=f.readlines()
print(res)
哈哈哈������
1234
['哈哈哈������\n', '1234']
写相关
#witelines
with open('e.txt',mode='at+',encoding='utf-8') as f:
f.write('hhh\nhhhgggg\n')
f.writelines(['1111\n','1222','3333'])#循环取出写到文件
l=['1111\n','1222','3333']
for line in l:
f.write(line)
#b模式下
l=[b'fdasf\n',b'sdf\n',b'dfas\n']#纯英文 直接加b
l=[bytes('牙牙乐\n',encoding='utf-8'),bytes('冲呀\n',encoding='utf-8')]
with open('e.txt',mode='ab+') as f:
f.writelines(l)
flush
写操作 会攒一波字符一起写入硬盘
flush 立马丢到硬盘里
最好不用,
了解
- readable
- writable
- closed 判断是否关闭
- name
- encoding
#flush
with open('e.txt',mode='at+',encoding='utf-8') as f:
f.write('hhh\nhhhgggg\n')
f.flush()
#
with open('e.txt',mode='rt',encoding='utf-8') as f:
print(f.readable())
print(f.writable())
print(f.encoding)
print(f.name)
print(f.closed)
True
False
utf-8
e.txt
False
3.文件高级操作:控制文件指针的移动
指针移动单位是bytes 字节为单位
只有t模式下的read(n)代表字符个数
f.seek
with open('e.txt',mode='rt',encoding='utf-8')as f:
res=f.read(5)
print(res)
#f.seek:移动以字节为单位
#f.seek(n,模式):n是移动字节数
#模式
#模式0:参照物是文件开头位置 只有0模式可以在t模式下使用
#模式1:参照物是当前指针所在的位置
#模式2:参照物是文件末尾,应该移动负数
#f.tell()获取文件指针当前的位置
with open('e.txt',mode='rb')as f:
print('0 mode')
f.seek(3,0)
f.seek(5,0)
print(f.tell())
res=f.read(15)
print(res.decode('utf-8'))
print('1 mode')
f.seek(9,1)
print(f.tell())
f.seek(3,1)
print(f.tell())
print('2 mode')
f.seek(-9,2)
print(f.tell())
f.seek(-3,2)
print(f.tell())
hhh
h
0 mode
5
hhhgggg
1234hh
1 mode
29
32
2 mode
196
202

浙公网安备 33010602011771号