Python教學介紹十大常用檔案操作,乾貨滿滿~~
推薦(免費):Python教程(視頻)
日常對於批量處理文件的需求非常多,用Python寫腳本可以非常方便地實現,但在這過程中難免會和文件打交道,第一次做會有很多文件的操作無從下手,只能找度娘。
本篇東哥整理了10個Python中最常用到的文件操作,無論是批次或讀取文件都會用到,相信這個梳理會有所幫助。
1. 顯示目前目錄
當我們想知道目前的工作目錄是什麼的時候,我們可以簡單地使用os
模組的getcwd()
功能,或使用pathlib
的cwd()
,如下所示。
>>> # 第一种方法:显示当前目录 ... import os ... print("当前工作目录:", os.getcwd()) ... Current Work Directory: /Users/ycui1/PycharmProjects/Medium_Python_Tutorials >>> # 第二种方法:或者我们也可以使用 pathlib ... from pathlib import Path ... print("当前工作目录:", Path.cwd()) ... Current Work Directory: /Users/ycui1/PycharmProjects/Medium_Python_Tutorials
如果使用的是舊版的Python(2. 建立一個新目錄
要建立目錄,可以使用
os
模組的mkdir()
功能。函數將在指定的路徑下建立目錄,如果僅使用目錄名稱,則會在目前目錄中建立資料夾,即絕對路徑和相對路徑的概念。>>> # 在当前文件夹创建新目录 ... os.mkdir("test_folder") ... print("目录是否存在:", os.path.exists("test_folder")) ... 目录是否存在: True >>> # 在特定文件夹创建新目录 ... os.mkdir('/Users/ycui1/PycharmProjects/tmp_folder') ... print("目录是否存在:", os.path.exists('/Users/ycui1/PycharmProjects/tmp_folder')) ... 目录是否存在: True但是,如果想要建立一個多層級的目錄,例如資料夾中下的資料夾),則需要使用該
makedirs()
功能。>>> # 创建包含子目录的目录 ... os.makedirs('tmp_level0/tmp_level1') ... print("目录是否存在:", os.path.exists("tmp_level0/tmp_level1")) ... Is the directory there: True如果使用最新版本的Python(≥3.4),則可以考慮利用
pathlib
模組建立新目錄。它不僅可以建立子目錄,而且可以處理路徑中所有遺失的目錄。# 使用 pathlib from pathlib import Path Path("test_folder").mkdir(parents=True, exist_ok=True)需要注意一個問題,如果嘗試多次執行上述某些程式碼,可能會遇到問題「無法建立已經存在的新目錄」。我們可以將
exist_ok
參設為True
來處理此問題(預設值False值將阻止我們建立目錄)。>>> # 使用 pathlib ... from pathlib import Path ... Path("test_folder").mkdir(parents=True, exist_ok=False) ... Traceback (most recent call last): File "<input>", line 3, in <module> File "/Users/ycui1/.conda/envs/Medium/lib/python3.8/pathlib.py", line 1284, in mkdir self._accessor.mkdir(self, mode) FileExistsError: [Errno 17] File exists: 'test_folder'</module>3. 刪除目錄和檔案
完成對某些檔案或資料夾的操作後,我們可能想要刪除它。為此,我們可以使用
os
模組中的remove()
函數來刪除檔案。如果要刪除資料夾,我們應該改用rmdir()
。>>> # 删除一个文件 ... print(f"* 删除文件前 {os.path.isfile('tmp.txt')}") ... os.remove('tmp.txt') ... print(f"* 删除文件后 {os.path.exists('tmp.txt')}") ... * 删除文件前 True * 删除文件后 False >>> # 删除一个文件夹 ... print(f"* 删除文件夹前 {os.path.isdir('tmp_folder')}") ... os.rmdir('tmp_folder') ... print(f"* 删除文件夹后 {os.path.exists('tmp_folder')}") ... * 删除文件夹前 True * 删除文件夹后 False如果使用
pathlib
模組,可以使用unlink()
方法,而刪除目錄可以使用rmdir()
方法。請注意,這兩種方法都是Path物件的實例方法。4. 取得檔案清單
當我們分析某個工作或機器學習項目進行資料處理時,需要取得特定目錄中的檔案清單。
通常,檔案名稱具有匹配的模式。假設我們要找目錄中的所有.txt文件,可使用Path物件的方法
glob()
來實作。glob()
方法建立了一個生成器,讓我們可以進行迭代。>>> txt_files = list(Path('.').glob("*.txt")) ... print("Txt files:", txt_files) ... Txt files: [PosixPath('hello_world.txt'), PosixPath('hello.txt')]另外,直接使用
glob模組
也很方便,如下所示,透過建立可以使用的檔案名稱列表,它具有相似的功能。在大多數情況下,例如文件讀取和寫入,兩者都可以使用。>>> from glob import glob ... files = list(glob('h*')) ... print("以h开头的文件:", files) ... Files starting with h: ['hello_world.txt', 'hello.txt']5. 移動和複製文件
移動文件
常規文件管理任務之一是移動和複製文件。在Python中,這些工作可以非常輕鬆地完成。要移動文件,只需將其舊目錄替換為目標目錄即可重命名該文件。假設我們需要將所有.txt檔案移到另一個資料夾,下面用
Path
#來實作。>>> target_folder = Path("目标文件") ... target_folder.mkdir(parents=True,exist_ok=True) ... source_folder = Path('.') ... ... txt_files = source_folder.glob('*.txt') ... for txt_file in txt_files: ... filename = txt_file.name ... target_path = target_folder.joinpath(filename) ... print(f"** 移动文件 {filename}") ... print("目标文件存在:", target_path.exists()) ... txt_file.rename(target_path) ... print("目标文件存在:", target_path.exists(), '\n') ... ** 移动文件 hello_world.txt 目标文件存在: False 目标文件存在: True ** 移动文件 hello.txt 目标文件存在: False 目标文件存在: True複製檔案
我們可以利用
_shutil_
模組中可用的功能,_shutil_模組是標準函式庫中另一個用於檔案操作的有用模組。我們可以copy()
透過將原始檔案和目標檔案指定為字串來在模組中使用該函數。一個簡單的例子如下。當然,您可以將copy()
函數與glob()
函數結合使用,以處理具有相同模式的一堆檔案。>>> import shutil ... ... source_file = "target_folder/hello.txt" ... target_file = "hello2.txt" ... target_file_path = Path(target_file) ... print("* 复制前,文件存在:", target_file_path.exists()) ... shutil.copy(source_file, target_file) ... print("* 复制后,文件存在:", target_file_path.exists()) ... * 复制前,文件存在: False * 复制后,文件存在: True6. 檢查目錄/檔案
上面的範例中一直在使用
exists()
方法來檢查是否有特定路徑。如果存在,返回True;如果不存在,則傳回False。此功能在os
和pathlib
模組中均可用,各自的用法如下。# os 模块中 exists() 用法 os.path.exists('path_to_check') # pathlib 模块中 exists() 用法 Path('directory_path').exists()使用
pathlib
,我們也可以檢查路徑是目錄還是檔案。# 检查路径是否是目录 os.path.isdir('需要检查的路径') Path('需要检查的路径').is_dir() # 检查路径是否是文件 os.path.isfile('需要检查的路径') Path('需要检查的路径').is_file()7. 取得檔案資訊
檔案名稱
處理檔案時,許多情況下都需要擷取檔案名稱。使用Path非常簡單,可以在Path物件上查看name屬性
path.name
。如果不想帶後綴,可以查看stem屬性path.stem
。for py_file in Path().glob('c*.py'): ... print('Name with extension:', py_file.name) ... print('Name only:', py_file.stem) ... 带文件后缀: closures.py 只有文件名: closures 带文件后缀: counter.py 只有文件名: counter 带文件后缀: context_management.py 只有文件名: context_management檔案後綴
如果想单独提取文件的后缀,可查看Path对象的
suffix
属性。>>> file_path = Path('closures.py') ... print("文件后缀:", file_path.suffix) ... File Extension: .py文件更多信息
如果要获取有关文件的更多信息,例如文件大小和修改时间,则可以使用该
stat()
方法,该方法和os.stat()
一样。>>> # 路径 path 对象 ... current_file_path = Path('iterable_usages.py') ... file_stat = current_file_path.stat() ... >>> # 获取文件大小: ... print("文件大小(Bytes):", file_stat.st_size) 文件大小(Bytes): 3531 >>> # 获取最近访问时间 ... print("最近访问时间:", file_stat.st_atime) 最近访问时间: 1595435202.310935 >>> # 获取最近修改时间 ... print("最近修改时间:", file_stat.st_mtime) 最近修改时间: 1594127561.32044178. 读取文件
最重要的文件操作之一就是从文件中读取数据。读取文件,最常规的方法是使用内置
open()
函数创建文件对象。默认情况下,该函数将以读取模式打开文件,并将文件中的数据视为文本。>>> # 读取所有的文本 ... with open("hello2.txt", 'r') as file: ... print(file.read()) ... Hello World! Hello Python! >>> # 逐行的读取 ... with open("hello2.txt", 'r') as file: ... for i, line in enumerate(file, 1): ... print(f"* 读取行 #{i}: {line}") ... * 读取行 #1: Hello World! * 读取行 #2: Hello Python!如果文件中没有太多数据,则可以使用该
read()
方法一次读取所有内容。但如果文件很大,则应考虑使用生成器,生成器可以逐行处理数据。默认将文件内容视为文本。如果要使用二进制文件,则应明确指定用
r
还是rb
。另一个棘手的问题是文件的编码。在正常情况下,
open()
处理编码使用utf-8
编码,如果要使用其他编码处理文件,应设置encoding
参数。9. 写入文件
仍然使用
open()
函数,将模式改为w
或a
打开文件来创建文件对象。w
模式下会覆盖旧数据写入新数据,a
模式下可在原有数据基础上增加新数据。>>> # 向文件中写入新数据 ... with open("hello3.txt", 'w') as file: ... text_to_write = "Hello Files From Writing" ... file.write(text_to_write) ... >>> # 增加一些数据 ... with open("hello3.txt", 'a') as file: ... text_to_write = "\nHello Files From Appending" ... file.write(text_to_write) ... >>> # 检查文件数据是否正确 ... with open("hello3.txt") as file: ... print(file.read()) ... Hello Files From Writing Hello Files From Appending上面每次打开文件时都使用
with
语句。
with
语句为我们创建了一个处理文件的上下文,当我们完成文件操作后,它可以关闭文件对象。这点很重要,如果我们不及时关闭打开的文件对象,它很有可能会被损坏。10. 压缩和解压缩文件
压缩文件
zipfile
模块提供了文件压缩的功能。使用ZipFile()
函数创建一个zip
文件对象,类似于我们对open()函数所做的操作,两者都涉及创建由上下文管理器管理的文件对象。>>> from zipfile import ZipFile ... ... # 创建压缩文件 ... with ZipFile('text_files.zip', 'w') as file: ... for txt_file in Path().glob('*.txt'): ... print(f"*添加文件: {txt_file.name} 到压缩文件") ... file.write(txt_file) ... *添加文件: hello3.txt 到压缩文件 *添加文件: hello2.txt 到压缩文件解压缩文件
>>> # 解压缩文件 ... with ZipFile('text_files.zip') as zip_file: ... zip_file.printdir() ... zip_file.extractall() ... File Name Modified Size hello3.txt 2020-07-30 20:29:50 51 hello2.txt 2020-07-30 18:29:52 26结论
以上就是整理的Python常用文件操作,全部使用内置函数实现。当然,也可以借助比如
pandas
等库来完成一些操作。
以上是總結 Python十大常用文件操作的詳細內容。更多資訊請關注PHP中文網其他相關文章!

2小時內可以學會Python的基本編程概念和技能。 1.學習變量和數據類型,2.掌握控制流(條件語句和循環),3.理解函數的定義和使用,4.通過簡單示例和代碼片段快速上手Python編程。

Python在web開發、數據科學、機器學習、自動化和腳本編寫等領域有廣泛應用。 1)在web開發中,Django和Flask框架簡化了開發過程。 2)數據科學和機器學習領域,NumPy、Pandas、Scikit-learn和TensorFlow庫提供了強大支持。 3)自動化和腳本編寫方面,Python適用於自動化測試和系統管理等任務。

兩小時內可以學到Python的基礎知識。 1.學習變量和數據類型,2.掌握控制結構如if語句和循環,3.了解函數的定義和使用。這些將幫助你開始編寫簡單的Python程序。

如何在10小時內教計算機小白編程基礎?如果你只有10個小時來教計算機小白一些編程知識,你會選擇教些什麼�...

使用FiddlerEverywhere進行中間人讀取時如何避免被檢測到當你使用FiddlerEverywhere...

Python3.6環境下加載Pickle文件報錯:ModuleNotFoundError:Nomodulenamed...

如何解決jieba分詞在景區評論分析中的問題?當我們在進行景區評論分析時,往往會使用jieba分詞工具來處理文�...

如何使用正則表達式匹配到第一個閉合標籤就停止?在處理HTML或其他標記語言時,常常需要使用正則表達式來�...


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

禪工作室 13.0.1
強大的PHP整合開發環境

Atom編輯器mac版下載
最受歡迎的的開源編輯器

Dreamweaver CS6
視覺化網頁開發工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能