zoukankan      html  css  js  c++  java
  • 8 文件操作

    文件操作
    一.路径
    1. 绝对路径(当文件路径是固定的时候)
    从磁盘根目录找文件。 windows下用的就是c,d,e,f, linux: userinxxxx
    2. 相对路径(用的多)
    相对路径相对于当前程序所在的文件夹
    ../ 表示上一层文件夹

    转义字符。 有固定的含义的。 推荐用r
    f = open(r"E:哈哈 老师.txt", mode="r", encoding="utf-8")


    二.文件读写取 "r" 只读 w只写
    open()出来的结果可以使用read或者write. 根据mode来看
    1.读 r
    方式一:f=open(文件名路径,mode="r",encoding="utf-8")
    f.read(3)
    f.close()
    方式二:with open(文件名路径,mode="r",encoding="utf-8") as f:
    f.read(3) 读3给字符
    1.f.readline() 读一行
    2.for line in f: #循环一行一行读 重点 文件句柄f 为可迭代对象
    print(line.strip())
    3.f.read() 全部读取出来
    4.f.readlines() 全部读取出来

    2.写 w 先清空里面的内容. 然后再写入
    f = open("taibai", mode="w", encoding="utf-8") # w可以帮我们创建文件
    f.write(写的内容)

    3.追加写入 a
    f = open("taihei", mode="a", encoding="utf-8")
    f.write("太黑 ")

    r+ 读写, w+ 写读, a+ 追加写读, r+b, w+b, a+b
    + 表示扩展
    4. 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)

    5 w+
    f = open("person", mode="w+", encoding="utf-8") # 先清空。 然后再操作
    f.write("你好。 我叫肿瘤君")
    content = f.read() # 写入东西之后。 光标在末尾。 读取不到内容的
    print(content)
    f.close()

    三.文件的复制
    1.文本文件的复制
    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()

    2.非文本文件复制
    b - bytes 读取和写入的是字节 , 用来操作非文本文件(图片, 音频, 视频)
    rb, wb, ab
    把胡一菲图片文件从c盘复制到d盘, 单纯的从bytes角度来复制的。适用于所有文件
    f1 = open(r"c:胡一菲.jpg", mode="rb")
    f2 = open(r"d:胡二非.jpg", mode="wb")
    for line in f1: # 分批量的读取内容
    f2.write(line)
    f1.close()
    f2.close()

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

    文件修改的步骤
    1. 从源文件中读取数据。
    2. 写入到副本文件中
    3. 删除源文件
    4. 把副本重命名成源文件
    import os
    os.remove()
    os.rename()

    例子
    import os #导入os模块
    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)
    os.remove("唐诗") # 删除源文件
    os.rename("唐诗_副本", "唐诗") # 把副本改名成源文件

    五. 相关操作
    1. seek()移动光标(重点)
    seek(0) 开头
    seek(0,2) 移动到末尾
    2. tell() 获取光标所在的位置
    3. truncate() 截断文件
    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))    # 读取两个字符
    
    print(info)
    
    # 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()
    View Code

     六.文件操作运用

    应用一:

    1,文件内容:每一行内容分别为商品名字,价钱,个数。

    apple 10 3

    tesla 100000 1

    mac 3000 2

    lenovo 30000 3

    chicken 10 3

    通过代码,将其构建成这种数据类型:[{'name':'apple','price':10,'amount':3},{'name':'tesla','price':1000000,'amount':1}......] 并计算出总价钱。

    li=[]
    with open("a.txt","r",encoding="utf-8") as f:
        for line in f:
            dic={}
            li2=line.strip().split(" ")
            dic["name"]=li2[0]
            dic["price"]=li2[1]
            dic["amount"]=li2[2]
            li.append(dic)
    print(li)
    sum=0
    for i in li:
        sum=sum+int(i['price'])
    print(sum)
    应用一

    应用二:

    序号     部门      人数      平均年龄      备注
    1       python    30         26         单身狗
    2       Linux     26         30         没对象
    3       运营部     20         24         女生多

    .......

    通过代码,将其构建成这种数据类型:
    [{'序号':'1','部门':Python,'人数':30,'平均年龄':26,'备注':'单身狗'},
    ......]

    #去""的函数
    li=[]
    def qu_kong(li):
        li2 = []
        for i in li:
            if i != "":
                li2.append(i)
        return li2
    with open("作业6","r",encoding="utf-8") as f:
        #让首行,先读取
        li2=qu_kong(f.readline().strip().split(" "))
        # 用循环打印首行之后的每一行
        for line in f:
            dic={}
            line=qu_kong(line.strip().split(" "))
            for i in range(len(li2)):
                dic[li2[i]]=line[i]
            li.append(dic)
    print(li)
    

      

  • 相关阅读:
    Oracle查询语句中指定索引时优化器及指定索引不好使的处理方法
    oracle 死锁处理
    ORACLE里锁的几种模式
    oracle rpad()函数
    Oracle JOB
    Oracle 函数取汉字的拼音首字母
    COM 组件注册方法
    oracle 创建一个用户,只能访问指定的对象
    SOAP和WSDL的一些必要知识
    【转】net.sf.json.JSONException: java.lang.reflect.InvocationTargetException
  • 原文地址:https://www.cnblogs.com/knighterrant/p/9856067.html
Copyright © 2011-2022 走看看