• python学习之旅-08之文件操作


    一,文件操作的基本用法

    1,open表示打开一个文件

      f变量,操控hehe.txt文件句柄

      f = open('hehe.txt',mode = 'r',encoding = 'utf-8')

      #读取文件中的内容

      #read(n)读取n个字符

      conten = f.read(3)      #读取三个字符

      content = f.read()      #一次性全部读出来

      line = f.readline()      #读取一行数据

      print(line.strip())      #strip()去掉空白,空格  

      

      lst = f.readlines()      #一次性全部读取出来,返回的是列表

      print(lst) 

    2.路径问题

      两种:

      a. 绝对路径(当文件路径是固定的时候)

        从磁盘根目录下去找。Windows下用的是c,d,e,f    linux: /user/bin/xxx

      b.相对路径()

        相对路径相当于当前程序所在的文件夹

        ../  表示上一层文件夹

    3. 注意事项

      1)   等转义字符。有固定的含义的,出现在路径中就会造成麻烦,可多加.。

    推荐使用r

      f = open(r'E:哈 hrhr.txt', mode = 'r',encoding = 'utf-8')   #路径前面加上r,意为静止路径中的转义

      print(f.read())

      2) f = open("hehe", mode="r", encoding="utf-8")

        #正常情况下不能用

        f.read()

        f.readlines()    #直接用容易造成内存溢出

      3)必须要掌握的

        恩建句柄是一个可迭代对象

        f = open('hehe'.mode = 'r',encoding = 'utf-8')

        for line in f:#读取文件中的内容。一行一行的读取,每次读取的内容交给变量 line 

        print(line.strip())

      4) r:只读

       w:只写,注意open打开时会清空文件,文件不存在时会创建文件

       a:append 在文件尾部追加内容,文件不存在是同样可以创建文件

      5)with编写,就可以不用使用f.close

        with open('log',mode='r+',encoding= 'utf-8') as obj:

    二.文件操作  w  a

    1、 mode="w"     # 假如文件不存在时,w可以帮我们创建文件

      f = open("taibai", mode="w", encoding="utf-8")

      f.write("太白 ")

      f.write("很白 ")

      f.write("特别白 ")

      f.close()

    2、f = open("taihei", mode="a", encoding="utf-8")

      f.write("太黑了 ")

      f.write("很黑 ")

      f.write("特别黑 ")

      f.close()   

     

    3、文本文件的赋值

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

    三.文件操作之b  

      b- bytes   读取和写入的是字节,用来操作非文本文件(图片 音频 视频)

       rb   wb   ab

    # 需要掌握的:

    # 把胡一菲.jpg 从c盘复制到d盘,单纯的的从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。

    f1.close()

    f2.close()

    四.文件操作  +

    r+:读写   w+:写读    a+:追加写读           r+b,  w+b,a+b

    1.r+    

    # 正常点的,可用的-------先读取内容,后光标跳到最后再写

    f = open("person", mode="r+", encoding="utf-8")

    content = f.read()

    f.write("黄蓉")

    # 坑 : 不论你读取多少内容。再次写入的时候都是在末尾(手动调光标可选定写入位置)

    f = open("person", mode="r+", encoding="utf-8")

    info = f.read(3)

    f.write("辣眼睛")

    print(info)

    2、w+

    f = open("person", mode="w+", encoding = "utf-8")  # 先清空然后再操作

    f.write("你好,我叫巫妖王")

    content = f.read()    # 写入东西后,光标在末尾,读取不到内容

    print(content)

    f.close()

    3、a+ ,    #不论光标在何处,写入的时候都是在末尾

    f = open("person", mode="a+",encoding="utf-8")

    f.write("我叫李嘉诚")  # 默认写在末尾

    print(content)

     

    综上: r+ 、w+ 、a+ 都是后坑的地方,切记少用,注意神坑

    五、光标

    1、seek() 小试

    # 文本信息: 一起小试牛刀

    f.seek(3)  # 以字节为单位----移动三个字节

    f.read(3)  # 以字符为单位,读取三个字符  

    结果: 起小试牛刀

    2、seek() 的应用

    seek(参数1, 参数2)

    参数1:表示是偏移量,移动多少个字节单位

    参数2: 表示从什么位置进行偏移(0:开头  1:当前位置  2:末尾)

    # 把光标移动到文件开头:seek(0)  #参数2 不写默认为0

    # 把光标移动到末尾:  seek(0,2)

    print(f.read(2))   # 读取两个字符

    f.seek(0)  # 回到开头

    print(f.read(2))   # 读取两个字符

    3、tell()  # 返回当前光标位置

    info = f.read(3)

    print(info)

    print(f.tell())  # 获取光标位置

    4、truncate()  截断文件。慎用

  • 相关阅读:
    廖雪峰Java12maven基础-1maven入门-2依赖管理
    廖雪峰Java12maven基础-1maven入门-1maven介绍
    廖雪峰Java11多线程编程-4线程工具类-1ThreadLocal
    廖雪峰Java11多线程编程-3高级concurrent包-9Fork_Join
    廖雪峰Java11多线程编程-3高级concurrent包-8CompletableFuture
    廖雪峰Java11多线程编程-3高级concurrent包-7Future
    modelsim remote
    单台电脑上启动多个Modelsim图形环境窗口的简单办法(windows)
    用ModelSim仿真SDRAM操作
    通过文件读写方式实现Matlab和Modelsim的联合仿真
  • 原文地址:https://www.cnblogs.com/dandanouni/p/12550603.html
Copyright © 2020-2023  润新知