python核心数据类型 -- 文件对象

概括

文件是计算机中由OS管理的具有名字的存储区域;
在linux系统上,文件被看作是字节序列;
非序列化的数据不能直接存储在文件系统的文件中。

打开文件

open(filename [,mode=r [,bufsize]])
mode
'r'代表输入打开文
'w'代表输出生成并打开文件
'a'代表在文尾追加内容而打开文件
在模式后附加'+'表示同时支持输入输出操作
在模式后附加'b'表示以二进制方式打开
bufsize
0表示无输出缓存
1表示缓冲一行数据
负数表示使用系统默认设置
正数表示指定缓冲空间大小(byte)

文件对象的方法

next() 取出下一行
fileno() 文件描述符
read(size) 从文件读多少个字节
readline() 每次返回一行(包括行结束符'\n')
readlines() 以列表形式返回所有行(包括行结束符'\n')
tell() 返回指针在当前文件中的位置
seek(offset[, whence=0])
0:从文件头开始偏移
1:从当前位置开始偏移
2:从文件尾部开始偏移
write(str) 写入文件
writelines(sequence_of_strings) 等价于为每个字符串调用一次write()函数
flush() 将数据从缓冲区写入磁盘
truncate([size]) 文件截取,默认到当前位置
name() 返回文件名称
closed() 文件状态 是否关闭
encoding() 编码格式,空为默认格式
mode() 文件打开模式
softspace() 字符串写入时是否有空格分隔, 0表示不使用空格隔离

使用文件

文件迭代器是最好的读取工具
内容是字符串不是对象
文件缓冲的并且是可查找的

文件持久存储

1 将对象转化的字符串存入文件中

需将对象转化为字符串才能存到文件中

fd = open('fd.txt', 'w')      #新建
fd.write('hello text file\n') #写入
fd.readline()                 # 返回字符串 #读取

2 用pickle在文件中存储并解析python对象

用pickle存储python原生对象
pickle模块能直接在文件中存储几乎任何python对象
pickle写入

D = {'a': 1, 'b': 2}       #字典
F = open('fd.pkl', 'wb')   #打开文件
import pickle              #导入模块
pickle.dump(D, F)          #将D写入F
F.close()                  #关闭文件

pickle读取

fd = open('fd.pkl', 'rb')
E = pickle.load(fd)
E
fd.close()

3 用struct文件中打包二进制数据的存储与解析

struct模块能构造并解析二进制数据,实际上是禁止转换工具。
2.7测试通过,3.0未通过
写入

F = open('data.bin', 'wb')
import struct
data = struct.pack('>i4sh', 7, 'spam', 8)
F.write(data)
F.close()

读取

F = open('data.bin', 'rb')
data = F.read()
value = struct.unpack('>i4sh', data)
value

4 文件上下文管理器

with open() as fd:
内置类型陷阱

  1. 赋值生成引用,而不是拷贝
  2. 重复能够增加层次深度
  3. 留意循环数据结构
  4. 不可变类型不可在原处改变
    可以通过分片,合并来创建一个新对象
    T = (1, 2, 3)
    T = T[0:2] + (4,) ==> T = (1, 2, 4)
posted @ 2017-02-28 17:11  hiavatar  阅读(228)  评论(0编辑  收藏  举报