• Day-08 文件操作


    一、文件操作
      open()文件句柄
      open()打开一个文件,获取的是文件句柄
    f = open("胡辣汤.txt", mode="r", encoding="utf-8")
    读取文件中的内容,f 变量,操控 胡辣汤.txt 文件的句柄
    read(n)  #读取n个字符
    content = f.read(3)
    content = f.read() #一次性全部读取出来
    line = f.readline() #读取一行数据
    print(line.strip()) #strip()去掉空白,空格 	 
    
    print(line, end="") #也是去掉空白,空格 	 
    
    lst = f.readlines() #一次性全部读取出来,返回的是列表
    print(lst)
      read和readlines 正常情况下不会用到

      文件句柄是一个可迭代的对象
    #必须掌握
    f = open("胡辣汤", mode="r", encoding="utf-8")
    for line in f:   #读取文件中的内容。 一行一行的读取。每次读取的内容交给前面的变量
        print(line, end="")
    
    
    二、路径问题
      1、绝对路径(当文件路径是固定的时候)
      从磁盘根目录找文件。 Windows下用的是c, d, e,f Linux:userinxxxx
      2、相对路径(用的多)
      相对路径相当于当前程序所在的文件夹
      ../ 表示上一层文件夹
      注意: 转移字符,有固定的含义的。推荐在路径前面加r
    f = open(r'E:哈哈	
    护士模特少妇.txt', mode='r', encoding='utf-8')
    print(f.read())
    三、文件操作的相关模式
      1、mode
        mode: r(只读), w(只写), a(追加写入)
       当mode="w"时每open一次,就会清空一次文件(慎用)
    f = open(r"taibai", mode="w", encoding="utf-8") #可以帮我们创建文件
    f.write("太白")
    f.write("很白")
    f.close()
    
    f = open(r"taihei", mode="a", encoding="utf-8")
    f.write("太黑
    ")
    f.write("很黑
    ")
    f.close()
        mode: rb(只读), wb(只写), ab(追加写入)   b  -bytes 读取和写入的都是字节,用来操作非文本文件(图片、音频、视频)
    f1 = open(r"c:胡一菲.jpg", mode="rb")
    f2 = open(r"d:胡一菲.jpg", mode="wb")
    
    for line in f1:  #分批量读取内容
       f2.write(line)  #open()出来的结果可以使用read()或者write, 根据mode来看
    f1.close()
    f2.close()
        mode: r+(读写), w+(写读), a+(追加写读) #同理 r+b,w+b,a+b
    r+,
    正常的
    f = open("person", mode="r+", encoding="utf-8")
    content = f.read()
    f.write("黄蓉")
    print(content)
    
    错误的示范
    f = open("person", mode="r+", encoding="utf-8")
    f.write("杨千桦") # 默认如果直接写入的话。 在开头写入。 覆盖开头的内容
    content = f.read()
    print(content)
    
    r+
    坑: 不论你读取多少内容。再次写入的时候都是在末尾
    f = open("person", mode="r+", encoding="utf-8")
    info = f.read(3)
    f.write("胡辣汤")
    print(info)
    
    
    w+
    f = open("person", mode="w+", encoding="utf-8") # 先清空。 然后再操作
    f.write("你好。 我叫肿瘤君")
    content = f.read() # 写入东西之后。 光标在末尾。 读取不到内容的
    print(content)
    f.close()
    
    
    a+, 不论光标在何处 写入的时候都是在末尾
    f = open("person", mode="a+", encoding="utf-8")
    f.write("我叫李嘉诚") # 默认写在末尾
    content = f.read()
    print(content)
    f.close()
      2、文件复制
    f1 = open(r"c:日记本.txt", mode="r", encoding="utf-8")
    f2 = open(r"d:日记本.txt", mode="w", encoding="utf-8")
    for line in f1:  #从f1中读取数据
        f2.write(line)    #写入到f2中
    f1.close()
    f2.close()
    
    
    四、相关操作
    f = open("person", mode="r", encoding="utf-8")
    info = f.read(3)  #读取三个字符
    #seek()移动光标
    f.seek(3)
    info = f.read(3)
      seek(参数1, 参数2)
      参数1表示的是偏移量,移动多少个单位
      参数2表示从什么位置进行偏移
      0: 开头
      1: 当前位置
      2: 末尾

      把光标移动到文件的开头:seek(0)
      把光标移动到末尾:seek(0, 2)
    print(f.read(2))  #读取两个字符。
    f.seek(0)
    print(f.read(2))  #读取两个字符,和上次读取的相同
    
    tell() 程序返回当前光标的位置
    info = f.read(3)
    print(info)
    print(f.tell())  #获取光标位置
      truncate()  截取文件,慎用
      尽量不要瞎测试 w, w+, w+b,truncate()
    f = open(r"C:Program Files (x86)TencentQQBinQQScLauncher.exe", mode="r+", encoding="utf-8")
    f.seek(5) # 光标移动到5
    f.truncate() # 默认从开头截取到光标位置
    # f.truncate(3) # 从头截取到3
    f.close()

       QQ就GG了

    五、文件修改
    import os  # 导入os模块
    
    import time  # 时间模块
    
    # 优点:不用关闭句柄, 自动关闭连接
    with open("唐诗", mode="r", encoding="utf-8") as f1, 
            open("唐诗_副本", mode="w", encoding="utf-8") as f2:
        for line in f1:
            line = line.replace("善良", "sb")
            f2.write(line)
    
    time.sleep(5)
    os.remove("唐诗")  # 删除源文件
    time.sleep(5)
    os.rename("唐诗_副本", "唐诗")  # 把副本改名成源文件
    
    
    
     
  • 相关阅读:
    1014 Waiting in Line (30)(30 point(s))
    1013 Battle Over Cities (25)(25 point(s))
    1012 The Best Rank (25)(25 point(s))
    1011 World Cup Betting (20)(20 point(s))
    1010 Radix (25)(25 point(s))
    1009 Product of Polynomials (25)(25 point(s))
    1008 Elevator (20)(20 point(s))
    1007 Maximum Subsequence Sum (25)(25 point(s))
    1006 Sign In and Sign Out (25)(25 point(s))
    1005 Spell It Right (20)(20 point(s))
  • 原文地址:https://www.cnblogs.com/minusone/p/9857359.html
Copyright © 2020-2023  润新知