zoukankan      html  css  js  c++  java
  • 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()  截断文件。慎用

  • 相关阅读:
    codeforces C. No to Palindromes!
    codeforces D. Pashmak and Parmida's problem
    codeforces C. Little Pony and Expected Maximum
    codeforces D. Count Good Substrings
    codeforces C. Jzzhu and Chocolate
    codeforces C. DZY Loves Sequences
    codeforces D. Multiplication Table
    codeforces C. Painting Fence
    hdu 5067 Harry And Dig Machine
    POJ 1159 Palindrome
  • 原文地址:https://www.cnblogs.com/dandanouni/p/12550603.html
Copyright © 2011-2022 走看看