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)

相關推薦

-Python面試-

一. Python程式中, 檔案的處理步驟是什麼? 開啟 open(“檔案”,“模式”) 讀寫 2.1 讀 f.read(位元組數) 位元組數預設是檔案內容長度 下標會自動後移 f.readline([limit]) 讀取一行資料 limit: 限

03--Python面試-

一. 程式碼實現: 計算1到100之間, 所有的奇數之和 result = 0 for i in range(1, 101): result += i print(result) 二. 程式碼實現: 接收使用者輸入數字, 求出從0至這個數字的累加和; 例如: 使

05--Python面試-

一. 給定一個圓心和半徑, 以及一個點座標, 判定該點是否在圓內; 例如: 使用者輸入圓心: (1, 2) 半徑: 2.5 測試點為(2, 2) 結果: 判定測試點是在圓內 思路: 結合勾股定理, 計算測試點距離圓心的距離test_distance;

04--Python面試-

一. for迴圈和while迴圈中的else代表什麼意思? 當for迴圈和while迴圈順利的遍歷完成時, 就會執行else分支 如果迴圈過程中, 碰到continue, 只要沒有打斷迴圈, 就會繼續執行else 例如: for i in range(1, 11):

06--Python面試-

一. 函式的概念是什麼? 在Python中如何定義?使用場景是什麼? 概念 寫了一段程式碼實現了某個小功能; 然後把這些程式碼集中到一塊, 起一個名字; 下一次就可以根據這個名字再次使用這個程式碼塊, 這就是函式 定義 def 函式名稱(引

-Python面試-

一. 解釋下什麼是閉包? 有怎樣的場景作用? 概念 在函式巢狀的前提下 內層函式引用了外層函式的變數(包括引數) 外層函式, 又把 內層函式 當做返回值進行返回 這個內層函式+所引用的外層變數, 稱為 “閉包” 標準格式 def test1(a): b =

04--Java面試-

31.靜態變數和例項變數的區別? 靜態變數也叫類變數, 這種變數前加了static修飾符。 可以直接用類名呼叫, 也可以用物件呼叫, 而且所有物件的同一個類變數 都是共享同一塊記憶體空間。 例項變數也叫物件變數, 這種變數沒有加static修飾符。 只能通過物件呼叫, 而且所

03--Java面試-

21.final, finally, finalize的區別 1、final修飾符(關鍵字)。 被final修飾的類, 就意味著不能再派生出新的子類, 不能作為父類而被子類繼承。 因此一個類不能既被abstract宣告, 又被final宣告。將變數或方法宣告為final, 可以保證他們在

05--Java面試-

41.Iterator、ListIterator 和 Enumeration的區別? 迭代器是一種設計模式, 它是一個物件, 它可以遍歷並選擇序列中的物件, 而開發人員不需要了解 該序列的底層結構。 迭代器通常被稱為“輕量級”物件, 因為建立它的代價小。 Java中的Iterator功能

07--Java面試-

61.什麼是併發修改異常? 什麼是併發修改異常: 當我們在遍歷實現了collection介面 與iterator介面的集合時(List、Set、Map), 我們可以通過遍歷索引 也可以通過迭代器進行遍歷。 在我們使用迭代器進行遍歷集合的時候, 會獲取到當前集合的迭代物件。 在裡面有封裝

06--Java面試-

51.HashMap的實現原理 HashMap的主幹是一個Entry陣列。 Entry是HashMap的基本組成單元, 每一個Entry包含一個key-value鍵值對。 HashMap基於hashing原理, 我們通過put()和get()方法儲存和獲取物件。 當我們將鍵值對傳

10--Java面試-

81.Servlet的會話機制? HTTP 是一種無狀態協議, 這意味著每次客戶端檢索網頁時, 都要單獨開啟一個伺服器連線, 因此伺服器不會記錄下 先前客戶端請求的任何資訊。 它與FTP、Telnet等協議不同, FTP等協議可以記住使用者的連線資訊。 會話(Session)是指一個終

13--Java面試-十三

撩課Java+系統架構點選開始學習 96.JDBC操作資料庫的步驟 ? 1、載入資料庫驅動 2、建立並獲取資料庫連結 3、建立jdbc statement物件 4、設定sql語句 5、設定sql語句中的引數(使用preparedStatement) 6、通過statemen

19--Java面試-

126.Struts2中的攔截器有什麼用?列舉框架提供的攔截器名稱? 1)攔截器是struts2核心組成部分, 它提供了一種機制,使得開發者 可以定義一個特定的功能模組, 這個模組會在Action執行之前或者之後執行 也可以在Action執行之前阻止Action執行。 2)常用的

01--Python面試-第一

一. 儘可能詳細的描述出一個應用軟體, 比如QQ, 在計算機中執行時涉及的軟硬體, 以及說明我們程式設計的側重點? 電腦開機, 從硬碟中(外部儲存裝置)載入作業系統(系統軟體)到記憶體(內部儲存裝置), 並執行作業系統 下載QQ軟體(網路請求)到本地電腦磁碟中(

11--Java面試-十一

學習地址: 撩課-JavaWeb系列1之基礎語法-前端基礎 撩課-JavaWeb系列2之XML 撩課-JavaWeb系列3之MySQL 撩課-JavaWeb系列4之JDBC 撩課-JavaWeb系列5之web伺服器-idea 86.如何獲得高效的資料庫邏輯結構? 從關係資料庫的表中

12--Java面試-十二

學習地址: 撩課-JavaWeb系列1之基礎語法-前端基礎 撩課-JavaWeb系列2之XML 撩課-JavaWeb系列3之MySQL 撩課-JavaWeb系列4之JDBC 撩課-JavaWeb系列5之web伺服器-idea 91.如何提升資料查詢的效率? 1.首先檢查表的結構是否合

16--Java面試-十六

撩課Java+系統架構點選開始學習 111.什麼是樂觀鎖(Optimistic Locking)? 悲觀鎖,正如其名, 它指的是對資料被外界 包括本系統當前的其他事務, 以及來自外部系統的事務處理 修改持保守態度, 因此,在整個資料處理過程中, 將資料處於鎖定狀態。 悲觀鎖的實現,

20--Java面試-第二十

131.Spring是什麼? 他解決的是業務邏輯層和其他各層的鬆耦合問題, 因此它將面向介面的程式設計思想 貫穿整個系統應用。 Spring是一個輕量級的IoC和AOP容器框架。 目的是解決企業應用開發的複雜性, 使用基本的JavaBean來完成 以前只可能由EJB完成的事情, 並提

23--Java面試-第二十三

146、什麼是Spring MVC ?簡單介紹下你對springMVC的理解? Spring MVC是一個基於MVC架構的 用來簡化web應用程式開發的應用開發框架, 它是Spring的一個模組, 無需中間整合層來整合 , 它和Struts2一樣都屬於表現層的框架。 在web模型中, M