撩課-Python面試寶典-第九篇
阿新 • • 發佈:2019-01-12
一. Python程式中, 檔案的處理步驟是什麼?
- 開啟
open(“檔案”,“模式”)
-
讀寫
2.1 讀f.read(位元組數)
位元組數預設是檔案內容長度
下標會自動後移
f.readline([limit])
讀取一行資料
limit: 限制的最大位元組數
f.readlines()
會自動的將檔案按換行符進行處理
將處理好的每一行組成一個列表返回
for in
可以直接遍歷 f 本身
也可以遍歷行列表2.2 寫
f.write(“內容”)
返回值是寫入的位元組長度 -
關閉
f.close()
關閉檔案為什麼需要關閉?
開啟狀態, 會佔用系統資源
會把緩衝區內容清空到磁碟檔案中
二. 文字開啟時設定的模式有哪些? 分別代表什麼意思?
- 基礎模式
r
以只讀方式開啟檔案, 這是預設模式
檔案的指標將會放在檔案的開頭
注意: 檔案不存在, 會報錯
w
以只寫方式開啟檔案
檔案的指標將會放在檔案的開頭
所以, 寫入的新內容, 會覆蓋舊的內容
注意: 檔案不存在, 會自動建立一個新檔案
a
以追加方式(只寫)開啟檔案
檔案的指標將會放在檔案結尾
所以, 寫入的內容, 會新增到檔案末尾
注意:檔案不存在, 會自動建立一個新檔案
組合模式-增加b
rb
wb
ab以二進位制格式進行操作檔案讀寫
如果檔案是二進位制檔案, 則選擇此項
例如: 圖片, 視訊, 音訊 …
- 組合模式-增加+
r+
w+
a+
rb+
rw+
ra+
代表都是以 “讀寫模式” 進行開啟
其他特性基本和 + 前面的模式一致
但是關於部分操作, 有細節區別
三. os模組中提供的常用檔案操作?
- 模組
import os
- 資訊獲取操作
.closed: 返回true如果檔案已被關閉,否則返回false .name: 返回檔案的名稱
- 其他操作
3.1 重新命名 os.rename(‘old_name’, 'new_name') 3.2 刪除 os.remove('檔名') 3.3 建立資料夾 os.mkdir("資料夾名稱") 3.4 獲取當前目錄 os.getcwd() 3.5 改變預設目錄 os.chdir("目標目錄") 3.6 獲取目錄列表 os.listdir("./")
四. 程式碼實現: 大檔案拷貝操作
注意: 不能一次性讀取大檔案內容, 容易造成記憶體峰值
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()
五. 程式碼實現: 假設一個資料夾中有很多不同格式的檔案, 要求: 將不同格式的檔案, 劃分到不同格式的資料夾下;
例如: 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 根據這個索引位置, 當做起始位置, 來擷取後續的所有字串內容
extension = file_name[index + 1:]
print(extension)
# 3. 檢視一下, 是否存在同名的目錄
# 4. 如果不存在這樣的目錄 -> 直接建立一個這樣名稱的目錄
# 5, 目錄存在 -> 移動過去
if not os.path.exists(extension):
os.mkdir(extension)
shutil.move(file_name, extension)