1.文件打开模式
# 分为两大类
# 1:控制文件的读写操作
# 1.1r:只读:在文件不存在时则报错,文件存在时文件指针跳到文件开头
# f = open(r'a.txt',mode = 'rt',encoding='utf-8')
# res = f.read()
# print(f.readable())
# print(f.writable())
# f.close()
# 1.2 w:只写:在文件不存在时则创建空文件,文件存在时则清空文件指针跳到文件开头
# f = open(r'b.txt',mode='wt',encoding='utf-8')
# f.write('hello1\n')
# f.write('hello2\n')
# f.close()
# 1.3:只追加写:在文件不存在时则创建空文件,文件存在也不会清空,文件指针跳到文件结尾
# f = open(r'c.txt',mode='at',encoding='utf-8')
# x = 'egon\n'
# f.write(x)
# f.close()
# 总结:w与a的异与同
# 相同点: 在打开文件不关的情况下,连续的写入,新内容永远在老内容之后
# 不同点: 重新打开文件,w会清空老内容,而a模式会会保存老内容并且指针跳到文件末尾
# 拷贝操作
# old_file = input('源文件路径:').strip()
# new_file = input('目标文件路径:').strip()
# f = open(r'%s'%old_file,mode='rb')
# res = f.read()
# f.close()
# x = open(r'%s'%new_file,mode='wb')
# x.write(res)
# x.close() # 这个做法比较繁琐 可以看下方代码
# 上下文操作with
# with open() as f,open() as f1: # 结合with 可以一次操作多个文件
# f.read()
# with open(r'%s'%old_file,mode='rb') as old, open(r'%s'%new_file,mode='wb') as new:
# res= old.read() # 这个就是精简版的拷贝操作
# new.write(res)
# for line in old: # 利用for循环可以达到上面两行代码一样的操作 就像遍历列表一样 进行循环读写操作
# new.write(line)
2.文件操作方法
# 读相关操作
# with open(r'a.txt',mode='rt',encoding='utf-8') as old:
# line1 = old.readline() # 只读一行
# print(line1)
#
# line2 = old.readlines() # 读取所有内容并变成一个列表
# print(line2)
#
# lines = []
# for i in old:
# lines.append(i) # 这个操作就是在模仿上面readlines这个方法
# 写相关操作
with open(r'a.txt', mode='wt', encoding='utf-8')as old:
lines = ['111', '222', '333']
for linein lines:
old.write(line)# 循环写入
old.writelines(lines)# 这个操作跟上面的for循环一样
old.writelines('hello')# 注意 和write不同的是writelines是循环每一个字符依次写入 而write是一次写入
# print(old.name) # 取的是打开文件的路径
# print(f.txt.closed) # 查看文件是否关闭
# f.flush() # 刷新操作 在这里要知道一个知识点 每当我们对硬盘进行写操作时 实际是操作系统来执行的 写入硬盘这个操作会根据操作系统的优化机制来进行
# 有时候并不会马上进行存入,而是存一大波再进行存入,这个刷新的方法是提前存入
3.控制文件指针
# 文件内指针的移动是以字节为单位
# 只有一种特殊情况,t模式下的read(n),代表的是n个字符,此外字符代表的都是字符
# with open(r'a.txt', mode='rt', encoding='utf-8') as Hans:
# date = Hans.read(6) # 6个字符
# print(date)
#
# with open(r'a.txt', mode='rb') as f:
# date = f.read(6) # 6个字节
# print(date.decode('utf-8')) # 解码操作
# f.seek(n,模式) #n代表移动的字节个数
# 模式
# 只有0模式可以在t模式下用 ,1,2模式只能在b下使用
# 0:参照文件的开头开始移动
# with open(r'a.txt',mode='rt',encoding='utf-8') as f:
# f.seek(5,0) # 以开头位参照物 将指针放在第五个字节位
# print(f.tell()) # 指针当前所在位置
# print(f.read())
# print(f.tell())
# f.seek(0,0)
# print(f.read())
# 1:参照指针当前所在位置
# with open(r'a.txt',mode='rb') as f:
# f.seek(3,1) # 在当前位置向前进3格
# f.seek(3,1)
# print(f.tell()) # 在第6位
# f.seek(2,1)
# print(f.read().decode('utf-8'))
# 2:永远参照文件末尾的位置
# with open(r'a.txt', mode='rb') as f:
# f.seek(0,2) # 将指针放在文件末尾
# f.seek(-3, 2) # 将指针放在倒数第三个字节
# print(f.tell())
# print(f.read().decode('utf-8')) # 读取最后三个字节的内容
# f.truncate(n)从文件开头往后数n个字节保留下来,其余全部删除
# f.truncate()从文件开头往后数指针当前所在的位置,其余全部删除