小白學Python,操作文件和文件夾

目錄

前言

一、操作文件路徑

1.獲取當前路徑

2.創建文件夾

(1)mkdir()函數

(2)makedirs() 函數

3.拼接路徑

4.跳轉路徑

5.判斷相對路徑和絕對路徑

6.獲取文件路徑和文件名

?二、操作文件和文件夾

1.查詢文件大小

2.刪除文件和文件夾

3.重命名文件或文件夾

4.復制文件

5.獲取文件夾中的全部文件名

6.判斷文件和文件夾


前言

Python標準庫提供了os庫來管理操作系統相關功能,無須下載、安裝,os庫包含豐富的操作文件的方法,可以通過import os導入庫之后使用dir(os)查詢獲取。


一、操作文件路徑

1.獲取當前路徑

os庫中的getcwd()函數可用于獲取當前代碼所在文件夾的絕對路徑(不包含代碼文件名)。

示例代碼:

import os
print(os.getcwd())

代碼執行結果:

E:\書代碼\第9章

2.創建文件夾

os庫中有兩種用于創建文件夾的函數,分別為mkdir()函數和makedirs()函數。

(1)mkdir()函數

在os庫中使用mkdir(路徑)函數可以實現在路徑中創建一個新的文件夾。 示例代碼:

import os 02 os.mkdir(r'E:\書代碼\第9章\數據1')

注意,必須保證“E:\書代碼\第9章”這個路徑是正確的,否則會無法創建新文件夾。例如將以上代碼第2行中的路徑修改為“E:\書代碼1”,由于并不存在“書代碼1”這個文件夾,因此無法在“書代碼1”文件夾中創建新的文件夾,執行代碼后將輸出報錯信息。


(2)makedirs() 函數

在os庫中makedirs(路徑)函數是根據參數來遞歸創建文件夾,遞歸表示根據路徑創建包含的全部文件夾。 示例代碼:

import os
os.makedirs(r'E:\書代碼1\數據1\內容b')

第2行代碼使用makedirs()函數創建了文件夾,由于E盤下并沒有文件夾“書代碼1”,因此代碼執行之后會在E盤中連續創建3個文件夾,其中“書代碼1”文件夾包含“數據1”文件夾,“數據1”文件夾包含“內容b”文件夾。

因此mkdir()函數和makedirs()函數的區別在于是否可以遞歸創建文件夾。

示例代碼(批量創建200個文件夾):

import os
for i in range(1, 201):file_name = '文件夾' + str(i)file_path = os.getcwd() + '\數據1\' + file_nameos.mkdir(file_path)

3.拼接路徑

使用os.path.join()方法可以實現將參數拼接為目錄路徑,從而方便且快速地獲取文件地址。

示例代碼:

import os
dir_new = os.path.join(os.getcwd(), '數據2', '內容c')
print(dir_new, type(dir_new))

第2行代碼中的os.getcwd()函數用于獲取當前代碼所在文件夾的路徑,os.path.join()方法將當前路徑、'數據2'和'內容c'以路徑的形式進行拼接(無須考慮構成路徑的轉義字符等問題)。

代碼執行結果:

 E:\書代碼\第9章\數據2\內容c <class 'str'>

4.跳轉路徑

如果需要在程序中實現從當前代碼所在文件夾路徑跳轉到其他路徑,可以使用os庫中的chdir(路徑)函數,但要注意路徑必須是已經存在的,否則運行代碼后會出現報錯。

示例代碼:

import os
print(os.getcwd())
os.chdir('E:\書代碼\第9章\數據2')
print(os.getcwd())

第3行代碼使用os.chdir()將當前工作路徑修改為“E:\書代碼\第9章\數據1”,即改變了當前工作路徑的唯一性。修改當前工作路徑是為了便于后期可以使用相對路徑操作新路徑下的文件。

代碼執行結果:

E:\書代碼\第9章
E:\書代碼\第9章\數據1

5.判斷相對路徑和絕對路徑

使用os.path.isabs(path)方法可以判斷當前路徑是相對路徑還是絕對路徑。

示例代碼:

import os
a = os.path.isabs('數據2\內容c')
b = os.path.isabs('E:\書代碼')
print(a, b)

第2行和第3行代碼分別判斷路徑是絕對路徑還是相對路徑,如果是絕對路徑將返回True,如果是相對路徑將返回False。

代碼執行結果:

False True

6.獲取文件路徑和文件名

os庫的path模塊下的basename(path)方法可用于獲取路徑中的文件名,dirname(路徑)方法可用于獲取路徑中的文件夾路徑,split(路徑)方法可用于將獲取的文件夾路徑和文件名以元組的形式返回。

示例代碼:

