• 文件操作


    一.介绍:

    首先使用open()函数来打开一个文件,获取到文件句柄,通过文件句柄来进行操作.

    打开文件的方式:r,w,a,r+,w+,a+,rb,wb,ab,r+b,w+b,a+b 默认使用的是r模式  带b的模式就是讲字符转换成字节

    二.只读操作(r,rb)

    f = open('学习',mode='r',encoding='utf-8') 
    s = f.read() 
    f.close() #关闭句柄,不要忘记写
    print(s)

    注意:encoding表示编码集,根据文件的实际保存编码进行获取数据,对于我们更多的是使用utf-8

    rb.读取出来的数据是bytes类型,在rb模式下不能选择encoding字符集

    f = open('学习',mode='rb')
    s = f.read()
    f.close()
    print(s)  结果: b'pythonxe4xbdxa0xe5xa5xbd' 

    rb的作用:用于读取非文本类文件,如mp3,图像,视频等 上传下载的时候会用到

    绝对路径和相对路径:

    相对路径:相当于当前程序所在的文件夹,如果在同一文件夹中,相对路径就是这个文件名.如果在上一层文件夹,则要 ../ 返回上一层

    绝对路径:1.从磁盘根目录寻找,

         2.互联网上的一个绝对路径  

    注意:使用相对路径,我们把程序给别人使用的时候,直接把项目拷走就能运行,而如果用绝对路径,还需要拷贝外部的文件.

    读取文件的方法:

    1.read(n)读取n个字符,需要注意,如果再次读取,那么会在当前位置继续去读而不是从头读,如果使用的是rb模式,则读取出来的是n个字节

    f = open('学习',mode='r',encoding='utf-8')
    s= f.read(3)
    ss = f.read(3)
    f.close()
    print(s)
    print(ss)  #结果  pyt
    hon

    2.read()将文件中的内容全部读出来,弊端是占内存,如果文件过大容易内存奔溃

    所以在读取较大的文件时可以用readline():一次读取一行数据,注意,每次读取出来的数据都会有一个 所以,需要我们使用strip()方法取到 或空格

    f = open('学习',mode='r',encoding='utf-8')
    s = f.readline().strip()
    s1 = f.readline().strip()
    s2 = f.readline().strip()
    s3 = f.readline().strip()
    f.close()
    print(s)
    print(s1)
    print(s2)
    print(s3)

    3.:readlines()将每一行形成一个元素,放到一个列表里,将所有的内容都读取出来,所以也容易出现内存崩溃的现象,不推荐使用  拿到列表

    4.推荐循环读取.这种方式是组好的,每次读取一行内容,不会产生内存溢出的问题

    f = open('学习',mode='r',encoding='utf-8')
    for line in f:
        print(line.strip())

    三.写模式(w,wb)

    写的时候如果没有文件,则会创建文件,如果文件存在,则将原件中原来的内容删除,在写入新内容

    f =open('在学习',mode='w',encoding='utf-8')
    s = f.write('刘德华')
    f.flush() #刷新 养成好习惯
    f.close()

    wb模式下,可以不指定打开文件的编码,但是在写文件的时候必须将字符串转发成utf-8的bytes数据

    f = open('在学习',mode='wb')
    f.write('张学友'.encode('utf-8'))
    f.flush()
    f.close()

    四.追加(a,ab)

      在追加模式下,我们写入的内容会追加到文件的末尾

    f = open('学习',mode='a',encoding='utf-8')
    f.write('你好啊')
    f.flush()
    f.close()

    ab模式:

    f = open('学习',mode='ab')
    f.write('世界'.encode('utf-8'))
    f.flush()
    f.close()

    五.读写模式:(r+, r+b)

    对于读写模式,必须是先读,因为默认光标是在开头的,所以先读,读完之后光标移动到后边在写.若先写,就会从头写,将前面的内容覆盖.但是有个神坑:当光标在内容之间的时候,写默认光标从末尾开始写.

    f = open('学习',mode='r+',encoding='utf-8')
    s = f.read()
    f.write('努力学习')
    f.flush()
    f.close()
    print(s)

    六,写读(w+,w+b)

    先将所有的内容清空,然后写入,最后读取,但是读取的内容是空的

    七.追加读(a+)

    a+模式下,不论先读还是后读,都是读取不到数据的

    八.其他相关操作:

    1.seek(n)光标移动到n位置,注意,移动的单位是byte,所以如果是UTF-8的中文部分是3的倍数

    移动到开头 seek(0)

    移动到结尾seek(0,2)

    在当前位置seek(0,1)

    f = open("⼩小娃娃", mode="r+", encoding="utf-8")
    f.seek(0) # 光标移动到开头
    content = f.read() # 读取内容, 此时光标移动到结尾
    print(content)
    f.seek(0) # 再次将光标移动到开头
    f.seek(0, 2) # 将光标移动到结尾
    content2 = f.read() # 读取内容. 什什么都没有
    print(content2)
    f.seek(0) # 移动到开头
    f.write("张国荣") # 写⼊入信息. 此时光标在9 中⽂文3 * 3个 = 9
    f.flush()
    f.close()

    2.tell() 帮我们获取到当前光标在什么位置

    f = open("⼩小娃娃", mode="r+", encoding="utf-8")
    f.seek(0) # 光标移动到开头
    content = f.read() # 读取内容, 此时光标移动到结尾
    print(content)
    f.seek(0) # 再次将光标移动到开头
    f.seek(0, 2) # 将光标移动到结尾
    content2 = f.read() # 读取内容. 什什么都没有
    print(content2)
    f.seek(0) # 移动到开头
    f.write("张国荣") # 写⼊入信息. 此时光标在9 中⽂文3 * 3个 = 9
    print(f.tell()) # 光标位置9
    f.flush()
    f.close()

    truncate()截断文件

    f = open("⼩小娃娃", mode="w", encoding="utf-8")
    f.write("哈哈") # 写⼊入两个字符
    f.seek(3) # 光标移动到3, 也就是两个字中间
    f.truncate() # 删掉光标后⾯面的所有内容
    f.close()
    f = open("⼩小娃娃", mode="r+", encoding="utf-8")
    content = f.read(3) # 读取12个字符
    f.seek(4)
    print(f.tell())
    f.truncate() # 后⾯面的所有内容全部都删掉
    # print(content)
    f.flush()
    f.close()
    
    f = open("马大帅", mode="r+", encoding="utf-8")
    f.seek(12)
    # f.truncate()    #  truncate() 不给参数. 从文件头.截取到当前位置
    f.truncate(15)  # truncate(参数) 给了参数. 从文件头截取到你给这个参数的位置
    f.flush()
    f.close()

    所以如果想做截断操作. 记住了了. 要先挪动光标. 挪动到你想要截断的位置. 然后再进行截断
    关于truncate(n), 如果给出了了n. 则从开头开头进⾏行行截断, 如果不给n, 则从当前位置截断. 后面
    的内容将会被删除

    九.

    f = open('学习',mode='r',encoding='UTF-8')
    print(f.readable()) #判断时候可读 True
    print(f.writable())#判断是否可写  False

    ps:strip() :去空格还可去换行 也可去制表符

    十,修改文件以及另一种打开文件的方式:

      文件修改.只能将文件中的内容读取到内存中,讲信息修改完毕,然后将源文件删除,将新文件的名字改成老文件的名字

  • 相关阅读:
    值得学习的东西
    【单调队列】转载
    dom基础3 — 简易版template.js
    js基础6 — 数组对象
    js基础6 — 字符串基本操作
    js基础5 — 将十六进制颜色转为rgba()
    js基础4 — 数组操作
    placeholer属性修改
    clipboard.js实现复制到剪切板
    JS 获取指定日期在当年的第几周
  • 原文地址:https://www.cnblogs.com/ITdong-1/p/9295977.html
Copyright © 2020-2023  润新知