## 概述
文件是计算机中由OS管理的具有名字的存储区域;
在linux系统上,文件被看作是**字节序列**;
**非序列化**的数据不能直接存储在文件系统的文件中。
![](http://images2015.cnblogs.com/blog/1114822/201702/1114822-20170228164022345-1278471804.png)
## 打开文件
### 语法格式
~~~
fd = open(filename [,mode=r [,bufsize]])
~~~
### 参数说明
**mode**
~~~
'r'代表输入打开文
'w'代表输出生成并打开文件
'a'代表在文尾追加内容而打开文件
在模式后附加`'+'`表示同时支持输入输出操作
在模式后附加`'b'`表示以二进制方式打开
~~~
**bufsize**
~~~
0表示无输出缓存
1表示缓冲一行数据
负数表示使用系统默认设置
正数表示指定缓冲空间大小(byte)
~~~
>[danger]r+: 从头读,从尾写
w+: 从头写,从写后的位置读,什么也读不到
a+: 从尾写,从写后的位置读,什么也读不到
---
## 文件对象的方法
~~~
next() # 取出下一行
fileno() # 文件描述符
read(size) # 从文件读多少个**字节**
readline() # 每次返回一行(包括行结束符'\n')
readlines() # 以`列表`形式返回所有行(包括行结束符'\n')
tell() # 返回`指针`在当前文件中的位置
seek(offset[, whence=0])
offset 偏移的字节数
0:从文件头开始偏移
1:从当前位置开始偏移
2:从文件尾部开始偏移
~~~
~~~
write(str) # 写入文件,写入的内容必须是字符串
writelines(sequence_of_strings) # 等价于为每个字符串调用一次write()函数
flush() # 将数据从缓冲区写入磁盘
truncate([size]) # 文件截取,默认到当前位置
name # 返回文件名称
closed # 文件状态 是否关闭
close() # 关闭文件
encoding # 编码格式,空为默认格式
mode # 文件打开模式
softspace # 字符串写入时是否有空格分隔, 0表示不使用空格隔离
~~~
---
## 使用文件
文件迭代器是最好的 **行** 读取工具,文件默认按行进行迭代
内容是字符串不是对象
文件可以缓冲的并且是可查找
---
## 文件持久存储
### 将对象转化的字符串存入文件中
需将对象转化为字符串才能存到文件中
```python
fd = open('fd.txt', 'w') #新建
fd.write('hello text file\n') #写入
fd.readline() # 返回字符串 #读取
```
### 用pickle在文件中存储并解析python对象
用pickle存储python原生对象
pickle模块能直接在文件中存储几乎任何python对象
#### pickle写入
```python
D = {'a': 1, 'b': 2} #字典
F = open('fd.pkl', 'wb') #打开文件
import pickle #导入模块
pickle.dump(D, F) #将D写入F
F.close() #关闭文件
```
#### pickle读取
```python
fd = open('fd.pkl', 'rb')
E = pickle.load(fd)
E
fd.close()
```
### 用struct文件中打包二进制数据的存储与解析
`struct`模块能构造并解析二进制数据,实际上是禁止转换工具。
> 2.7测试通过,3.0未通过
#### 写入
```python
F = open('data.bin', 'wb')
import struct
data = struct.pack('>i4sh', 7, 'spam', 8)
F.write(data)
F.close()
```
#### 读取
```python
F = open('data.bin', 'rb')
data = F.read()
value = struct.unpack('>i4sh', data)
value
```
----
### 文件上下文管理器
with open() as fd:
内置类型陷阱
1. 赋值生成引用,而不是拷贝
2. 重复能够增加层次深度
3. 留意循环数据结构
4. 不可变类型不可在原处改变
可以通过分片,合并来创建一个新对象
T = (1, 2, 3)
T = T[0:2] + (4,) ==> T = (1, 2, 4)
- 前言
- 环境搭建
- pypi
- 打包
- Python 2 和 Python 3 的版本之间差别
- 项目
- 第一部分
- 第1章 基础
- Python安装
- python代码文件类型
- python对象
- 核心数据类型
- 核心数据类型--整型和浮点型
- 核心数据类型--字符串
- str.format
- 核心数据类型--列表
- 核心数据类型--元组
- 核心数据类型--字典
- 核心数据类型--集合
- 核心数据类型--文件对象
- 调用bash
- 标准输入输出
- str-repr
- 字符编码
- 迭代器和生成器
- 第2章 语句和语法
- 赋值语句
- if语句
- while语句
- for语句
- assert
- 第3章 函数
- 函数作用域
- 工厂函数
- 内置函数
- 递归
- 嵌套作用域和lambda
- 参数传递
- 函数式编程
- property可写与可读
- 第5章 模块
- 模块导入
- 模块命名空间
- 相对导入和绝对导入
- 模块重载
- 在模块中隐藏数据
- 过渡性重载
- 第6章 类
- 面向对象还是面向过程?
- 构造函数 析构函数
- call
- 运算符重载
- str()
- 待定
- 即时生成属性
- 多态
- 线程和进程
- thread模块
- threading模块
- threading线程锁
- 糖果机
- multiprocessing
- 阻塞非阻塞同步异步
- 单线程和多线程对比
- 生产者消费者模型
- 第二部分
- 获取系统资源信息
- 获取进程所占的物理内存
- dmidecode获取系统信息
- 网络编程
- 网络基础
- python中的套接字
- socket模块
- 第三部分 高级功能
- 闭包入门
- 闭包的应用
- 装饰器入门
- 装饰器应用
- 第四部分 项目实战
- graphite
- 模块
- collections
- datetime
- Enum
- faker
- fabric
- fileinput
- fire
- fnmatch
- getpass
- glob
- hashlib
- heapq
- json模块
- log
- os
- Paramiko
- parser
- platform
- pyyaml
- Queue
- random
- re
- 特殊符号和字符
- re模块
- shelves
- subprocess
- time
- urllib_urllib2_requests
- urllib urllib2
- requests
- 标准模块ConfigParser
- 扩展模块Mysqldb
- 扩展模块dns
- 扩展模块request
- uuid
- cacheout 缓存库
- delorean 时间
- 附录
- 内置函数
- python实现各种排序算法
- 常见报错
- pymongo
- pyrocksdb
- 常用
- ERROR