zoukankan      html  css  js  c++  java
  • Python 入门之 文件

    1、文件操作

    普通操作文件步骤: 找到文件位置 -> 双击打开 -> 进行一些操作 -> 关闭文件
    方法:
    r—read(读) w—write(写) a—追加

    rd--读字节 wd--清空写,写字节 ad --追加写(字节)

    r+ -- 读写 w+ -- 写读 a+ -- 追加读

    open() : 打开,open通过python控制操作系统进行打开文件

    f = open(file,mode,encoding)
    file: 文件的位置
    mode: 默认不写就是r
    encoding: 文件的编码
    f: 文件句柄

    file_open = open("t1","r",encoding="utf-8") //Open(“文件的路径”,”进行的操作”,”文件的编码形式”)

    文件只能读取一次

    (1)读操作

    <1> r -- 读

    f = open("D:Test_file1小姐姐电话号",mode="r",encoding="utf-8")
    print(f.read())                    # 全部读取
    print(f.read(3))                   # 按照字符读取
    print(f.readline())                # 默认尾部有一个
    
    print(f.readline().strip())        # 读取一行,将
    去除
    print(f.readlines())               #一行一行读取,全部存储在列表中
    

    路径:
    绝对路径:从磁盘(例如c盘)开始查找
    相对路径:相对于某个路径文件进行查找
    路径的转义:

    1."D:\Python_s25\day08\t1"
    2.r"D:Python_s25day08	1"        -- 推荐使用
    

    <2> rb -- 读字节

    f = open("timg.jpg",mode="rb")
    print(f.read())           # 全部读取
    print(f.read(3))          # 按照字节读取
    print(f.readline())       # 按照行进行读取
    print(f.readlines())      # 读取所有行
    

    r和 rb的区别:

    1.r需要指定encoding, rb不需要 (字节操作,不能指定encoding)
    2.r模式中的read(3) 按照字符读取, rb模式中的read(3) 按照字节读取

    read 和 readlines 如果文件较大时,会出现内存溢出
    解决方案:当文件较大时,使用for循环进行读取(只是展示了一下)

    f = open('t1',mode="r",encoding="utf-8")
    for i in f:   
        	print(i.strip())
    

    (2)写操作

    <1> w -- 清空写(写的是文本)

    先清空文件(在打开文件时进行清空)
    再写入内容

    注: 当模式为 w 和 a 时,有文件就用当前文件,没有文件就创建一个文件

    ff = open("a1",mode="w",encoding="utf-8")
    ff.write("123")                             # 写的内容必须是字符串
    ff = open("a1",mode="w",encoding="utf-8")
    ff.write("我是一个字符串串")                  # 写的内容必须是字符串
    ff = open("a1",mode="w",encoding="utf-8")
    ff.write("[1,2,3,4]
    ")                     # 写的内容必须是字符串
    ff.write('1111
    ')                          # 写的内容必须是字符串
    ff.write('2222
    ')                          # 写的内容必须是字符串
    

    <2> wb -- 清空写(写字节)

    f = open('timg.jpg',mode="rb")
    f1 = open("g1.jpg",mode="wb")
    content = f.read()
    f1.write(content)
    

    (3)追加操作

    <1> a -- 追加写(文本)

    f = open("b1",mode="a",encoding="utf-8")
    f.write("你好啊
    ")
    f.write("我好啊
    ")
    f.write("他好啊
    ")
    f.write("大家好啊
    ")
    

    <2> ab -- 追加写(字节)

    (4)+ 操作

    <1> r+ 读写(有点用)

    # 坑 -- 使用方式是错误
    f = open("b1",mode="r+",encoding="utf-8")
    f.write("今天是周一")                      # write是清空写
    print(f.read())
    
    # 正确的操作:
    f = open("b1",mode="r+",encoding="utf8")
    print(f.read())
    f.write("今天是周一")
    

    <2> w+ 写读(有点用)

    f = open("b1",mode="w+",encoding="utf-8")
    f.write("今天是周一")
    f.seek(0)  # 移动光标
    print(f.read())
    
    f = open("b1",mode="w+",encoding="utf-8")
    f.write("今天是周一")
    f.seek(0)  # 移动光标
    f.write("啊啊啊啊啊啊")
    f.seek(0)
    print(f.read())
    

    <3> a+ 追加读

    f = open("b1",mode="a+",encoding="utf-8")
    f.write("今天是周一")
    f.seek(0)  # 移动光标
    f.write("啊啊啊啊")
    print(f.read())
    

    (5)其他操作

    <1> 移动光标: seek()

    seek()        # 移动光标
    f.seek(0,0)   # 移动光标到文件的头部
    f.seek(0,1)   # 移动光标到当前位置
    f.seek(0,2)   # 移动光标到文件末尾
    f.seek(6)     # 移动6个字节。光标是按照字节移动
    
    f = open("a1","r",encoding="utf-8")
    print(f.read(5))
    f.seek(0,0)  # 移动光标到文件的头部
    f.seek(0,1)  # 移动光标到当前位置
    f.seek(0,2)  # 移动光标到文件末尾
    print(f.read())
    f = open("c1","r",encoding="gbk")
    f.seek(6)   # 光标是按照字节移动
    print(f.read(3))
    

    <2> 查看光标: tell()

    tell()                               #  查光标
    f = open("c1","r",encoding="gbk")
    print(f.read(3))
    print(f.tell())                      # 按照字节进行计算
    

    <2> 修改文件: import os # os是与操作系统交互的接口模块

    f = open('a2',"r",encoding="utf-8")
    f1 = open("a1","w",encoding="utf-8")
    for i in f:    
    	i = i.replace("日","天")    								
            f1.write(i)	
    f.close()
    f1.close()
    os.remove("a2")              # 删除不能找回
    os.rename("a1","a2")
    

    <3> With open

    自动关闭文件
    同一时间操作多个文件

    import os    # os是与操作系统交互的接口模块
    
    f = open('a2',"r",encoding="utf-8")
    f1 = open("a1","w",encoding="utf-8")
    i = f1.read().replace("天","日")    # 将文件中全部内容读取 容易导致内存溢出
    f1.write(i)
    f.close()
    f1.close()
    os.rename("a2","a3")
    os.rename("a1","a2")
    
    with open("a3","r",encoding="utf-8")as f,        				
    		open('a2',"r",encoding="utf-8")as f1:    
    	print(f.read())    
    	print(f1.read())
    

    2、文件操作的目的

    持久化:永久存储

  • 相关阅读:
    SQL SERVER 将表字段值0和1互转的几种方法
    JS 解决 IOS 中拍照图片预览旋转 90度 BUG
    Js利用Canvas实现图片压缩
    IIS 下调用证书出现异常解决方案 (C#)
    C# 如何防止重放攻击
    RSA,JAVA私钥加密,C#公钥解密
    C# 字符串按 ASCII码 排序,注意其中的小坑
    C# dynamic类型报错:“object”不包含“xxx”的定义
    Angularjs 实现移动端在线测评效果
    C# 利用VS自带的WSDL工具生成WebService服务类
  • 原文地址:https://www.cnblogs.com/caiyongliang/p/11428830.html
Copyright © 2011-2022 走看看