day8

1、什么是文件
文件是操作系统提供给用户或者说应用程序操作硬盘的一种功能

2、为何要用文件
读写文件就是在读写硬盘:我们对文件的读写操作都会被操作系统转换成硬盘的读写操作

应用程序-------------》文件对象、文件句柄
操作系统-------------》文件
硬件-----------------》硬盘

3、如何用文件

"""
f = open(r'a.txt', mode='rt', encoding='utf-8')

print(f) # 文件对象、文件句柄

res = f.read()
print(res)

f.close()

print(f)

f.read()

del f

with open(r'a.txt', mode='rt', encoding='utf-8') as f,
open('b.txt',mode='wt',encoding='utf-8') as f1:
pass

文件打开模式

1、控制文件读写操作的模式

r(默认)

w

a

2、控制文件读写内容的模式

t(默认的):读写都是以字符串为单位的,只适用于文件文件,必须指定encoding参数

b:读写都是以bytes为单位的,适用于所有文件,一定不能指定encoding参数

r模式:只读模式,如果文件不存在则报错,文件存在则文件指针处于文件开头

f = open('a.txt',mode='rt',encoding='utf-8')

# print(f.read())

# print('='*50)

# print(f.read())

print(f.readable())

print(f.writable())

f.close()

w模式:只写模式,如果文件不存在则创建空文档,文件存在则清空,文件指针处于文件开头

f = open('a.txt',mode='wt',encoding='utf-8')

# f.write("你好\n")

# f.write("哈哈哈\n")

# f.write("我擦勒\n")

f.write("你好\n哈哈哈\n我擦勒\n")

# print(f.readable())

# print(f.writable())

f.close()

总结:w模式,在打开了文件不关的情况下,连续的write写入,新写的内容永远跟在后面

a模式:只追加写模式,如果文件不存在则创建空文档,文件存在不会清空,文件指针处于文件末尾

f = open('c.txt',mode='at',encoding='utf-8')

# f.write("4444\n")

# f.write("555\n")

# f.write("6666\n")

print(f.readable())

print(f.writable())

f.close()

总结:a模式,在打开了文件不关的情况下,连续的write写入,新写的内容永远跟在后面,这一点与w模式相同

不同的是,在打开了文件关闭然后重新打开的情况下,a模式永远写在后面

b模式:读写都是以bytes为单位的,适用于所有文件,一定不能指定encoding参数

with open('1.mp4',mode='rb') as f:

res = f.read()

print(res.decode('utf-8'))

with open('a.txt',mode='rb') as f:

res = f.read()

print(res.decode('utf-8'))

with open('a.txt',mode='ab') as f:

f.write("啊手动阀手动阀".encode('utf-8'))

例:文件拷贝功能

# 方案一:

with open('1.mp4',mode='rb') as f1,open(r'D:\1111111.mp4',mode='wb') as f2:

res = f1.read()

f2.write(res)

方案二:

储备知识:

with open('a.txt',mode='rt',encoding='utf-8') as f:

# f.read()

for line in f:

print(line,end='')

with open('1.mp4',mode='rb') as f:

for line in f:

print(line)

具体实现:

with open('1.mp4',mode='rb') as f1,open(r'D:\1111111.mp4',mode='wb') as f2:

for line in f1:

f2.write(line)

可读可写

r+t

w+t

a+t

r+b

w+b

a+b

with open('a.txt',mode='r+t',encoding='utf-8') as f:

print(f.readable())

print(f.writable())

print(f.read())

f.write("22222222222222222222\n")

with open('a.txt',mode='w+t',encoding='utf-8') as f:

print(f.readable())

print(f.writable())

文件操作其他方式
with open('a.txt',mode='rt',encoding='utf-8') as f:

# lines = f.readlines()

# print(lines)

print(f.readline())

print(f.readline())

with open('a.txt',mode='wt',encoding='utf-8') as f:

# f.write("111\n222\n333\n")

# lines = ['111\n','222\n','3333\n']

# for line in lines:

# f.write(line)

# f.writelines(lines)

f.write('hello')

f.flush()

# f.writelines('hello')

控制文件指针移动
大前提:只有t模式下的,f.read(n)中的n代表的是字符个数,除此以外,关于指针的移动,单位都是字节bytes

f.read()

with open('a.txt',mode='rt',encoding='utf-8') as f:

res = f.read(6)

print(res)

with open('a.txt',mode='rb') as f:

# res = f.read(6)

res = f.read(8)

print(res.decode('utf-8'))

f.truncate()

with open('a.txt',mode='r+t',encoding='utf-8') as f:

f.truncate(8)

f.seek移动的全都是字节个数

f.seek(字节个数,0)
f.seek(字节个数,1)
f.seek(字节个数,2)

posted @ 2021-06-29 15:17  章建国123  阅读(17)  评论(0编辑  收藏  举报