import os
path = r'E:\書代碼\數據2\內容c\Python程序代碼1.txt'
file_name = os.path.basename(path)
dir_name = os.path.dirname(path)
file_dir_name = os.path.split(path)
print(file_name, '\n', dir_name, '\n', file_dir_name)

第3行代碼獲取路徑中的文件名,第4行代碼獲取文件夾路徑,第5行代碼獲取文件夾路徑和文件名并以元組形式返回。

代碼執行結果:

Python程序代碼1.txt
E:\書代碼\數據2\內容c
('E:\書代碼\數據2\內容c', 'Python程序代碼1.txt')

?二、操作文件和文件夾

1.查詢文件大小

使用os庫的path模塊下的getsize(path)豐富可以獲取路徑中的文件所占用內存的大小,單位為字節。

示例代碼:

import os
path = r'E:\書代碼\數據2\內容c\Python程序代碼1.txt'
print(os.path.getsize(path))

該代碼用于獲取Python程序代碼1.txt文件的大小,執行代碼后的輸出結果為962,單位為字節(1024個字節為1KB)。


2.刪除文件和文件夾

os庫中的remove(path)方法可用于刪除path中的文件。

示例代碼:

import os
os.remove(r'E:\書代碼1\數據1\內容b\dwed.txt')

如果在文件夾“E:\書代碼1\數據1\內容b”中存在一個dwed.txt文件,執行第2行代碼后,該文件將會被刪除。

os庫中的rmdir(path)方法可用于刪除path中的最后一層文件夾,不能遞歸刪除整個path的全部文件夾。

示例代碼:

import os
os.rmdir('數據3\內層1')

執行該代碼后將會刪除“內層1”文件夾。


3.重命名文件或文件夾

使用os庫中的rename()和renames()函數即可實現對文件或文件夾進行重命名。其使用形式如下:

os.rename(src, dst)
os.renames(src, dst)

功能: rename()函數修改指定文件夾或文件的名稱,renames()函數遞歸修改文件夾或文件的名稱。

參數src: 表示要修改的文件夾路徑或文件路徑。

參數dst: 表示修改后的文件夾路徑或文件路徑。

示例代碼(將圖9-1所示的所有文件夾名序號增大200):

import os
for i in range(1, 201):old = 'E:/書代碼/第9章/數據1/文件夾' + str(i)new = 'E:/書代碼/第9章/數據1/文件夾' + str(i + 200)os.rename(old, new) # 對文件或文件夾進行重命名
os.renames('E:/書代碼/第9章/數據1/文件夾201', 'E:/書代碼/第9章/數據2/文件夾201')

第2~5行代碼使用for循環200次,分別獲取要修改的路徑old和修改后的路徑new,并使用rename()函數修改文件夾名稱。 第6行代碼使用renames()函數將前面第2~5行代碼執行后得到的文件夾“E:/書代碼/第9章/數據1/文件夾201”遞歸修改為“E:/書代碼/第9章/數據2/文件夾201”,從而間接實現了文件的移動功能


4.復制文件

os庫中的os.link()函數可用于創建硬鏈接以實現復制文件。其使用形式如下:

os.link(src, dst)

參數src: 表示要修改的文件夾路徑或文件路徑。

參數dst: 表示修改后的文件夾路徑或文件路徑。

示例代碼(將文件復制到另一個路徑中):

import os
os.link('E:/書代碼/報告合集.pdf', 'E:/書代碼/數據1/報告合集.pdf')

執行代碼后即可將“報告合集.pdf”文件復制到“E:/書代碼/數據1”路徑中。


5.獲取文件夾中的全部文件名

使用os庫中的listdir(路徑)方法即可獲取文件夾中的全部文件名(包含文件和文件夾的名稱)。

示例代碼:

import os
print('相對路徑中有:', os.listdir('.'))

代碼執行結果:

相對路徑中有: ['數據1', '數據2', '第9章第1個程序.py', '第9章第3個程序.py', '第9章第5個程序.py']

代碼結果是以列表的形式輸出的路徑中的全部內容,其中數據1、數據2和數據3是文件夾,其余內容均為文件。

在辦公領域中,獲取文件夾中的全部文件是較為常見的操作,當需要對一系列的文件進行操作時,可以先將這一系列的文件存放在同一個文件夾中,然后通過os.list()方法遍歷并獲取文件,再對文件進行操作。

示例代碼(統計當前文件夾中所有文件占用空間的大小):

import os
file_total_size = 0
for file_name in os.listdir('.'):file_dir = os.path.join(os.getcwd(), file_name)file_total_size += os.path.getsize(file_dir)
print(file_total_size/1024)

第2行代碼使用file_total_size來統計所有文件占用的空間,初始時為0。

第3行代碼使用os.listdir('.')獲取文件夾內所有文件的名稱,并以列表的形式返回作為循環內容,依次賦值給變量file_name。

