一. Python程序中, 文件的處理步驟是什么?
- 打開
open("文件"抑进,"模式")
-
讀寫
2.1 讀f.read(字節(jié)數(shù))
字節(jié)數(shù)默認是文件內容長度
下標會自動后移
f.readline([limit])
讀取一行數(shù)據(jù)
limit: 限制的最大字節(jié)數(shù)
f.readlines()
會自動的將文件按換行符進行處理
將處理好的每一行組成一個列表返回
for in
可以直接遍歷 f 本身
也可以遍歷行列表2.2 寫
f.write("內容")
返回值是寫入的字節(jié)長度 關閉
f.close()
關閉文件為什么需要關閉?
打開狀態(tài), 會占用系統(tǒng)資源
會把緩沖區(qū)內容清空到磁盤文件中
二. 文本打開時設置的模式有哪些? 分別代表什么意思?
- 基礎模式
r
以只讀方式打開文件, 這是默認模式
文件的指針將會放在文件的開頭
注意: 文件不存在, 會報錯
w
以只寫方式打開文件
文件的指針將會放在文件的開頭
所以, 寫入的新內容, 會覆蓋舊的內容
注意: 文件不存在, 會自動創(chuàng)建一個新文件
a
以追加方式(只寫)打開文件
文件的指針將會放在文件結尾
所以, 寫入的內容, 會新增到文件末尾
注意:文件不存在, 會自動創(chuàng)建一個新文件
組合模式-增加b
rb
wb
ab以二進制格式進行操作文件讀寫
如果文件是二進制文件, 則選擇此項
例如: 圖片, 視頻, 音頻 ...
- 組合模式-增加+
r+
w+
a+
rb+
rw+
ra+
代表都是以 "讀寫模式" 進行打開
其他特性基本和 + 前面的模式一致
但是關于部分操作, 有細節(jié)區(qū)別
三. os模塊中提供的常用文件操作?
-
模塊
import os -
信息獲取操作
.closed: 返回true如果文件已被關閉疆股,否則返回false
.name: 返回文件的名稱 -
其他操作
3.1 重命名
os.rename(‘old_name’, 'new_name')
3.2 刪除
os.remove('文件名')
3.3 創(chuàng)建文件夾
os.mkdir("文件夾名稱")
3.4 獲取當前目錄
os.getcwd()
3.5 改變默認目錄
os.chdir("目標目錄")
3.6 獲取目錄列表
os.listdir("./")
四. 代碼實現(xiàn): 大文件拷貝操作
注意: 不能一次性讀取大文件內容, 容易造成內存峰值
import os
os.chdir("files")
# 1. 只讀模式, 打開要復制的文件
# 追加模式, 打開副本文件
source_file = open("d.txt", "r", encoding="utf-8")
dst_file = open("d_bat.txt", "a", encoding="utf-8")
# 2. 從源文件中讀取內容
# 寫入到目標文件中,
# 錯誤寫法: 針對于大文件, 不應一次性讀取全部內容
# # content = source_file.read()
# # dst_file.write(content)
while True:
content = source_file.read(1024)
if len(content) == 0:
break
print("----", content)
dst_file.write(content)
# 3. 關閉源文件和目標文件
source_file.close()
dst_file.close()
五. 代碼實現(xiàn): 假設一個文件夾中有很多不同格式的文件, 要求: 將不同格式的文件, 劃分到不同格式的文件夾下;
例如: a.png b.txt c.avi d.png
劃分后:
png文件夾: a.png d.png
txt文件夾: b.txt
avi文件夾: c.avi
import os
import shutil
# 目標路徑
path = "files2"
if not os.path.exists(path):
exit()
os.chdir(path)
file_list = os.listdir("./")
# print(file_list)
# 1. 遍歷所有的文件(名稱)
for file_name in file_list:
# print(file_name)
# 2. 分解文件的后綴名
# 2.1 獲取最后一個.的索引位置 xx.oo.txt
index = file_name.rfind(".")
if index == -1:
continue
# print(index)
# 2.2 根據(jù)這個索引位置, 當做起始位置, 來截取后續(xù)的所有字符串內容
extension = file_name[index + 1:]
print(extension)
# 3. 查看一下, 是否存在同名的目錄
# 4. 如果不存在這樣的目錄 -> 直接創(chuàng)建一個這樣名稱的目錄
# 5, 目錄存在 -> 移動過去
if not os.path.exists(extension):
os.mkdir(extension)
shutil.move(file_name, extension)