• (1)文件的写入和读取


    首先在python3中操作文件只有一种选择,那就是open()

    而在python2中则有两种方式:file()与open() 两者都能够打开文件,对文件进行操作,也具有相似的用法和参数,

    但是,这两种文件打开方式有本质的区别,file为文件类,用file()来打开文件,相当于这是在构造文件类,而用open()打开文件,是用python的内建函数来操作,我们一般使用open()打开文件进行操作,而用file当做一个类型,比如type(f) is file

    语句格式

    with open(filename,mode='r',encoding='utf-8') as file:  #通过关键词with 和open函数以指定模式和字符格式打开并赋值给一个变量

    with关键词    #会自动执行一个close()的动作,即程序结束自动关闭文件进行保存

    open()    #是一个打开函数,用来做文件打开动作

    filename    #是文件名或者文件路径

    mode     #是打开的模式

    encoding    #指定读取文件的模式   PS:文本文件打开时一定要指定字符串的打开模式

    as   #也是关键词

    file   #是一个变量

    打开文件的模式有

    (默认为文本模式,t模式):

    r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】

    w,只写模式【不可读;不存在则创建;存在则清空内容】

    a, 之追加写模式【不可读;不存在则创建;存在则只追加内容】

    PS:对于非文本文件,我们只能使用b模式,"b"表示以字节的方式操作(而所有文件也都是以字节的形式存储的,使用这种模式无需考虑文本文件的字符编码、图片文件的jgp格式、视频文件的avi格式)

    rb   #以bytes的模式只读打开

    wb  #以bytes的模式复写

    ab   #以bytes的模式追加

    注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码

     例:with open('e.txt',mode='wb') as f:

                  f.write('你好啊 '.encode('utf-8')   #这里在用b模式写入时,必须编码成指定的格式写入磁盘

    文件内的指针移动(就是在打开或者写入的时候指定在哪个位置打开或者写入)

    主动控制文件内指针的移动

    seek(参数1,参数2)   #如果用参数的值是2,则光标移动到指针末尾,这时候参数1要指定从末尾往前读多少个字节,则必须是  - number开始,而不能是正number

    参数1: 控制的移动的字节个数

    参数2: 控制参照的位置

    0(默认的):参照文件开头

    1:参照指针当前所在位置

    2:参照指针文件末尾

    PS:强调:只有0模式可以在普通模式下使用,1和2模式只能在b模式下使用

    例:with open('e.txt',mode='rb') as f:

                 f.seek(6,0)

                 f.read(3)

                 f.seek(3,1)

                 print(f.tell())

                 print(f.read().decode('utf-8'))

                 f.seek(-8,2)

                print(f.read().decode('utf-8'))

                f.seek(0,2)

                print(f.tell())

    了解部分

    "+" 表示可以同时读写某个文件

    r+, 读写【可读,可写】  #r模式的特性就是只读并不存在擦除或者覆盖的功能,那么读写模式就是在写入时候将内容添加到了文件的末尾

    w+,写读【可读,可写】 #w模式的特性就是先擦除在写入,所以使用w+模式打开的时候就是先把文件清空了,再写入新内容,只是给写入模式增加了一个读取的功能而已

    a+, 写读【可读,可写】 #a模式的特性就是追加,并不会像w模式这样擦除原内容,所以也就是给追加模式添加了一个读取模式

    x, 只写模式【不可读;不存在则创建,存在则报错】

    x+ ,写读【可读,可写】

    读写文件的一些操作
    f.read()   #读取所有内容,光标移动到文件末尾

    f.readline() #读取一行内容,光标移动到第二行首部

    f.readlines() #读取每一行内容,存放于列表中

    f.write('1111 222 ') #针对文本模式的写,需要自己写换行符

    f.write('1111 222 '.encode('utf-8')) #针对b模式的写,需要自己写换行符

    f.writelines(['333 ','444 '])   #文件模式

    f.writelines([bytes('333 ',encoding='utf-8'),'444 '.encode('utf-8')])   #b模式 

     f.readable()   #文件是否可读

    f.writable()   #文件是否可读

    f.closed  #文件是否关闭

    f.encoding   #如果文件打开模式为b,则没有该属性

    f.flush()   #立刻将文件内容从内存刷到硬盘 f.name

    关于read

    1. 文件打开方式为文本模式时,代表读取3个字符

    2. 文件打开方式为b模式时,代表读取3个字节

    其余的文件内光标移动都是以字节为单位如seek,tell,truncate

    PS:seek有三种移动方式0,1,2,其中1和2必须在b模式下进行,但无论哪种模式,都是以bytes为单位移动的

    PS:truncate是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate要在r+或a或a+等模式下测试效果

     

    seek有三种移动方式

    0,1,2,其中1和2必须在b模式下进行,但无论哪种模式,都是以bytes为单位移动的

    truncate是截断文件

    所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate要在r+或a或a+等模式下测试效果

  • 相关阅读:
    使用异或解题 —— 序列中仅出现一次的两个数
    使用异或解题 —— 序列中仅出现一次的两个数
    希尔排序
    java中接口的定义与实现
    erlang工作前新手学习指引路线
    NAT的全然分析及其UDP穿透的全然解决方式
    hibernate官方新手教程 (转载)
    git与svn的不同
    C#调用GDAL算法进度信息传递
    atitit. access token是什么??微信平台公众号开发access_token and Web session保持状态机制
  • 原文地址:https://www.cnblogs.com/shizhengquan/p/9887711.html
Copyright © 2020-2023  润新知