第4行代碼構建每個文件的完整路徑,包含路徑和文件名。

第5行代碼通過getsize()方法獲取文件的大小,并將其累加到file_total_size變量中。循環結束后輸出file_total_size/1024的值,輸出的值的單位為KB。

代碼執行結果:

45.3408203125

結果表明此文件夾一共約占45KB的內存。


6.判斷文件和文件夾

os庫中提供了以下3種用于判斷path是文件還是文件夾的方法。

第1種,os.path.exists(path)。判斷path所指的文件或文件夾是否存在,如果存在則返回True,否則返回False。

第2種,os.path.isfile(path)。判斷path是否為文件,如果是文件則返回True,否則返回False。

第3種,os.path.isdir(path)。判斷path是否為文件夾,如果是文件夾則返回True,否則返回False。

示例代碼:

import os
path = r'E:\書代碼\數據2\內容c\Python程序代碼1.txt'
print(os.path.exists(path), end='\t')
print(os.path.isfile(path), end='\t')
print(os.path.isdir(path), end='\t')

該代碼分別使用了這3種方法來判斷變量path表示的路徑。

代碼執行結果:

True True False

注意,當文件夾存在但文件夾中的文件不存在時,執行3種方法后都會返回False。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/88697.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/88697.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/88697.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

015_引用功能與信息溯源

引用功能與信息溯源 目錄 引用功能概述支持的模型引用類型API使用方法引用格式應用場景最佳實踐 引用功能概述 什么是引用功能 Claude的引用功能允許在回答基于文檔的問題時提供詳細的信息來源引用&#xff0c;幫助用戶追蹤和驗證信息的準確性。這個功能特別適用于需要高可…

ROS2中的QoS(Quality of Service)詳解

ROS2中的QoS&#xff08;Quality of Service&#xff09;詳解1. 主要QoS參數2. 為什么需要設置QoS3. QoS兼容性規則4. 選擇QoS策略的建議5. 調試QoS問題的方法6. 踩坑&#xff1a;訂閱話題沒有輸出可能的原因&#xff1a;調試方法QoS是ROS2中用于控制通信質量和行為的機制。它定…

Cursor三大核心AI功能

一&#xff1a;Tab鍵&#xff1a;智能小助手 1.1 單行/多行代碼補全 在代碼中寫出要實現的功能&#xff0c;第一次按Tab生成代碼&#xff0c;第二次按Tab接受代碼。1.2 智能代碼重寫 對已有代碼重新編寫。 寫個注釋告訴AI重構方法&#xff0c;然后鼠標點到方法內部&#xff0c;…

cesium添加原生MVT矢量瓦片方案

項目中需要基于cesium接入mvt格式的服務并支持屬性拾取查詢&#xff0c;通過一系列預研測試&#xff0c;最后選擇cesium-mvt-imagery-provider開源插件完成&#xff0c;關鍵源碼信息如下&#xff1a; npm i cesium cesium-mvt-imagery-provider //安裝依賴包// 加載圖層import…

AI金融風控:識別欺詐,量化風險的新利器

AI金融風控&#xff1a;識別欺詐&#xff0c;量化風險的新利器深度學習算法穿透海量交易數據&#xff0c;92.5%的不良貸款識別率宣告了金融風險防控新時代的來臨。深圳桑達銀絡科技有限公司在2025年6月申請的“基于人工智能的金融交易反欺詐系統”專利&#xff0c;揭示了金融風…

【unitrix】 5.0 第二套類型級二進制數基本結構體(types2.rs)

一、源碼 這是一個使用 Rust 類型系統實現類型級(type-level)二進制數的設計。 //! 類型級二進制數表示方案&#xff08;第二套方案&#xff09; //! //! 使用嵌套泛型結構體表示二進制數&#xff0c;支持整數和小數表示。use crate::sealed::Sealed;/// 類型級二進制數結構體 …

DAY01:【ML 第一彈】機器學習概述

一、三大概念 1.1 人工智能&#xff08;AI&#xff09; Artificial Intelligence 人工智能AI is the field that studies the synthesis and analysis of computational agents that act intelligently 1.2 機器學習&#xff08;ML&#xff09; Machine Learning 機器學習Fi…

AGX Xavier 搭建360環視教程【一、先確認方案】

設備默認自帶 NVIDIA 硬件編解碼能力&#xff08;NVDEC/NVENC&#xff09;&#xff0c;但是需要你在 OpenCV 和 FFmpeg 里正確啟用 調通 GStreamer 或 nvmpi&#xff0c;才真正能用起來&#xff01;這里的硬解碼是核心&#xff1a;Jetson 平臺的硬解碼&#xff0c;要么走 GStr…

服務器怎么跑Python項目?

