文件处理
1.关键方法
	open(文件路径,操作模式,字符编码)  # 打开文件
 	close()  # 关闭文件
  """
  推荐编写路径的前面加字母r:斜杠跟字母的组合有时候会产生特殊含义 路径中不应该有这种现象
    print('asda\n\a\tsadad')
    print(r'asda\n\a\tsadad')
  """
2.推荐写法
	"""
	不推荐写法(原因是怕忘记close 量大了之后影响资源和效率)
		变量名 = open()
		变量名.close()  
	"""
	with open() as 变量名:
    子代码
  ps:子代码运行结束自动调用close关闭资源(省事)
"""
pass关键字
	仅仅是用来补全代码结构 防止报错 本身没有任何含义
"""
r	只读模式 只能读不能写
	'''r模式 文件路径不存在会直接报错'''
  with open(r'b.txt','r',encoding='utf8') as f:
      pass
  '''r模式 文件路径存在等待读取文件'''
  with open(r'a.txt','r',encoding='utf8') as f:
      pass
w 只写模式 只能写不能读
	'''w模式 文件路径不存在自动创建该文件'''
  with open(r'b.txt','w',encoding='utf8') as f:
      pass
  '''w模式 文件路径存在会先清空该文件内容 之后再写入'''
  with open(r'a.txt','w',encoding='utf8') as f:
      f.write('哈哈哈')
a 追加模式 尾部追加写不能读
	'''a模式 文件路径不存在自动创建该文件'''
  with open(r'a.txt','w',encoding='utf8') as f:
      pass
   '''a模式 文件路径存则在文件末尾等待写入'''
  with open(r'a.txt','w',encoding='utf8') as f:
      pass
ps:除了上述三种模式之外其实还有其他模式 只不过很少用 可以不看
1.read()
	一次性读取文件中所有的内容
  	当文件特别大的时候 该方法不可取(内存溢出) 推荐使用for循环
########################################################
2.for循环文件内容(重要)
	每次只读文件一行内容 肯定不会出现内存溢出的情况
########################################################
3.readline()
	没执行一次只读一行内容
4.readlines()
	一次性读取文件内容并按照行组织成列表中一个个数据值
5.readable()
	判断文件是否可以执行读的操作
6.write()
	朝文件中写数据
7.writable()
	判断文件是否可执行写的操作
8.writelines()
	括号内支持传列表
9.flush()
	将内存中的文件数据立刻刷到硬盘(类似于主动按ctrl+s)
ps:文件内光标移动的概念
	现象:执行完read操作之后 再次执行read不会有内容
t 文本模式
	默认的操作模式	
  	r		>>>:    rt
    w   >>>:    wt
    a   >>>:    at
  1.该模式只能操作文本文件
 	2.读写都是以字符串为单位
  3.尽量要指定encoding参数(如果不指定则会采用当前计算机默认编码)
  
b 二进制模式
	rb\wb\ab
  1.该模式可以操作任意类型文件
  2.读写都是以bytes类型为单位
  3.千万不要指定encoding参数(如果指定了会直接报错)
  
ps:在python中bytes类型等同于二进制数据
"""
机器硬盘存储数据的原理
	写数据类似于刻字 该数据其实叫复杂
		1.覆盖原来的数据重新刻
		2.换个位置重新刻 原来的位置删掉
	
	删数据:艳照门事件(当前人修电脑之前是删了的)
		简单的删除数据相当于把硬盘某块空间状态改变了 数据其实还在
		只有当写入新的数据时候才有可能被覆盖掉
ps:如何确保自己的硬盘数据不会被泄露  先格式化 然后找无效的数据下载满之后再删除 就算回复那也是无效的数据 徒劳无或
"""
张一蛋			山东    179    49    12344234523
李二蛋     河北    163    57    13913453521
王全蛋     山西    153    62    18651433422
with open(r'c.txt', 'r+', encoding='utf8') as f:
    f.seek(9)
    f.write('<妇女主任>')
# 强调:
# 1、硬盘空间是无法修改的,硬盘中数据的更新都是用新内容覆盖旧内容
# 2、内存中的数据是可以修改的
# 修改文件内容的方式1>>>:覆盖写
# with open(r'b.txt', 'r', encoding='utf8') as f:
#     data = f.read()
# with open(r'b.txt', 'w', encoding='utf8') as f:
#     f.write(data.replace('jason', 'tony'))
# 修改文件内容的方式2>>>:备份写
import os
with open('b.txt', 'r', encoding='utf-8') as read_f, open('b.txt.swap', 'w', encoding='utf-8') as write_f:
    for line in read_f:
        write_f.write(line.replace('tony', 'jasonNB'))
os.remove(r'b.txt')
os.rename(r'b.txt.swap', r'b.txt')
1.文本模式下read括号内可以写数字意思是读取几个字符
	f.read(8)			jason说你好
2.二进制模式下read括号内可以写数字意思是读取几个字节
	f.read(8)     jason说
seek()  控制光标移动
	第一个参数是位移量
  	字节数
  第二个参数是模式
  	0:t和b都可以用
      	基于文件开头移动多少字节
    1:只能用于b模式
      	基于光标当前位置移动字节
    2:只能用于b模式
      	基于文件末尾移动多少字节
        
光标的移动其实也很少见 但是也有应用场景>>>:监控文件内容是否有新增
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号