zoukankan      html  css  js  c++  java
  • day008文件操作及应用

    1、文件的基本操作

    # open() 打开一个函数
    # f 变量,控制文件 .txt, 句柄
    1、只读操作(r, rb, r+)
    f = open("xxx.txt", mode = "r", encoding = "utf-8")
    f.read(n) # 读取n个字符
    f.read(3)
    content = f.read() # 一次性读取全部内容
    print(content)
    f.close() # 最后记得关闭

    *** rb. 读取出来的数据是bytes类型,在rb模式下,不能选择encoding字符集
    f = open("xxx.txt", mode = "rb") # rb模式,不能用encoding
    content = f.read()
    print(content) # 输出的是字节
    f.read(n) # 返回的是字节
    f.close()

    *** 单独读取一行数据
    f = open("xxx.txt", mode = "r", encoding = "utf-8"
    line = f.readline() # 读取一行数据 在遍历的时候,如果遍历前出现了这一行,那么这一行将不会被遍历
    print(line.strip()) # strip() 去掉空白,空格,

    lis = f.readlines() # 一次性读出来,返回的是列表
    print(lis) # 正常情况下不用

    *** 文件的句柄是一个可迭代对象
    for line in f: # 遍历文件的所有内容
    print(line.strip())
    *** r+ 必须先读后写
    # 正常的
    # f = open("person", mode="r+", encoding="utf-8")
    # content = f.read()
    # f.write("黄蓉")
    # print(content)

    2、 w 只写
    * 先清空里面内容,再写入
    # f = open("taibai", mode="w", encoding="utf-8") # w可以帮我们创建文件
    # f.write(" ")
    # # f.write("太白 ")
    # # f.write("很白 ")
    # # f.write("特别白 ")
    # f.close()

    # 文本文件的复制
    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()
    *** wb 适用于所有文件的复制(掌握)
    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()

    3、a 追加(无论光标在哪里,都是在末尾追加)

    4、坑
    1. r+ 无论读取了多少内容,再次写入的时候光标在末尾
    2. w+ 写完后,光标在末尾,这时读取,读不到任何数据
    3. a+ 不论光标在哪里,写入的时候在末尾

    2、路径(绝对路径和相对路径)
    1.绝对路径:从磁盘根目录开始一直到文件名
    日志一般路径都不变,可以使用绝对路径
    2.相对路径:从程序运行的文件夹找,如果在同一个文件夹下,则相对路径就是这个文件名,如果在上一次文件夹,则要../
    需要拷贝给其他人的,使用相对路径

    3、相关操作
    1.seek(n) 光标移动到n位置,
    注意,移动单位是byte,如果用utf-8的中文部分要是3的倍数
    # seek(参数1, 参数2)
    # 参数1表示的是偏移量,移动多少个单位
    # 参数2表示从什么位置进行偏移
    # 0: 开头
    # 1: 当前位置
    # 2: 末尾

    # 把光标移动到文件的开头: seek(0)
    # 把光标移动到末尾: seek(0, 2)
    2. # tell() 程序返回当前光标的位置
    # info = f.read(3)
    # print(info)
    # print(f.tell()) # 获取光标位置
    3.# truncate() 截断文件. 慎用
    4.# 尽量不要瞎测试, w, w+
    # 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()
    4、文件修改
    只能将文件的内容读取到内存,将信息修改完成后,再将源文件删除,将新文件改成老文件的名字
    fe:
    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("唐诗_副本", "唐诗") # 把副本改名成源文件

    5、文件操作应用
    f = open("水果.data", mode="r", encoding="utf-8")
    titles = f.readline().strip() # 读取第一行 id,name,price,num
    t_list = titles.split(",") # 【id,name,price,num】

    lst = []
    for line in f: # "1,苹果,500,60000" {id:1,name:liulian, num:xx, price:xxx}
    dic = {}
    ll = line.strip().split(",") # 将每一项归到一个列表中
    print(ll)
    for i in range(len(t_list)): # 循环表头,使表头的每一项与列表中的每一项对应形成键值对,一个种类放一个列表
    dic[t_list[i]] = ll[i]
    lst.append(dic)
    f.close()
    print(lst)






  • 相关阅读:
    Cocos2dx开发(3)——Cocos2dx打包成APK,ANT环境搭建
    Cocos2dx开发(2)——Win8.1下Cocod2dx 3.2环境搭建
    Cocos2dx开发(1)——Win8.1下 NDK r10 环境搭建
    设计模式备忘录(1):适配器模式、依赖注入依赖倒置、空对象模式
    使用latencytop深度了解你的系统的延迟(转)
    操作系统基础
    计算机基础
    说明exit()函数作用的程序
    变量的引用类型和非引用类型的区别
    二进制转16进制JAVA代码
  • 原文地址:https://www.cnblogs.com/yipianshuying/p/9857289.html
Copyright © 2011-2022 走看看