在服務器上運行 Python 項目通常涉及 環境配置、依賴安裝、項目部署 和 進程管理。以下是詳細步驟&#xff1a;1. 連接服務器確保你能通過 SSH 訪問服務器&#xff1a;ssh usernameyour_server_ip&#xff08;如果是本地測試&#xff0c;可跳過這一步&#xff09;2. 安裝 Pytho…

【軟件設計師】

UML 類圖中的關系用例圖中的關系 關系例子類圖用例圖順序圖 概念示例通信圖活動圖泳道圖狀態圖

Java 內部類詳解:從基礎到實戰,掌握嵌套類、匿名類與局部類的使用技巧

作為一名 Java 開發工程師&#xff0c;你一定在實際開發中遇到過這樣的場景&#xff1a;想在一個類內部定義另一個邏輯相關的類&#xff1b;需要為某個接口或抽象類提供一個臨時實現&#xff08;比如監聽器&#xff09;&#xff1b;想利用面向對象特性來組織代碼結構&#xff0…

Java設計模式之行為型模式(觀察者模式)介紹與說明

一、模式結構 觀察者模式包含以下四個角色&#xff1a; Subject&#xff08;主題/被觀察者&#xff09; 維護觀察者列表&#xff0c;提供注冊&#xff08;registerObserver&#xff09;、移除&#xff08;removeObserver&#xff09;觀察者的方法&#xff0c;并定義通知所有觀察…

實現一個點擊輸入框可以彈出的數字軟鍵盤控件 qt 5.12

我們將創建兩個自定義組件&#xff1a; 1. NumericInputField&#xff1a;一個輸入框&#xff0c;當點擊時彈出數字鍵盤。 2. NumericKeyboard&#xff1a;一個可縮放的數字鍵盤。 設計思路&#xff1a; - NumericInputField 是一個常規的輸入框&#xff0c;但點擊后會彈出 Num…

Java 深入解析:JVM對象創建與內存機制全景圖

第一章&#xff1a;引言 Java 是一種面向對象的編程語言&#xff0c;對象&#xff08;Object&#xff09;是其最基本的組成單位。Java 的“一切皆對象”不僅體現在語法層面&#xff0c;更體現在運行時&#xff0c;幾乎所有數據都以對象形式存在于內存中。 然而&#xff0c;很…

Redis 基本操作筆記

1. Redis 簡介 Redis&#xff08;Remote Dictionary Server&#xff09;是一個開源的、高性能的鍵值對存儲系統&#xff0c;通常作為數據庫、緩存、消息中間件等使用。它支持多種數據類型&#xff0c;包括字符串、哈希、列表、集合、有序集合等。 Redis 特點&#xff1a; 性能&…

Docker從環境配置到應用上云的極簡路徑

Docker從環境配置到應用上云的極簡路徑主要包括環境配置、應用容器化、選擇云平臺及部署應用等步驟&#xff0c;具體如下&#xff1a; - 配置Docker環境&#xff1a; - 安裝Docker&#xff1a;根據操作系統下載對應版本的Docker安裝包。如在Linux系統中&#xff0c;可使用命令…

Slicer渲染Dicom到nrrd

Slicer渲染Dicom到nrrd 工作中遇到一些處理Dicom數據的需求&#xff0c;個人通過網絡上的一些教程 對于原始數據嘗試轉換到nrrd時&#xff0c;發現部分的窗體數據的渲染方向不一致 進一步發現這些很多定義的方向是跟設備廠家強相關的&#xff0c;不同廠家對于同一段的Dicom參…

QT中設計qss字體樣式但是沒有用【已解決】

檢查一下stylesheet里面是不是有不能被QT讀取的CSS語言&#xff0c;可能會跟字體顏色沖突錯誤示范&#xff1a;/* 錯誤示例&#xff1a;QSS 中使用 box-shadow */ QPushButton {box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3); /* Qt 不支持此屬性 */ }刪掉就行了如果后續想用陰影…

uniapp獲取狀態欄高度,膠囊按鈕的高度,底部安全區域的高度,自定義導航欄

相關API uni.getSystemInfoSync() uni.getMenuButtonBoundingClientRect() 創建一個utils文件夾&#xff0c;該文件下封裝一個systemInfo.js /*** 系統信息工具類* 封裝獲取系統狀態欄、導航欄和安全區域等相關信息的方法*/// 獲取系統信息并緩存 const systemInfo uni.get…

jQuery 文本屬性值

一、前言在網頁開發中&#xff0c;我們經常需要對頁面上的文本內容進行操作&#xff0c;例如動態修改段落文字、讀取用戶輸入框的內容、更新按鈕文本等。jQuery 提供了簡潔而強大的方法來處理這些常見的文本操作需求。本文將帶你全面了解 jQuery 中用于操作文本內容的三個核心方…