• 初识文件操作


    万恶之源—文件操作
    一. 出识文件操作
    使用open()函数来打开一个文件,获取到文件句柄.然后通过文件句柄就可以进行各种各样的操作了,
    打开文件的方式: r, w, a, r+, w+, a+, rb, wb, ab, r+b, w+b, a+b默认使用的是r(只读)模式
    二. 只读操作(r.rb)
    1.只读操作(r.rb)
    f = open(‘课堂笔记.txt’, mode=”r”, encoding=”utf-8”)
    s = f.read()
    f.close()
    其中encoding表示编码集,根据文件的实际保存编码进行获取数据,对于我们而言,更多的utf-8.
    rb.读取出来的数据是bytes类型,因此在rb模式下,不能让选择encoding字符集.
    f = open(‘课堂笔记.txt’, mode=”rb”)
    s = f.read()
    print(a)
    f.close()
    执行结果显示的数据是bytes类型.
    rb的作用:在读取非文本文件的时候要使用rb,因为这种数据是没办法直接显示出来的.
    2.绝对路径和相对路径:
    绝对路径:从磁盘的根目录开始一直到文件名.还有互联网上的一个文件也是绝对路径.
    相对路径:同一个文件夹下的文件,相对于当前这个程序所在的文件夹而言,如果在同一个文件夹中,则相对路径就是这个文件名.如果在上一层文件夹,则要../(返回上一层)
    3.读取方法:
    read()  将文件中的内容全部读取出来.弊端:占内存.如果文件过大.容易导致内存崩溃.
    read(n) 读取n个字符. 需要注意的是.如果再次读取.那么会在当前的光标位置继续去读而不是从头读,如果使用的是rb模式.则读取出来的是n个字符.
    readline() 一次读取一行数据注意: readline()结尾, 注意每次读取出来的数据都会有一个
    readlines()将每一⾏形成一个元素, 放到一个列表中. 将所有的内容都读取出来. 所以也是容易出现内存崩溃的问题.不推荐使⽤用.
    循环读取. 这种⽅方式是组好的. 每次读取一行容.不会产生内存溢出的问题.
    f = open(‘课堂笔记.txt’, mode=”r”, encoding=”utf-8”)
    for line in f:
    print(line)
    切记读取完的文件句柄一定要关闭.  f.close()
    三. 写模式(w.wb)
    写的时候注意. 如果没有文件. 则会创建文件, 如果文件存在. 则将原件中原来的内容删除, 再写入新内容
    f = open("小娃娃", mode="w", encoding="utf-8")
    f.write("⾦毛狮王")
    f.flush()    # 刷新. 养成好习惯
    f.close()    # 关闭. 养成好习惯
    w模式下不能执行读操作.
    wb模式下,可以不指定打开文件的编码,但是在写文件的时候必须将字符串转化成utf-8的bytes数据.
    f = open("小娃娃", mode="wb")
    f.write("金毛狮王".encode("utf-8"))
    f.flush()
    f.close()
    四. 追加(a.ab)
    在追加模式下.我们写入的内容会追加在文件的结尾.
    ab模式下同理,只不过是换成了bytes.
    五. 读写模式(r+. r+b)
    对于读写模式,必须是先读,因为默认的光标的位置是在文件的开头准备读取的.读完了之后再进行写入.
    f = open("小娃娃", mode="r+", encoding="utf-8")
    content = f.read()
    f.write("麻花的最爱")
     print(content)
    f.flush()
    f.close()
    正常的读取之后, 写在结尾
    如果先执行写操作就是光标在文件开头位置直接写,就把开头的内容改写成了要追加的内容,然后在读取后面的内容.
    六. 写读(w+, w+b)   
    先将所有的内容清空. 然后写入. 最后读取. 但是读取的内容是空的, 不常⽤…………
    七.  追加读(a+)   
    a+模式下, 不论先读还是后读. 都是读取不到数据的.
    a+b模式下就是把字符换成了字节.
    八. 其他的相关操作
    1. seek(n)
    光标移动到n位置,  注意, 移动的单位是byte. 所以如果是UTF-8的中文部分要是3的倍数
    通常我们使用seek都是移动到开头或者结尾.        
    移动到开头: seek(0)       
    移动到结尾: seek(0,2) 
    seek的第二个参数表示的是从哪个位置进⾏偏移, 默认是0,  表示开头, 1表示当前位置, 2表示结尾
    2. tell()
    使⽤tell()可以帮我们获取到当前光标在什么位置

    补充知识点:
    readable()       判断文件是否可读
    writable()       判断文件是否可写.
    Readlines()      拿到的是列表,每一行后面跟着一个 (换行符)
    如果要去掉换行符可以用.end(‘’)或者是strip()
    Strip()不只是去掉空格和 (换行符),还可以去掉制表符 .
    truncate() 指的是从开始到光标当前位置之间的内容截取.后面的全部删除
    truncate(n) 给了参数,就是截取从开始到指定的光标位置.后面的内容全部删除.
     
  • 相关阅读:
    使用Spring的MailSender发送邮件
    使用Spring的MailSender发送邮件
    C# List源码分析(二)
    EasyUI闪屏,EasyUI页面加载提示:原理+代码+效果图
    EasyUI闪屏,EasyUI页面加载提示:原理+代码+效果图
    Android Studio快捷键指南(本文持续更新)
    EventBus3.0使用总结
    hihoCoder #1054 滑动解锁
    hihoCoder #1069 最近公共祖先·三
    hdu 4411 Arrest
  • 原文地址:https://www.cnblogs.com/kongjubeihou/p/9295271.html
Copyright © 2020-2023  润新知