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)






  • 相关阅读:
    geoserver发布地图服务WMTS
    geoserver发布地图服务WMS
    geoserver安装部署步骤
    arcgis api 3.x for js 入门开发系列十四最近设施点路径分析(附源码下载)
    arcgis api 3.x for js 入门开发系列十三地图最短路径分析(附源码下载)
    cesium 之自定义气泡窗口 infoWindow 后续优化篇(附源码下载)
    arcgis api 3.x for js 入门开发系列十二地图打印GP服务(附源码下载)
    arcgis api 3.x for js 入门开发系列十一地图统计图(附源码下载)
    arcgis api 3.x for js 入门开发系列十叠加 SHP 图层(附源码下载)
    arcgis api 3.x for js入门开发系列九热力图效果(附源码下载)
  • 原文地址:https://www.cnblogs.com/yipianshuying/p/9857289.html
Copyright © 2011-2022 走看看