1. 程式人生 > >撩課-Python面試寶典-第九篇

撩課-Python面試寶典-第九篇

一. Python程式中, 檔案的處理步驟是什麼?

  1. 開啟

open(“檔案”,“模式”)

  1. 讀寫
    2.1 讀

    f.read(位元組數)
    位元組數預設是檔案內容長度
    下標會自動後移
    f.readline([limit])
    讀取一行資料
    limit: 限制的最大位元組數
    f.readlines()
    會自動的將檔案按換行符進行處理
    將處理好的每一行組成一個列表返回
    for in
    可以直接遍歷 f 本身
    也可以遍歷行列表

    2.2 寫

    f.write(“內容”)
    返回值是寫入的位元組長度

  2. 關閉

f.close()
關閉檔案

為什麼需要關閉?
開啟狀態, 會佔用系統資源
會把緩衝區內容清空到磁碟檔案中

二. 文字開啟時設定的模式有哪些? 分別代表什麼意思?

  1. 基礎模式
    r
    以只讀方式開啟檔案, 這是預設模式
    檔案的指標將會放在檔案的開頭
    注意: 檔案不存在, 會報錯
    w
    以只寫方式開啟檔案
    檔案的指標將會放在檔案的開頭
    所以, 寫入的新內容, 會覆蓋舊的內容
    注意: 檔案不存在, 會自動建立一個新檔案
    a
    以追加方式(只寫)開啟檔案
    檔案的指標將會放在檔案結尾
    所以, 寫入的內容, 會新增到檔案末尾
    注意:檔案不存在, 會自動建立一個新檔案
  1. 組合模式-增加b
    rb
    wb
    ab

    以二進位制格式進行操作檔案讀寫
    如果檔案是二進位制檔案, 則選擇此項
    例如: 圖片, 視訊, 音訊 …

  1. 組合模式-增加+
    r+
    w+
    a+
    rb+
    rw+
    ra+
    代表都是以 “讀寫模式” 進行開啟
    其他特性基本和 + 前面的模式一致
    但是關於部分操作, 有細節區別

三. os模組中提供的常用檔案操作?

  1. 模組
	import os
  1. 資訊獲取操作
    .closed: 返回true如果檔案已被關閉,否則返回false
    .name: 返回檔案的名稱
    
  2. 其他操作
	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)

相關推薦

no