• 7.文件的基本操作


    文件的基本操作

    1.文件的打开模式

    w   write 写入模式:只能写入字符串和字节流      
    	文件不存在则创建文件,存在的话则打开清空内容,并且将文件指针放在文件的开头
    r   read  读取模式
    	文件不存在则报错! 存在的话则打开文件,并且将文件指针放在文件的开头
    a   append 追加模式
    	文件不存在则创建文件,存在的话则打开文件,并且将文件指针放在文件的末尾
    x   xor 异或模式(基本不用)
    	文件已存在则报错! 不存在的话则创建文件,将文件指针放在文件的开头
    #扩展模式 (配合打开模式的辅助模式,自己单独不能使用)
        +   plus   增强模式(可以让文件具有读写功能)       
        b   bytes  bytes模式(二进制字节流)    
    #模式一共16种
        w,w+,wb,wb+
        r,r+,rb,rb+
        a,a+,ab,ab+
        x,x+,xb,xb+      
    

    2.文件的写入读取操作

    格式:
        fp = open(文件名,模式,字符编码)#打开文件
        fp.read()	#读取文件
        fp.write()	#写入文件
        fp.close()	#关闭文件
    # 一.文件的写入操作
    fp = open("lianxi.txt",mode="w",encoding="utf-8") 
    fp.write("把大象塞进去") 
    fp.close() 
    # 二.文件的读取操作
    fp = open("lianxi.txt",mode="r",encoding="utf-8")
    res = fp.read()
    print(res)
    fp.close()    
    

    3.字节流

    字节流语法格式(前面加b) : b"123"
    二进制字节流的应用场景: 在数据传输或者在数据存储时,使用的一种数据格式;
    多个字符放在一起叫做字符串,多个字节放在一起叫做字节流
    # 1.将字符串和字节流(Bytes流)类型进行转换 (参数写成转化的字符编码格式)
    	"""
    	encode() 编码  将字符串转化为字节流(Bytes流)
    	decode() 解码  将Bytes流转化为字符串
    	"""
        strvar = b"123"
        print(strvar , type(strvar)) # b'123' <class 'bytes'>
    # 2. 中文不能在字符串前面加b,必须是ascii编码才能加:
    	#办法: 把中文变成字节流
    	# encode 编码
        strvar = "我爱你".encode("utf-8")
        print(strvar)
    	# decode 解码
        res = strvar.decode("utf-8")
        print(res)
    # 3.写入字节流
    	"""mode = wb 代表写入的是字节流 , 不要指定任何编码集 """
        fp = open("lianxi2",mode="wb")
        strvar = "爱上一匹野马,家里没有草原"
        fp.write(strvar.encode())#将字符串转化成字节流,默认utf-8编码
        fp.close()
    # 4.读取字节流
    	"""mode = rb 代表读取的是字节流 , 不要指定任何编码集 """
        fp = open("lianxi2",mode="rb")
        res = fp.read()
        fp.close()
        print(res)	#读取的都是二进制字节流
        print(res.decode())	#解码字节流
    # 5.复制图片:先读取字节流,再写入另一个文件中
    	# 打开原文件,读取其中的字节流
        fp = open("集合.png",mode="rb")
        res = fp.read()
        fp.close()
        print(res)
    	# 把这些字节流写入到另外文件中
        fp = open("集合2.gif",mode="wb")
        fp.write(res)
        fp.close()
    

    4.文件的扩展模式

    """
    utf-8编码格式下,默认一个中文三个字节,一个英文或字符占用一个字节
    read() :读取光标右边字符(参数)
             参数:根据文件打开模式而产生变化,如果带有b字节流模式,读取的是字节的个数,否则读取的是字符的个数
    seek() :调整指针的位置(里面的参数代表字节个数)
    		seek(0) 把光标移动到文件开头
            seek(0,2)把光标移动到文件末尾            
    tell() :当前光标左侧的所有字节数
    """
    # with ...as 语法,可以省略掉close操作
    # 1.r+先读后写
    with open("1.txt",mode="r+",encoding="utf-8") as fp:
        res=fp.read(2)   #先读,读完光标跑到文件末尾
        print(res)
        res=fp.tell()	#计算文件字节数
        print(res)
        fp.write("abc")	#写入内容,光标跑到文件末尾
        fp.seek(0)  #再读需要调整光标位置
        res=fp.read()
        print(res)
    # 2.a+和r+两个模式的区别
        """
        a+模式下:写入内容时,会强制把光标移动到文件的末尾(seek()移动光标位置也不行)
        r+模式下:写入内容时,会随着光标的位置改变而替换光标右边的字符
        """
    # 3.刷新缓冲区:flush
        """
        当文件关闭的时候自动刷新缓冲区;
        当整个程序运行结束时自动刷新缓冲区;
        当缓冲区写满时,会自动刷新缓冲区;
        手动刷新缓冲区:flush
        """    
    

    5.文件相关函数

    # 1.readable()    判断文件对象是否可读
    # 2.writable()    判断文件是否可写
    with open("1.txt",mode="r",encoding="utf-8")as fp:
        res=fp.readable()	#返回True
        print(res)
        res=fp.writable()	#返回False
        print(res)
    # fp对象本身可以遍历(迭代器)
    	"""遍历时,按照一行一行读取所有内容"""    
    # 3.readline() 	读取一行文件内容
    	# (1)读取读取文件所有行的数据:
    with open("1.txt",mode="r",encoding="utf-8")as fp:
        res=fp.readline()
        while res:
            print(res)
            res=fp.readline()    
    	# (2)readline(n) 读取一行中n个字符个数 
    # 4.readlines() :将文件中的内容按照换行读取到列表当中
    with open("1.txt",mode="r",encoding="utf-8")as fp:
        lst=fp.readlines()
        print(lst) 	 #列表的字符串中有没用的符号
        lstnew=[]		#创建新列表
        for i in lst:	#遍历文件列表
            res=i.strip()   	#去除杂质
            lstnew.append(res)	#追加到新列表中
        print(lstnew)
    # 5.writelines() 将元素是字符串的可迭代性数据写入文件中 
    lst=["11111","22222","33333","44444"]
    with open("2.txt",mode="w+",encoding="utf-8")as fp:
        fp.writelines(lst)  
        fp.seek(0)
        res=fp.read()   #写入的内容是连在一起的
        print(res)
        # 要使写入的内容各行显示,可以先在原字符串后加上换行符(
    )
        
    # 6.truncate() 将截取的字符串提取出来,然后清空内容,将提取的字符串重新写入文件中
    	'''参数是数字,截取的是字节'''
    
  • 相关阅读:
    替换gitlab自带的Nginx,并修改仓库存储路径
    linux 内网scp 无密码传输
    centos7 安装docker及Hyperf
    VMware 安装centos 7 及自动挂载共享文件夹
    基于 Thrift + Laravel RPC 调用实现
    PHP计算两个经纬度地点之间的距离
    sql server 2008安装过程中服务器配置出错
    SQL Server2008如何设置开启远程连接
    向上下左右不间断无缝滚动图片的效果(兼容火狐和IE)
    彻底解决Google浏览器CSS居中问题
  • 原文地址:https://www.cnblogs.com/jia-shu/p/14071372.html
Copyright © 2020-2023  润新知