[TOC]
## 文件初識
` `使用python來讀寫文件是非常簡單的操作. 我們使用open()函數來打開一個文件, 獲取到文
件句柄. 然后通過文件句柄就可以進行各種各樣的操作了. 根據打開方式的不同能夠執行的操
作也會有相應的差異.
打開文件的方式: r, w, a, r+, w+, a+, rb, wb, ab, r+b, w+b, a+b 默認使用的是r(只讀)模式
## 只讀模式打開文件(r,rb)
```
f = open("在線女郎",mode="r", encoding="utf-8")
content = f.read()
print(content)
f.close()
```

運行結果

` `需要注意encoding表示編碼集. 根據文件的實際保存編碼進行獲取數據, 對于我們而言. 更 多的是utf-8.
` `rb. 讀取出來的數據是bytes類型, 在rb模式下. 不能選擇encoding字符集.
~~~
f = open("在線女郎",mode="rb")
content = f.read()
print(content)
f.close()
~~~
` `運行結果
```
b'\xe5\x9f\xba\xe5\xb0\xbc\xe6\x8a\x8a\xe8\xaf\xb6\xe6\xaf\x94\n\xe8\x89\xbe\xe6\xac\xa7\xe5\xa5\xa5\xe5\xb0\x94\xe8\x81\x8a\xe5\x90\xa7\n\xe6\x96\xaf\xe5\xa1\x94\xe6\x8a\xa4\xe5\x8f\x91'
```
` `rb的作用: 在讀取非文本文件的時候. 比如讀取MP3. 圖像. 視頻等信息的時候就需要用到
` `rb. 因為這種數據是沒辦法直接顯示出來的. 在后面我們文件上傳下載的時候還會用到. 還有. 我們看的直播. 實際上都是這種數據.
```
1. 絕對路徑:從磁盤根目錄開始一直到文件名.
2. 相對路徑:同一個文件夾下的文件. 相對于當前這個程序所在的文件夾而言. 如果在同
一個文件夾中. 則相對路徑就是這個文件名. 如果在上一層文件夾. 則要../
```
*****
讀取文件的方法:
1. read() 將文件中的內容全部讀取出來. 弊端: 占內存. 如果文件過大.容易導致內存崩潰。
2. read(n) 讀取n個字符. 需要注意的是. 如果再次讀取. 那么會在當前位置繼續去讀而不 是從頭讀, 如果使用的是rb模式. 則讀取出來的是n個字節。
3. readline() 一次讀取一行數據, 注意: readline()結尾, 注意每次讀取出來的數據都會有一 個\\n 所以呢. 需要我們使用strip()方法來去掉\\n或者空格。
4. readlines()將每一行形成一個元素, 放到一個列表中. 將所有的內容都讀取出來. 所以 也是. 容易出現內存崩潰的問題.不推薦使用。
```
f = open("../def/哇擦.txt", mode="r", encoding="utf-8")
lst = f.readlines()
print(lst)
for line in lst:
print(line.strip())
```
5.循環讀取. 這種方式是組好的. 每次讀取一行內容.不會產生內存溢出的問題.
**注意: 讀取完的文件句柄一定要關閉 f.close()**
## 寫模式(w, wb)
` `寫的時候注意. 如果沒有文件. 則會創建文件, 如果文件存在. 則將原件中原來的內容刪除, 再 寫入新內容。
~~~
f = open("在線女郎", mode="w", encoding="utf-8")
f.write("比基尼大波浪")
f.flush() # 刷新. 養成好習慣
f.close()
~~~

` `wb模式下. 可以不指定打開文件的編碼. 但是在寫文件的時候必須將字符串轉化成utf-8的 bytes數據。
~~~
f = open("在線女郎", mode="wb")
f.write("金毛獅王".encode("utf-8"))
f.flush()
f.close()
~~~
## 追加模式(a, ab)
` `在追加模式下. 我們寫入的內容會追加在文件的結尾.
~~~
f = open("在線女郎", mode="a", encoding="utf-8")
f.write("肖四爺")
f.flush()
f.close()
~~~

## 讀寫模式(r+, r+b)
` `對于讀寫模式. 必須是先讀. 因為默認光標是在開頭的. 準備讀取的. 當讀完了之后再進行 寫入. 我們以后使用頻率最?的模式就是r+。
~~~
f = open("在線女郎", mode="r+", encoding="utf-8")
content = f.read()
f.write("植物精華")
print(content)
f.flush()
f.close()
~~~

