zoukankan      html  css  js  c++  java
  • python学习第八天


    打开一个文件的操作:
    f = open(文件名,mode="r",encoding="utf-8")
    f --> 变量,为操控文件的句柄

    文件操作的相关模式Mode
    文本文件:
    r: 只读
    w: 只写
    a: 追加
    r+: 读写
    w+: 写读
    a+: 追加写读

    非文本文件: 其中 b 表示读取和写书的是字节
    rb
    wb
    ab
    r+b
    w+b
    a+b



    文本文件的读写

    读:
    f = open(文件名,mode="r",encoding="utf-8")
    # 读取文中内容
    content1 = f.read(n) # 读取 n 个字符
    content2 = f.read() # 全部读取
    content3 = f.readline # 读取一行
    lst = f.readlines() # 全部读取,返回列表

    写:
    f = open(文件名,mode="w",encoding="utf-8") # w可以帮助我们创建文件夹
    f.write(内容)
    f.close

    追加写:
    f = open(文件名,mode="a",encoding="utf-8")
    f.write(内容)
    f.close


    文件的复制: (重点)
    1.文本文件的复制:
    f1 = open(文件名,mode="r",encoding="utf-8")
    f2 = open(文件名,mode="w",encoding="utf-8")
    for line in f1:
    f2.write(line)
    f1.close
    f2.close
    2.非文本文件的复制:
    f1 = open(文件名,mode="r",encoding="utf-8")
    f2 = open(文件名,mode="w",encoding="utf-8")
    for line in f1:
    f2.write(line)
    f1.close
    f2.close


    文件路径的选择:
    1.绝对路径:
    从磁盘根目录下寻找文件
    Windows c,d,e,f
    linux userin***
    2.相对路径:
    相对于当前程序所在文件夹
    ../ 表示上一层文件夹


    需要注意的几个点:

    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()


    光标:
    .seek(参数1, 参数2) # 移动光标
    参数1表示的是偏移量,移动多少个单位
    参数2表示从什么位置进行偏移
    0: 开头
    1: 当前位置
    2: 末尾
    把光标移动到文件的开头: seek(0)
    把光标移动到末尾: seek(0, 2)

    .tell() 程序返回当前光标的位置
    info = f.read(3)
    print(info)
    print(f.tell()) # 获取光标位置

    .truncate() 截断文件. 慎用
    尽量不要瞎测试, 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()


    文件修改: (重点)
    import os # 导入 os 模块
    imoort 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(old,new)
    f2.write(line)
    time.sleep(5)
    os.remve(文件名) # 删除源文件
    time.sleep(5)
    os.remove(文件名_副本,文件名) # 把副本改名成源文件


    编号,名称,价格,数量,仓库,phone
    1,榴莲,500,60000,1号仓库,10010
    2,苹果,700,70000,2号仓库,10086
    1,榴莲,500,60000,1号仓库,155
    2,苹果,700,70000,2号仓库,166

    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(",")
    for i in range(len(t_list)):
    dic[t_list[i]] = ll[i]
    lst.append(dic)
    f.close()
    print(lst)



    1. 文件操作 open() 文件句柄
    open()打开一个文件, 获取的是文件句柄
    read()
    readline()
    readlines()
    write()

    for line in f: 遍历文件中的内容

    路径的问题:
    1. 绝对路径
    从磁盘根目录寻找
    2. 相对路径
    从当前程序运行的文件夹内寻找
    2. 文件操作的相关模式Mode
    r: 只读
    w: 只写
    a: 追加
    r+:
    w+:
    a+:

    非文本文件
    rb
    wb
    ab

    r+b
    w+b
    a+b

    3. 相关操作
    1. seek()移动光标(重点)
    seek(0) 开头
    seek(0,2) 移动到末尾
    2. tell() 获取光标所在的位置
    3. truncate() 截断文件

    4. 文件修改
    with open(xxx) as 句柄,
    open(xxxxx)as xxx
    不用手动关闭文件句柄

    文件修改的步骤
    1. 从源文件中读取数据。
    2. 写入到副本文件中
    3. 删除源文件
    4. 把副本重命名成源文件
    import os
    os.remove()
    os.rename()
  • 相关阅读:
    Annotation Type ManyToMany->>>>>Oracle
    windows 控制台默认为UTF-8显示的方法
    springboot读取配置文件
    Spring Boot配置文件放在jar外部
    Vue自定义过滤器
    vue中limitBy,filterBy,orderBy的用法
    track-by的使用
    Vue的computed属性
    vue实现百度下拉框
    Cas服务器以及客户端搭建
  • 原文地址:https://www.cnblogs.com/EuanXu/p/9858199.html
Copyright © 2011-2022 走看看