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)
    

      

      

  • 相关阅读:
    /etc/sysctl.conf 控制内核相关配置文件
    python 并发编程 非阻塞IO模型
    python 并发编程 多路复用IO模型
    python 并发编程 异步IO模型
    python 并发编程 阻塞IO模型
    python 并发编程 基于gevent模块 协程池 实现并发的套接字通信
    python 并发编程 基于gevent模块实现并发的套接字通信
    python 并发编程 io模型 目录
    python 并发编程 socket 服务端 客户端 阻塞io行为
    python 并发编程 IO模型介绍
  • 原文地址:https://www.cnblogs.com/liya1014/p/13344399.html
Copyright © 2011-2022 走看看