**r+模式下. 必須是先讀取. 然后再寫入**
## 寫讀(w+, w+b)
` `先將所有的內容清空. 然后寫入. 最后讀取. 但是讀取的內容是空的, 不常用。
~~~
f = open("在線女郎", mode="w+", encoding="utf-8")
f.write("哈哈")
content = f.read()
print(content)
f.flush()
f.close()
~~~
**w+ 模式下, 一開始讀取不到數據. 然后寫的時候再將原來 的內容清空. 所以, 很少用.**
## 光標位置移動
* seek(n) 光標移動到n位置, 注意, 移動的單位是byte. 所以如果是UTF-8的中文部分要 是3的倍數. 通常我們使用seek都是移動到開頭或者結尾. 移動到開頭:seek(0)
移動到結尾: seek(0,2) seek的第二個參數表示的是從哪個位置進行偏移, 默認是0, 表 示開頭, 1表示當前位置, 2表示結尾。
```
f = open("小娃娃", mode="r+", encoding="utf-8")
f.seek(0) # 光標移動到開頭
content = f.read() # 讀取內容, 此時光標移動到結尾
print(content)
f.seek(0) # 再次將光標移動到開頭
f.seek(0, 2) # 將光標移動到結尾
content2 = f.read() # 讀取內容. 什么都沒有
print(content2)
f.seek(0) # 移動到開頭
f.write("張國榮") # 寫入信息. 此時光標在9 中文3 * 3個 = 9
f.flush()
f.close()
```
* tell() 使用tell()可以幫我們獲取到當前光標在什么位置
```
f = open("小娃娃", mode="r+", encoding="utf-8")
f.seek(0) # 光標移動到開頭
content = f.read() # 讀取內容, 此時光標移動到結尾
print(content)
f.seek(0) # 再次將光標移動到開頭
f.seek(0, 2) # 將光標移動到結尾
content2 = f.read() # 讀取內容. 什么都沒有
print(content2)
f.seek(0) # 移動到開頭
f.write("張國榮") # 寫入信息. 此時光標在9 中文3 * 3個 = 9
print(f.tell()) # 光標位置9
f.flush()
f.close()
```
* truncate() 截斷文件
```
f = open("小娃娃", mode="w", encoding="utf-8")
f.write("哈哈") # 寫入兩個字符
f.seek(3) # 光標移動到3, 也就是兩個字中間
f.truncate() # 刪掉光標后面的所有內容
f.close()
f = open("小娃娃", mode="r+", encoding="utf-8")
content = f.read(3) # 讀取12個字符
f.seek(4)
print(f.tell())
f.truncate() # 后面的所有內容全部都刪掉
# print(content)
f.flush()
f.close()
```
- 第1章 電腦操作篇
- 1.1 電腦高清壁紙下載地址
- 1.2 音樂外鏈在線獲取
- 1.3 markdown,js等表格生成神器
- 1.4 在線使用文檔,表格,演示文檔
- 1.5 開發在線工具
- 1.5.1 toolbox
- 1.5.2 菜鳥工具
- 1.6 vs code遠程調試
- 1.7 windows批處理命令
- 1.8 windows安裝cygwin運行linux指令
- 1.9 windows下某些程序運行慢
- 1.10 win下為鼠標右鍵添加新項目
- 1.11 win上自己常用的開發軟件
- 1.12 win下vscode配置
- 第2章 Electron 用前端技術開發跨平臺桌面應用
- 2.1 介紹
- 2.2 入門鏈接地址
- 2.3 cnpm使用
- 第3章 Git使用
- 3.1 介紹
- 3.2 同步GitHub的基本使用方法
- 3.3 同步Gitee的基本使用方法
- 3.4 獲取當前git分支
- 3.5 LF和CRLF換行的轉換
- 第4章 HTML,CSS,JS
- 4.1 HTML速查列表
- 第5章 python使用
- 5.1 文件操作
- 5.2 一句話建立服務器
- 第6章 我的女友叫Linux
- 6.1 使用shell寫俄羅斯方塊
- 6.2 那些有趣的shell
- 6.2.1 40個有趣的LInux命令行
- 6.2.2 命令行下的網易云搜索播放器
- 6.2.3 從網上獲取一條語句并顯示
- 6.3 在linux上寫匯編
- 6.4 在linux終端連接另一臺linux
- 6.5 makefile文件的編寫
- 6.6 deepin掛載遠程文件夾到本地文件夾
- 6.7 本地lnux和遠程linux進行文件拷貝
- 6.8 超好用的linux下的ssh管理工具(electerm)
- 6.9 那些不重要的技巧
- 6.10 linux文件加密
- 6.11 論文畫圖軟件gnuplot
- 6.12 自定義mrun命令用于執行當前路徑下的run文件
- 6.13 fish shell后臺運行程序
- 第7章 在線工具收集
- 7.1 各種編程語言的在線編輯運行
- 7.2 html js 在線嘗試
- 第8章 搭建自己的私有云盤
- 第9章 linux下的一些軟件
- 9.1 remarkable--markdown文件輕量編輯器
- 9.2 gnuplot畫圖軟件
- 9.3 Graphviz繪圖(流程圖,狀態圖)
- 第10章 TCL腳本編程
- 10.1 基礎教程
- 10.2 在tcl腳本文件其他tcl腳本文件運行
- 10.3 在tcl腳本文件中調用bash/fish
- 10.4 TCL培訓教程
- 10.5 tcl腳本參數傳遞
- 第11章 看云的使用
- 11.1 markdown添加公式
- 11.2 看云在linux本地編輯腳本
- 第12章 Go語言在linux下的使用
- 12.1 簡介
- 12.2 調用自己的包
- 12.3 Go語言學習的資料
- 12.4 golang使用flag完成命令行解析
- 12.5 Golang文件操作大全
- 12.5.1 創建空文件
- 12.5.2 Truncate文件
- 12.5.3 得到文件信息
- 12.5.4 重命名和移動
- 12.5.5 刪除文件
- 12.5.6 打開和關閉文件
- 12.5.7 檢查文件是否存在
- 12.5.8 檢查讀寫權限
- 12.5.9 改變權限、擁有者、時間戳
- 12.5.10 硬鏈接和軟鏈接
- 12.5.11 復制文件
- 12.5.12 跳轉到文件指定位置(Seek)
- 12.5.13 寫文件
- 12.5.14 快寫文件
- 12.5.15 使用緩存寫
- 12.5.16 讀取最多N個字節
- 12.5.17 文件追加內容
- 12.6 操作CSV文件
- 第13章 搜集資源的一些方法
- 13.1 電子書_電子課本
- 第14章 EndNote的使用
- 14.1 安裝
- 14.2 文件檢索