zoukankan      html  css  js  c++  java
  • 文件操作

    1.文件操作的模式

    1.1控制文件读写操作的模式 r模式的使用

    r(默认的):只读
    w:只写
    a:只追加写
    

    r只读模式使用:在文件不存在时则报错,文件存在文件内指针直接跳到文件开头

    #小练习:实现用户认证功能
    inp_name = 'han'
    inp_pwd = '123'
    
    with open('db.txt',mode='rt',encoding='utf-8') as f:
    	for line in f:
    		u,p =line.strip('\n').stript(':')
    		if inp_name ==u and inp_pwd ==p:
    			print('登录成功')
    			break
    		else:
    			print('用户名或密码错误') 
    

    1.2 w模式的使用

    w只写模式,在文件不存在的情况下会创建空文档,文件存在就会清空文件,文件指针跳到文件的开头
    with open('b.txt',mode='w',encoding='utf-8') as f:
    	f.write('你好\n')
    	f.write('我好\n')
    
    强调:
    1.在文件不关闭的情况下,连续的写入,后写的内容一定跟在前写内容的后面
    2.如果重新以w模式打开文件,则会清空文件内容
    

    1.3 a模式的使用

    a只追加模式,在文件不存在的时,会创建空文档,文件存在将文件指针直接移动到文件末尾
    

    w与a的异同: 相同点:在打开文件不关闭的情况下,连续的写入新的内容总在后面 不同点:以a模式重新打开时,不会清空原文件内容。指针也会移动到最末尾

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

    大前提:t,b模式均不能单独使用,必须与r/w/a之一结合使用
    t(默认):文本模式
    	1.读写文件都是以字符串为单位的
    	2.只能针对文本文件
    	3.必须指定encoding参数
    b:二进制模式
    	1.读写都是以bytes/二进制为单位
    	2.可以针对所有文件
    	3.一定不能指定encoding参数
    

    2.1 t模式的使用

    t模式:如果我们指定的文件打开模式为r/w/a,其实默认就是rt/wt/at
    强调:t模式只能用于操作文本文件,无论读写,都应该以字符串为单位,而存取硬盘本质都是二进制的形式,
    当指定t模式时,内部帮我们做了编码与解码
    
    

    2.2 b模式的使用

    b:读写都是以二进制为单位
    with open('1.mp4',mode='rb') as f:
    	data = f.read()
    	print(type(data))
    
    强调:
    1.在操作纯文本方面t模式帮我们省去了编码与解码的环节,b模式则需要手动编码与解码,所以此时t模式更方便
    2.针对非文本文件(如图片,视频,音频)只能使用b模式
    
    #做一个拷贝程序
    
    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:
    	for line in f1:
    		f2.write(line)
    
    

    3.操作文件的方法

    读操作
    f.read() 读取所有内容,执行完该操作后,文件指针会移动到文件末尾
    f.readline()  读取一行内容,光标会移动到第二行首部
    f.readlines()  读取每一行内容,存放于列表中
    
    #强调
    f.read()与f.readline()都是将内容一次性读入内存,如果内容过大会导致溢出,若还想将内容全读入内存,则必须分多次读入,有两种实现方式:
    方式一:
    with open('a.txt',mode='rt',encoding='utf-8') as f:
    	for line in f:
    		print(line)  同一时刻只读入一行内容到内存中
    
    方式二:
    with open('1.mp4',mode='rb') as f:
    	while True:
    		data=f.read(1024)
    		if len(data) == 0:
    			break
    		print(data)
    

    4.主动控制文件内指针移动

    f.seek(n,模式) n代表移动字节个数,模式分为0,1,2 f.seek(指针移动的字节数,模式控制) 0:默认的模式,该模式代表指针移动的字节数是以文件开头为参照的f.seek(3,0) 1:该模式代表指针移动的字节数以当前所在位置为参照 f.seek(20,1) 2:该模式代表指针移动的字节数以文件末尾的位置为参照f.seek(10,2) 强调:0模式可以在t和b模式下使用,而1和2只能在b模式下使用

    5.文件的修改

  • 相关阅读:
    UVA101 The Blocks Problem 题解
    洛谷P2790 ccj与zrz之积木问题 题解
    NOIp2018 TG day1 T2暨洛谷P5020 货币系统:题解
    网页学习:day1
    NOIP2018提高/普及成绩
    NOIP2018普及T4暨洛谷P5018 对称二叉树题解
    NOIP2018&2013提高组T1暨洛谷P5019 铺设道路
    比赛:小奔的方案 solution
    比赛:小奔的矩形solution
    比赛:小奔与不等四边形solution
  • 原文地址:https://www.cnblogs.com/xiaoxuanworking/p/14349729.html
Copyright © 2011-2022 走看看