文件读写

一. 基本概念

  • 文件 file:
  1. 文件是用于数据存储的单位;
  2. 文件通常用来长期存储数据;
  3. 文件中的数据是以字节为单位进行顺序存储的;
  • 文件的操作流程:
  1. 打开文件;
  2. 读写文件;
  3. 关闭文件
  • 备注:任何的操作系统,同一个应用程序同时打开文件的数量有最大数限制,所以在用完文件后需要关闭
  • 文件的打开函数:open(file, mode='rt') # 用于打开一个文件对象,如果打开文件失败,则会触发异常;
  • 文件的关闭方法:F.close()  # 关闭文件,释放系统资源
  • 文本文件操作模式
  1. 模式字符:'t' (默认);
  2. 默认文件中存储的数据为字符数据,以行为单位分隔,在python中内部统一用'\n'作为换行符进行分隔;
  3. 对文本文件的读写需要用字符串(str)进行读取和写入数据;
  4. 各操作系统的换行符:Linux: '\n',windows: '\r\n';
  5. 备注:在文本文件模式下,各操作系统的换行符在读入python内部时,换为字符'\n'
  • 文件的迭代读取:open函数返回的文件流对象是可迭代对象,而且是个迭代器:

       文件读写

  • 写文件文件模式:'w', 'x', 'a'
  • 二进制文件操作:默认文件中存储的都是以字节为单位的数据,通常有人为规则格式,需要以字节为单位进行读写

       文件读写

     (xxd 文件名 | head 以二进制形式查看文件前10行)

       文件读写

  • f.read()的返回类型:
  1. 对于文本模式('t')打开的文件,返回字符串(str);
  2. 对于二进制模式('b')打开的文件,返回字节串(bytes)
  • f.write(x):
  1. 对于文本模式,x必须为字符串;
  2. 对于二进制模式,x必须为字节串;

        文件读写

  • f.seek()方法:用来改变当前文件的读写位置
  1. f.seek(偏移量, 相对位置);
  2. 偏移量:大于0的数代表向文件尾方向移动;小于0的数代表向文件头方向移动;
  3. 相对位置:

            0 代表从文件头开始偏移
            1 代表从当前位置开始偏移
            2 代表从文件尾开始偏移            

  • f.tell()方法:返回当前文件读写位置
  • 小结:
  1. 二进制文件操作模式'b' :可以读取任意格式的文件,但需要去了解相应的文件格式,也可以是自己定义的格式;
  2. read: read, readline, readlines;
  3. write: write, writelines

        文件读写

        文件读写

        文件读写

  • 二进制文件通常才会用到seek和tell

       文件读写 

myfile.bin 文件内容如下:

       文件读写

二. 汉字编码

  • 汉字常用的2种编码方式
  1. 国标系列(windows常用):
    1. GB18030 (二字节或四字节编码,共27533个汉字)相比GBK多出的部分使用的是四字节编码;
    2. GBK(二字节编码,共21003个汉字);
    3. GB2312(二字节编码,共6763个汉字)
  2. 国际标准 (Linux,Mac OS X,IOS,Android等常用):
    1. UNICODE32(UNICODE16)<-----> UTF-8    
  • 说明:
  1. python3的字符串存储的是unicode编码,但要存储在外部(磁盘,网络等)的时候,需要encode编码;
  2. python 编码(encode)字符串:
    • 'gb2312'
    • 'gbk'
    • 'gb18030'
    • 'utf-8'
    • 'ascii'

     3. 编码注释:在python源文件第一行或第二行写入如下内容是告诉解释执行器,此文件的编码类型是什么,如:
              1. # -*- coding: gbk -*-      设置源文件编码格式为GBK
              2. # -*- coding: utf-8 -*-     设置源文件编码格式为utf-8(python3默认使用的编码方式为utf-8  )

         文件读写

三. 总结

  • 各类模式
符号 含义
't' 以文本模式打开,是默认的文件打开方式;
'b' 二进制模式打开;
‘r’ 以只读的形式打开,是默认的打开方式;
'w' 以写的方式打开,会删除文件中原有的内容;
'a' 以追加的方式打开文件,原有内容不会删除;
'x' 创建新文件,文件已存在时,将触发异常;
  • 文本文件操作模式:
  1. 默认文件中存储的数据为字符数据,以行为单位分隔,在python中内部统一用'\n'作为换行符进行分隔;
  2. 对文本文件的读写需要用字符串(str)进行读取和写入数据
  • 二进制文件操作模式:
  1. 默认文件中存储的都是以字节为单位的数据,通常有人为规则格式;
  2. 需要以字节为单位进行读写
  • open()函数:
  1. open(file, mode='rt') #用于打开一个文件对象,如果打开文件失败,则会触发OSError;
  2. open()函数返回一个表示文件的对象,可作为迭代器,结合next()函数使用,每次返回一行内容,停止迭代时触发StopIteration
  • 常用方法:
方法名 作用
read(size)

1.读取size个字符(缺省时读取全部内容)返回一个字符串;

2.每次读取时在上一次的位置继续向下读,到达文件末尾则返回空字符串;

3.二进制模式下,读取和返回的都是字节串

readline()

1.读取1行,返回一个字符串;

2.每次读取一行,到达文件末尾则返回空字符串;

3.二进制模式下,读取和返回的都是字节串

readlines()

1.每行内容作为一个字符串,返回一个列表;

2.二进制模式下,返回一个字节串列表
 

write(x)

1.对于文本模式,X必须为字符串;

2.对于二进制模式,x必须为字节串;

3.返回写入的字符数

writeslines(列表) 顺序写入列表内的每个元素