zoukankan      html  css  js  c++  java
  • day9 文件的相关操作、文件的扩展模式、文件的相关函数

    # ### 文件的相关操作

    """
    fp = open("文件名",mode="模式",encoding="utf-8")
    fp -> 文件的io对象(文件的句柄)
    i => input 输入
    o => output 输出
    """

    一.文件的写入

    # 1.打开文件
    fp = open("ceshi1.txt",mode="w",encoding="utf-8")	# 把冰箱门打开
    
    # 2.写入内容
    fp.write("把大象塞进去")	# 把大象放进去
    
    # 3.关闭文件
    fp.close()	# 把冰箱门关上
    

    二.文件的读取

    # 1.打开文件
    fp = open("ceshi1.txt",mode="r",encoding="utf-8")	# 打开冰箱门
    
    # 2.读取内容
    res = fp.read()	# 把大象拿出来
     print(res)
     
     # 3.关闭文件
     fp.close()	# 把冰箱门关上
    

    三.字节流的转换

    """
    bytes:是用来传输或者存储的数据格式
    b'1234' b"abcd" b"我爱你" -> b开头的字节流,范围只能是ascii编码

    如果是中文使用 encode 和 decode 来进行转换
    # 将字符串和字节流(Bytes流)进行转换:
    #encode() 编码 将字符串转化为字节流(Bytes流)
    #decode() 解码 将Bytes流转化为字符串
    """

    a = b'1234'
     print(a,type(a))
     
     strvar = "我爱你"
     # encode 编码 -> 变成二进制字节流
     res = strvar.encode()
     print(res,type(res))
     
     # decode 解码 -> 二进制字节流恢复成原来的字符串
    res2 = res.decode("utf-8") 
    print(res2,type(res2))
    
    # len 可以计算字节个数
    num = len(res)
    print(num)	# 9
    
    # 一个中文占用3个字节,通过decode反解出爱这个字
    res3 = b"xe7x88xb1".decode("utf-8")
    print(res3)
    
    # 程序员的表白方式
    strvar = "我!是你一辈子也得不到的男人"
    strvar2 = strvar.encode()
    print(strvar2)
    

    四.存储二进制字节流

    """不需要指定encoding编码集,否则报错"""

    fp = open("ceshi2.txt",mode="wb")
    fp.write(strvar2)
    fp.close()
    

    五.读取二进制字节流

    fp = open("ceshi2.txt",mode="wb")
    res = fp.read()
    fp.close
    print(res)
    
    # 通过decode反解出字符串
    strvar = res.decode()
    print(strvar)
    

    六.复制图片
    """图片,音频,视频"""

    # 1.读取原图片所有的内容
    fp = open("集合2.png",mode="wb")
    res = fp.read()
    fp.close()
    
    # 2.把读取的内容存储到另外一个文件
    # fp = open("集合2.png",mode="utf-8")
    # 指定绝对路径(完整路径)
    fp = open(r"E:python31day8集合3.png",mode="utf-8")
    fp.write(res)
    fp.close()
    

    # ### 文件的扩展模式

    utf-8编码格式下 默认一个中文三个字节 一个英文或英文符号 占用一个字节)
      read() 功能:读取字符的个数(里面的参数代表字符个数)
      seek() 功能:调整指针的位置(里面的参数代表字节个数)
      tell() 功能:当前光标左侧所有的字节数(返回字节数)

    """
    seek(0) 直接把光标移动到文件开头
    seek(0,2) 直接把光标移到到文件末尾
    """

    一.文件的扩展模式

    # r+ 先读后写
    fp = open("ceshi3.txt",mode="r+),encoding="utf-8")
    # 先读
    res = fp.read()
    print(res)
    # 后写
    fp.write("1234")
    # 再读
    fp.seek(0)
    res = fp.read()
    print(res)
    fp.close()
    
    # r+ 先写后读
    fp = open("ceshi3.txt",mode="r+",encoding="utf-8")
    fp.seek(0,2)	# 调整光标位置在末尾
    fp.write("123")
    fp.seek(0)
    res = fp.read()
    print(res)
    fp.close()
    
    # w+ 可读可写
    fp = open("ceshi4.txt",mode="w+",encoding=("utf-8")
    fp.write("abc")
    fp.seek(0)
    res = fp.read()
    print(res)
    fp.close()
    
    # a+ 可读可写
    # 文件不存在时,默认创建新的文件
    fp = open("ceshi5.txt",mode="a+",encoding="utf-8")
    fp.write("123")
    fp.seek(0)
    res = fp.read()
    print(res)
    fp.close
    
    # a模式在写入内容时,会强制把光标移到最后
    fp.seek(1)
    fp.write("abc")
    fp.close()
    
    # 如果在r模式内,区别a模式
    fp = open("ceshi5.txt",mode="r+",encoding="utf-8")
    fp.seek(1)
    fp.write("abc")
    fp.close()
    

    二.read seek tell 三个函数的使用 

    fp = open("ceshi6.txt",mode="r+",encoding="utf-8")
    res = fp.read(3)
    print(res3)
    
    fp.seek(6)
    print(fp.read(1))
    
    # 计算文件指针左侧所有的字节数
    res = fp.tell()
    print(res)
    fp.close()
    
    # 注意点,seek移动中文字节的时候,有可能报错
    fp = open("ceshi6.txt",mode="r+",encoding="utf-8")
    fp.seek(2)
    res = fp.read()
    print(res)
    fp.close()
    
    # print("我",encode())
    # b'xe6x88x91'
    

    三.with语法的使用(close操作with语法可以自动实现)

    with open("集合.png",mode="rb") as fp:
    	res = fp.read()
    	
    with open("集合.png",mode="rb") as fp:
    	fp.write(res)
    	
    # 继续优话 合并with
    with open("集合.png",mode="rb") as fp1, open("集合.png",mode="wb") as fp2:
    	res = fp1.read()
    	fp2.write(res)
    

    # ### 文件的相关函数

    1.close 文件关闭的意义

    """
    刷新缓冲区 flush
    当文件关闭的时候自动刷新缓冲区
    当整个程序运行结束的时候自动刷新缓冲区
    当缓冲区写满了 会自动刷新缓冲区
    手动刷新缓冲区

    """

    fp = open("ceshi6.txt",mode="r+",encoding="utf-8")
    fp.write("zzz")
    # 手动把缓冲区里面的内容写入文件当中 fp.flush() while True: pass fp.close() 

    2.文件的相关函数 readable、、writable、 readline、readlines、writelines、truncate

    fp = open("ceshi6.txt",mode="a+",encoding="utf-8")
    # readable()	功能:判断文件对象是否可读
    res = fp.readable()
    print(res)
    # weitable()	功能:判断文件对象是否可写
    res = fp.writable()
    print(res)
    
    
    # redline()	功能:读取一行文件内容
    """
    参数 > 当前行字符总个数 => 以当前行读取
    参数 < 当前行字符总个数 => 以参数的大小来读取字符的个数
    
    默认readline读取一行
    """
    
    """
    with open("ceshi7.txt",mode="r+",encoding="utf-8") as fp:
    	# res =fp.readline(3000)
    	# print(res)
    	
    	# 文件对象fp也是一个可迭代对象
    	'''在遍历文件文件对象的时候,默认一次拿一行'''
    	for i in fp:
    		print(i)
    		
    # 读取所有内容
    with open("ceshi7.txt",mode="r+",encoding="utf-8") as fp:
    
    	#先读取一行
    	res = fp.readline()
    	#判断是不是空
    	while res:
    		print(res)
    		res = fp.readline()
    """
    
    # readlineS()	功能:将文件中的内容按照换行读取到列表中
    lst_new = []
    with open("ceshi7.txt",mode"r+",encoding="utf-8") as fp:
    	lst = fp.readlines()
    	# print(lst_new) # ['	窗前明月光
    ', '疑是鞋两双		
    ', '		举头王明月
    ', '	低头看裤裆']
    	for i in lst:
    		lst_new.append(i.strip())
    		
    print(lst_new)	# ['窗前明月光', '疑是鞋两双', '举头王明月', '低头看裤裆']
    
    #writelines()	功能:将内容是字符串的可迭代性数据写入文件中 参数:内容为字符串类型的可迭代数据
    """可迭代行数据(容器类型数据,range对象,迭代器)"""
    """
    lst = ["春眠不觉晓
    ,"处处蚊子咬
    ","夜来大狗熊
    ","一个也跑不了
    "]
    # lst = [1,2,3,4]	error
    with open("ceshi8.txt",mode="w",encoding="utf-8") as fp:
    	fp.writelines(lst)
    """	
    
    # truncate()	功能:把要截取的字符串提取出来,然后清空内容将提取的字符串重新写入文件中(字节)
    with open("ceshi8.txt",mode="r+",encoding="utf-8") as fp:
    	fp.truncate(3)
    	
    while " ":
    	print(123)
    

      

      

  • 相关阅读:
    jquery-ui Sortable拖拽排序,刷新后保持排序后的位置
    JQ动态获取URL参数
    JQ简单点赞功能
    Netty源码分析 (九)----- 拆包器的奥秘
    Netty源码分析 (八)----- write过程 源码分析
    Netty源码分析 (七)----- read过程 源码分析
    Netty源码分析 (六)----- 客户端接入accept过程
    Netty源码分析 (五)----- 数据如何在 pipeline 中流动
    Netty源码分析 (四)----- ChannelPipeline
    Netty源码分析 (三)----- 服务端启动源码分析
  • 原文地址:https://www.cnblogs.com/liya1014/p/13344399.html
Copyright © 2011-2022 走看看