## 概述
文件是計算機中由OS管理的具有名字的存儲區域;
在linux系統上,文件被看作是**字節序列**;
**非序列化**的數據不能直接存儲在文件系統的文件中。

## 打開文件
### 語法格式
~~~
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