日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

Python升级之路( Lv9 ) 文件操作

發(fā)布時(shí)間:2024/1/8 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python升级之路( Lv9 ) 文件操作 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Python系列文章目錄

第一章 Python 入門
第二章 Python基本概念
第三章 序列
第四章 控制語(yǔ)句
第五章 函數(shù)
第六章 面向?qū)ο蠡A(chǔ)
第七章 面向?qū)ο笊钊?br /> 第八章 異常機(jī)制
第九章 文件操作


文件操作

  • Python系列文章目錄
  • 前言
  • 一、什么是文件操作
    • 1. 文件分類
    • 2. 常用編碼
      • ASCII
      • GBK
      • Unicode
      • UTF-8
  • 二、文件操作
    • 1. 創(chuàng)建文件對(duì)象
    • 2. 文件的寫入
      • 基本文件的寫入操作
      • 中文亂碼
        • 代碼編寫時(shí)
        • 控制臺(tái)輸出時(shí)
      • write()/writelines()寫入數(shù)據(jù)
      • close()關(guān)閉文件流
      • with語(yǔ)句(上下文管理器)
    • 3. 文件的讀取
      • 二進(jìn)制文件的讀取和寫入
    • 4. 文件對(duì)象的常用屬性和方法
      • 文件任意位置操作
  • 三、文件操作拓展模塊
    • 1. pickle序列化模塊
    • 2. csv文件的操作
      • csv文件讀取
      • csv文件寫入
    • 3. os和os.path模塊
      • os模塊-調(diào)用操作系統(tǒng)命令
      • os模塊-文件和目錄操作
      • os.path模塊
      • walk()遞歸遍歷所有文件和目錄
      • 遞歸遍歷目錄下所有文件
    • 4. shutil模塊(拷貝和壓縮)

前言

在本章節(jié), 主要介紹了文件操作相關(guān)的API方法使用
首先我們將會(huì)學(xué)習(xí)什么是文件操作, 以及文件分類還有在IO操作時(shí)會(huì)用到的常用編碼介紹
然后我們學(xué)習(xí)了文件操作的流程, 創(chuàng)建->寫入->關(guān)閉
在然后我們學(xué)習(xí)了文件的拓展, 序列化模塊pickle, 文件操作模塊csv, 系統(tǒng)操作調(diào)用模塊os和os.path以及文件拷貝壓縮模塊shutil


一、什么是文件操作

一個(gè)完整的程序一般都包括數(shù)據(jù)的存儲(chǔ)和讀取;我們?cè)谇懊鎸懙某绦驍?shù)據(jù)都沒(méi)有進(jìn)行實(shí)際的存儲(chǔ),因此python解釋器執(zhí)行完數(shù)據(jù)就消失了
實(shí)際開(kāi)發(fā)中,我們經(jīng)常需要從外部存儲(chǔ)介質(zhì)(硬盤、光盤、U盤等)讀取數(shù)據(jù),或者將程序產(chǎn)生的數(shù)據(jù)存儲(chǔ)到文件中,實(shí)現(xiàn)“持久化”保存

1. 文件分類

按文件中數(shù)據(jù)組織形式,我們把文件分為文本文件和二進(jìn)制文件兩大類:

  • 文本文件
    文本文件存儲(chǔ)的是普通“字符”文本,python默認(rèn)為 unicode 字符集,可以使用記事本程序打開(kāi)

  • 二進(jìn)制文件
    二進(jìn)制文件把數(shù)據(jù)內(nèi)容用“字節(jié)”進(jìn)行存儲(chǔ),無(wú)法用記事本打開(kāi), 必須使用專用的軟件解碼.
    常見(jiàn)的有:MP4視頻文件、MP3音頻文件、JPG圖片、doc文檔等等

  • 2. 常用編碼

    在操作文本文件時(shí),經(jīng)常會(huì)操作中文,這時(shí)候就經(jīng)常會(huì)碰到亂碼問(wèn)題.
    為了解決中文亂碼問(wèn)題,需要學(xué)習(xí)下各個(gè)編碼之前的問(wèn)題.

    常用編碼之間的關(guān)系如下:

    ASCII

    全稱為 American Standard Code for Information Interchange ,美國(guó)信息交換標(biāo)準(zhǔn)代碼,
    這是世界上最早最通用的單字節(jié)編碼系統(tǒng),主要用來(lái)顯示現(xiàn)代英語(yǔ)及其他西歐語(yǔ)言

    注意事項(xiàng):

    • ASCII 碼用7位表示,只能表示128個(gè)字符. 只定義了2^7=128個(gè)字符,用7bit即可完全編碼,
      而一字節(jié)8bit的容量是256,所以一字節(jié) ASCII 的編碼最高位總是0
    • ASCll 碼對(duì)應(yīng)碼表如下: ASCll 碼表

    GBK

    GBK即漢字內(nèi)碼擴(kuò)展規(guī)范,英文全稱Chinese Internal Code Specification.
    GBK編碼標(biāo)準(zhǔn)兼容GB2312,共收錄漢字21003個(gè)、符號(hào)883個(gè),并提供1894個(gè)造字碼位,簡(jiǎn)、繁體字融于一庫(kù)。
    GBK采用雙字節(jié)表示,總體編碼范圍為8140-FEFE,首字節(jié)在81-FE 之間,尾字節(jié)在40-FE 之間

    Unicode

    Unicode 編碼設(shè)計(jì)成了固定兩個(gè)字節(jié),所有的字符都用16位2^16=65536表示,包括之前只占8位的英文字符等,所以會(huì)造成空間的浪費(fèi)
    Unicode 完全重新設(shè)計(jì),不兼容 iso8859-1 ,也不兼容任何其他編碼

    UTF-8

    對(duì)于英文字母, unicode 也需要兩個(gè)字節(jié)來(lái)表示, 所以 unicode 不便于傳輸和存儲(chǔ).
    因此而產(chǎn)生了 UTF編碼 , UTF-8 全稱是( 8-bit UnicodeTransformation Format )

    注意事項(xiàng)

    • UTF 編碼兼容 iso8859-1 編碼,同時(shí)也可以用來(lái)表示所有語(yǔ)言的字符
    • UTF 編碼是不定長(zhǎng)編碼,每一個(gè)字符的長(zhǎng)度從1-4個(gè)字節(jié)不等.
      英文字母都是用一個(gè)字節(jié)表示,而漢字使用三個(gè)字節(jié)
    • 一般項(xiàng)目都會(huì)使用 UTF-8
      我們之所以傾向于使用UTF-8 , 是因?yàn)槠洳欢ㄩL(zhǎng)編碼可以在節(jié)省內(nèi)存的同時(shí)能夠完全兼容中文

    二、文件操作

    1. 創(chuàng)建文件對(duì)象

    open() 函數(shù)用于創(chuàng)建文件對(duì)象,基本語(yǔ)法格式如下: open(文件名[,打開(kāi)方式])

    注意:

    • 如果只是文件名,代表在當(dāng)前目錄下的文件. 文件名可以錄入全路徑,比如: D:\a\b.txt
      可以使用原始字符串 r“d:\b.txt” 減少 \ 的輸入, 因此以上代碼可改寫成 f = open(r"d:\b.txt","w")

    • 作為入?yún)⒌拇蜷_(kāi)方式如下(經(jīng)常會(huì)用!!!)

    • 文本文件對(duì)象和二進(jìn)制文件對(duì)象的創(chuàng)建
      如果是二進(jìn)制模式 b ,則創(chuàng)建的是二進(jìn)制文件對(duì)象,處理的基本單元是“字節(jié)”
      如果沒(méi)有增加模式 b ,則默認(rèn)創(chuàng)建的是文本文件對(duì)象,處理的基本單元是“字符”

    2. 文件的寫入

    文本文件的寫入一般就是三個(gè)步驟:

    • 創(chuàng)建文件對(duì)象
    • 寫入數(shù)據(jù)
    • 關(guān)閉文件對(duì)象

    基本文件的寫入操作

    實(shí)操代碼

    # 1.使用open()方式 f = open(r"d:\a.txt", "a") s = "TimePause\n時(shí)間靜止\n" f.write(s) f.close()

    結(jié)果展示

    中文亂碼

    代碼編寫時(shí)

    windows 操作系統(tǒng)默認(rèn)的編碼是 GBK , Linux 操作系統(tǒng)默認(rèn)的編碼是 UTF- 8 .
    當(dāng)我們用 open() 時(shí),調(diào)用的是操作系統(tǒng)相關(guān)api來(lái)打開(kāi)的文件,并且默認(rèn)的編碼是 GBK
    但是由于我們通常習(xí)慣將所有代碼編碼都設(shè)置成 UTF- 8 ., 因此在打開(kāi)時(shí)會(huì)出現(xiàn)亂碼問(wèn)題, 如下圖所示


    解決方案:
    按照上圖提示, 將文本編碼設(shè)置成 GBK格式讀取即可

    注意:
    我們還可以通過(guò)指定編碼來(lái)解決中文亂碼問(wèn)題. 因?yàn)槲覀儗ycharm文本讀寫編碼都設(shè)置成 utf-8,
    因此只要我們?cè)谖募懭氲臅r(shí)候規(guī)定編碼為 utf-8(默認(rèn)gbk), 那么我們?cè)谧x取時(shí)就不會(huì)出現(xiàn)亂碼. 如下代碼

    實(shí)操代碼

    # 【示例】通過(guò)指定文件編碼解決中文亂碼問(wèn)題 f = open(r"d:\bb.txt", "w", encoding="utf-8") f.write("一個(gè)有溫情的小站\n時(shí)間靜止不是簡(jiǎn)史") f.close()

    控制臺(tái)輸出時(shí)

    問(wèn)題描述

    我們一般習(xí)慣把pycharm所有字符編碼設(shè)置成utf-8時(shí). 在我們進(jìn)行網(wǎng)絡(luò)請(qǐng)求時(shí), 有時(shí)候會(huì)返回亂碼問(wèn)題, 如下圖

    問(wèn)題分析

    因?yàn)槲覀冊(cè)?pycharm 設(shè)置所有字符編碼均為 UTF-8, 但是通過(guò)網(wǎng)絡(luò)請(qǐng)求得到GBK格式的文本, 然后我們?nèi)砸?UTF-8 編碼去解碼就會(huì)出現(xiàn)亂碼

    解決方案

    可以將項(xiàng)目編碼設(shè)置成GBK格式即可; 也可以通過(guò)文本操作代碼對(duì)得到的數(shù)據(jù)進(jìn)行GBK格式讀取
    亦或者在寫入時(shí), 直接將編碼聲明為UTF-8


    write()/writelines()寫入數(shù)據(jù)

    • write(a) :把字符串 a 寫入到文件中
    • writelines(b) :把字符串列表寫入文件中,不添加換行符

    實(shí)操代碼

    # 【操作】添加字符串列表數(shù)據(jù)到文件中 f = open(r"d:\bb.txt", 'w', encoding="utf-8") s = ["什么鬼\n"] * 3 # 通過(guò) \n實(shí)現(xiàn)手動(dòng)換行 f.writelines(s) f.close()

    close()關(guān)閉文件流

    由于文件底層是由操作系統(tǒng)控制,所以我們打開(kāi)的文件對(duì)象必須顯式調(diào)用 close() 方法關(guān)閉文件對(duì)象.
    當(dāng)調(diào)用 close() 方法時(shí),首先會(huì)把緩沖區(qū)數(shù)據(jù)寫入文件(也可以直接調(diào)用 flush() 方法),再關(guān)閉文件,釋放文件對(duì)象

    注意:

    • close()一般結(jié)合異常機(jī)制的 finally 一起使用
    • 也可以通過(guò) with 關(guān)鍵字實(shí)現(xiàn)無(wú)論何種情況都能關(guān)閉打開(kāi)的文件對(duì)象(推薦)

    實(shí)操代碼

    # 【操作】結(jié)合異常機(jī)制的 finally ,確保關(guān)閉文件對(duì)象 # "a" 設(shè)置打開(kāi)方式為追加模式 try:f = open(r"d:\c.txt", "a")s = "來(lái)自深淵"f.write(s) except BaseException as e:print(e) finally:f.close()

    with語(yǔ)句(上下文管理器)

    with關(guān)鍵字 (上下文管理器)可以自動(dòng)管理上下文資源,不論什么原因跳出 with塊 ,都能確保文件正確的關(guān)閉,
    并且可以在代碼塊執(zhí)行完畢后自動(dòng)還原進(jìn)入該代碼塊時(shí)的現(xiàn)場(chǎng)

    實(shí)操代碼

    # 【操作】使用 with 管理文件寫入操作 s = ["齊格飛"] * 3 with open(r"d:\cc.txt", "w") as f:f.writelines(s)

    3. 文件的讀取

    文件讀取的步驟:

    • 打開(kāi)文本文件對(duì)象
    • 寫入數(shù)據(jù)

    文件的讀取一般使用如下三個(gè)方法:

    • read([size]): 從文件中讀取 size 個(gè)字符,并作為結(jié)果返回
      如果沒(méi)有 size 參數(shù),則讀取整個(gè)文件. 讀取到文件末尾,會(huì)返回空字符串

    • readline(): 讀取一行內(nèi)容作為結(jié)果返回
      讀取到文件末尾,會(huì)返回空字符串

    • readlines() : 文本文件中,每一行作為一個(gè)字符串存入列表中,返回該列表

    代碼格式

    with open(r"d:\a.txt", "r"[, encoding="utf-8"]) as f:f.read(4)

    注意:

    • 在讀取文件時(shí), 需要注意讀寫時(shí)字符編碼的一致性, 如果寫的時(shí)候沒(méi)有指定編碼(默認(rèn)GBK), 則在讀取的時(shí)候也不需要指定編碼
    • 但如果讀的時(shí)候未指定編碼, 寫的時(shí)候指定, 則會(huì)報(bào)錯(cuò).
      例如: 寫的時(shí)候指定 encoding="utf-8",
      則控制臺(tái)報(bào) UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbc in position 13: invalid start byte

    實(shí)操代碼

    # 【操作】 讀取一個(gè)文件前4個(gè)字符 import picklewith open(r"d:\a.txt", "r") as f:print(f.read(4))# 【操作】文件較小,一次將文件內(nèi)容讀入到程序中 with open(r"d:\aa.txt", "r") as f:print(f.read())# 【操作】按行讀取一個(gè)文件 with open(r"d:\b.txt") as f:while True:lines = f.readline()if not lines: # 在python 中 if not 會(huì)將后面對(duì)象隱式轉(zhuǎn)成True或者False進(jìn)行判斷, 因此遇到空字符串也返回Falsebreakelse:print(lines, end="")print()# 【操作】使用迭代器(每次返回一行)讀取文本文件 # 寫和讀的編碼要對(duì)應(yīng) with open(r"d:\bb.txt", "r", encoding="utf-8") as f:for a in f:print(a, end="")# 【操作】為文本文件每一行的末尾增加行號(hào) with open(r"d:\c.txt", "r") as f:lines = f.readlines()lines2 = [line.rstrip() + " # " + str(index) + "\n" for index, line in zip(range(1, len(lines) + 1), lines)]with open(r"d:\c.txt", "w") as ff:ff.writelines(lines2)

    二進(jìn)制文件的讀取和寫入

    二進(jìn)制文件的處理流程和文本文件流程一致。首先還是要?jiǎng)?chuàng)建文件對(duì)象,
    創(chuàng)建好二進(jìn)制文件對(duì)象后,仍然可以使用 write() 、 read() 實(shí)現(xiàn)文件的讀寫操作

    在創(chuàng)建文件對(duì)象時(shí), 首先需要指定二進(jìn)制模式,然后才能創(chuàng)建出二進(jìn)制文件對(duì)象. 例如

    • f = open(r"d:\a.txt", 'wb') 可寫的、重寫模式的二進(jìn)制文件對(duì)象
    • f = open(r"d:\a.txt", 'ab') 可寫的、追加模式的二進(jìn)制文件對(duì)象
    • f = open(r"d:\a.txt", 'rb') 可讀的二進(jìn)制文件對(duì)象

    實(shí)操代碼

    # 二進(jìn)制文件的讀取和寫入(此操作相當(dāng)于復(fù)制) # f = open(r"d:\a.txt", 'wb') #可寫的、重寫模式的二進(jìn)制文件對(duì)象 # f = open(r"d:\a.txt", 'ab') #可寫的、追加模式的二進(jìn)制文件對(duì)象 # f = open(r"d:\a.txt", 'rb') #可讀的二進(jìn)制文件對(duì)象 with open(r"d:\aaa.png", "rb") as scrFile, open(r"d:\bbb.png", "wb") as destFile:for l in scrFile:destFile.write(l)

    4. 文件對(duì)象的常用屬性和方法

    文件對(duì)象的屬性

    文件對(duì)象的打開(kāi)模式


    文件對(duì)象的常用方法

    文件任意位置操作

    利用 seek() 可以將讀取文件的指針移動(dòng)到指定字節(jié)位置上
    一個(gè)中文字符站兩個(gè)字節(jié), 而英文只占一個(gè)字節(jié)

    實(shí)操代碼

    print("=================文件任意位置操作======================") # 【示例】 seek() 移動(dòng)文件指針示例 with open(r"d:\cc.txt", "r") as f:print("文件名是{0}".format(f.name)) # 文件名是d:\cc.txtprint(f.tell()) # 0print("讀取文件的內(nèi)容", str(f.readline())) # 讀取文件的內(nèi)容 齊格飛齊格飛齊格飛print(f.tell()) # 18f.seek(4, 0) # 中文占2個(gè)字節(jié), 因此在seek時(shí)需要是2的倍數(shù)print("文件讀取的內(nèi)容", str(f.readline())) # 文件讀取的內(nèi)容 飛齊格飛齊格飛print(f.tell()) # 18

    三、文件操作拓展模塊

    1. pickle序列化模塊

    序列化指的是:將對(duì)象轉(zhuǎn)化成“串行化”數(shù)據(jù)形式,存儲(chǔ)到硬盤或通過(guò)網(wǎng)絡(luò)傳輸?shù)狡渌胤?/strong>.
    反序列化是指相反的過(guò)程,將讀取到的“串行化數(shù)據(jù)”轉(zhuǎn)化成對(duì)象
    可以使用pickle模塊中的函數(shù),實(shí)現(xiàn)序列化和反序列操作

    序列化我們使用:

    • pickle.dump(obj, file) obj 就是要被序列化的對(duì)象, file 指的是存儲(chǔ)的文件
    • pickle.load(file) 從 file 讀取數(shù)據(jù),反序列化成對(duì)象

    實(shí)操代碼

    import pickle print("=================使用pickle序列化=======================") # 【操作】將對(duì)象序列化到文件中 with open("student.info", "wb") as f:name = "時(shí)間靜止"age = 18score = [90, 80, 70]resume = {"name": name, "age": age, "score": score}pickle.dump(resume, f)# 【操作】將獲得的數(shù)據(jù)反序列化成對(duì)象 with open("student.info", "rb") as f:resume = pickle.load(f)print(resume)

    2. csv文件的操作

    csv是逗號(hào)分隔符文本格式,常用于數(shù)據(jù)交換、Excel文件和數(shù)據(jù)庫(kù)數(shù)據(jù)的導(dǎo)入和導(dǎo)出

    與Excel文件不同,CSV文件中:

    • 值沒(méi)有類型,所有值都是字符串
    • 不能指定字體顏色等樣式
    • 不能指定單元格的寬高,不能合并單元格
    • 沒(méi)有多個(gè)工作表
    • 不能嵌入圖像圖表

    Python標(biāo)準(zhǔn)庫(kù)的模塊csv提供了讀取和寫入csv格式文件的對(duì)象

    我們?cè)趀xcel中建立一個(gè)簡(jiǎn)單的表格并且另存為 csv(逗號(hào)分隔) ,我們打開(kāi)查看這個(gè)csv文件內(nèi)容


    csv文件讀取

    實(shí)操代碼

    import csvwith open(r"d:\workBook.csv") as a:o_csv = csv.reader(a) # #創(chuàng)建csv對(duì)象,它是一個(gè)包含所有數(shù)據(jù)的列表,每一行為一個(gè)元素headers = next(o_csv) # #獲得列表對(duì)象,包含標(biāo)題行的信息print(headers)for row in o_csv: # 循環(huán)打印各行內(nèi)容print(row)

    結(jié)果展示

    csv文件寫入

    實(shí)操代碼

    # 【操作】 csv.writer 對(duì)象寫一個(gè)csv文件 headers = ['姓名', '年齡', '工作', '住址'] rows = [('JOJO', '18', '按摩師', '英國(guó)'), ('迪奧', '19', '老板', '埃及'), ('喬魯諾喬巴納', '20', '混混', '意呆利')] with open(r"d:\workBook3.csv", "w") as b:b_scv = csv.writer(b) # 創(chuàng)建csv對(duì)象b_scv.writerow(headers) # 寫入一行(標(biāo)題)b_scv.writerows(rows) # 寫入多行(數(shù)據(jù))

    結(jié)果展示

    3. os和os.path模塊

    os模塊 可以幫助我們直接對(duì)操作系統(tǒng)進(jìn)行操作.
    我們可以直接調(diào)用操作系統(tǒng)的可執(zhí)行文件、命令,直接操作文件、目錄等等
    os模塊 是做系統(tǒng)運(yùn)維非常重要的基礎(chǔ)

    os模塊-調(diào)用操作系統(tǒng)命令

    實(shí)操代碼

    # 【示例】 os.system 調(diào)用windows系統(tǒng)的記事本程序 os.system("notepad.exe")# 【示例】 os.system 調(diào)用windows系統(tǒng)中ping命令 # 如果出現(xiàn)亂碼, 請(qǐng)看 文件操作->文件的寫入->中文亂碼->控制臺(tái)輸出時(shí) 進(jìn)行配置 os.system("ping www.baidu.com")# 【示例】運(yùn)行安裝好的微信 os.startfile(r"C:\Program Files (x86)\Tencent\WeChat\WeChat.exe")

    os模塊-文件和目錄操作

    可以通過(guò)前面講的文件對(duì)象實(shí)現(xiàn)對(duì)于文件內(nèi)容的讀寫操作.
    如果還需要對(duì)文件和目錄做其他操作,可以使用 os 和 os.path 模塊.

    • os 模塊下常用操作文件的方法
    • os 模塊下關(guān)于目錄操作的相關(guān)方法

    實(shí)操代碼

    import os # 【示例】 os 模塊:創(chuàng)建、刪除目錄、獲取文件信息等 print("系統(tǒng)名稱:", os.name) # windows-->nt linux-->posix print("當(dāng)前操作系統(tǒng)所使用的路徑分隔符:", os.sep) # windows-->\ linux-->/ print("行間隔符:", repr(os.linesep)) # windows-->\r\n linux-->\n print("當(dāng)前目錄:", os.curdir)a = "3" print(a) # 返回對(duì)象的規(guī)范字符串表示 print(repr(a)) # 獲取文件和文件夾的相關(guān)信息 print(os.stat("MyPy08-FileRead.py"))# 工作目錄的操作 print(os.getcwd()) # 獲取當(dāng)前工作目錄 os.chdir("D:") # 切換當(dāng)前工作目錄 os.mkdir("學(xué)習(xí)資料大全") # 創(chuàng)建目錄 os.rmdir("學(xué)習(xí)資料大全") # 刪除目錄 # os.makedirs("人種/黃種人/中國(guó)人") # 創(chuàng)建多級(jí)目錄, 調(diào)用成功一次之后, 再次調(diào)用會(huì)報(bào)錯(cuò) # os.rename("人種", "亞洲人") # 此方法也只能調(diào)用一次 print(os.listdir("亞洲人")) # 當(dāng)前目錄下的子目錄

    注意事項(xiàng)
    在調(diào)用 os.rename() 時(shí), 如果出現(xiàn)報(bào)錯(cuò) PermissionError: [WinError 5] 拒絕訪問(wèn),
    則需要你在需要重命名的文件夾上面配置用戶的權(quán)限. 修改之后便可進(jìn)行重命名. 如下圖所示


    os.path模塊

    os.path 模塊提供了目錄相關(guān)(路徑判斷、路徑切分、路徑連接、文件夾遍歷)的操作


    實(shí)操代碼

    # 【示例】測(cè)試 os.path 中常用方法 print("是否是絕對(duì)路徑:", os.path.isabs("d:/a.txt")) print("是否是目錄: ", os.path.isdir(r"d:\a.txt")) print("文件是否存在: ", os.path.exists("a.txt")) print("文件大小: ", os.path.getsize("a.txt")) print("輸出絕對(duì)路徑:", os.path.abspath("a.txt")) print("輸出所在目錄:", os.path.dirname("d:/a.txt")) # 獲得創(chuàng)建時(shí)間、訪問(wèn)時(shí)間、最后修改時(shí)間 print("輸出創(chuàng)建時(shí)間:", os.path.getctime("a.txt")) print("輸出最后訪問(wèn)時(shí)間:", os.path.getatime("a.txt")) print("輸出最后修改時(shí)間", os.path.getmtime("a.txt")) # 對(duì)路徑進(jìn)行分割、連接操作 path = os.path.abspath("a.txt") # 返回絕對(duì)路徑 print("返回元組:目錄、文件:", os.path.split(path)) print("返回元組:路徑、擴(kuò)展名", os.path.splitext(path)) print("返回路徑:aa\bb\cc", os.path.join("aa", "bb", "cc"))

    列出指定目錄下所有的 .py 文件,并輸出文件名

    # 列出指定目錄下所有的 .py 文件,并輸出文件名 import ospath = os.getcwd() file_list = os.listdir(path)for filename in file_list:pos = filename.rfind(".")if filename[pos + 1:] == "py":print(filename, end="\t") print()

    walk()遞歸遍歷所有文件和目錄

    os.walk() 方法是一個(gè)簡(jiǎn)單易用的文件、目錄遍歷器,可以幫助我們高效的處理文件、目錄方面的事情

    格式如下: os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])

    • top :是要遍歷的目錄。 topdown :可選, True ,先遍歷 top 目錄再遍歷子目錄
    • 返回三元組( root 、 dirs 、 files ):
      root :當(dāng)前正在遍歷的文件夾本身
      dirs :一個(gè)列表,該文件夾中所有的目錄的名字
      files :一個(gè)列表,該文件夾中所有的文件的名字

    實(shí)操代碼

    # 【示例】使用 walk() 遞歸遍歷所有文件和目錄 path = os.getcwd()[:os.getcwd().rfind("\\")] # 獲取上級(jí)路徑, 作用是能夠輸出更多的文件 file_list = os.walk(path, topdown=False)for root, dirs, files in file_list:for name in files:print(os.path.join(root, name))for name in dirs:print(os.path.join(root, name)) # 用于拼接目錄

    輸出結(jié)果

    遞歸遍歷目錄下所有文件

    實(shí)操代碼

    # 【示例】使用遞歸算法遍歷目錄下所有文件 def my_print_file(path, level):child_files = os.listdir(path)for file in child_files:file_path = os.path.join(path, file)print("\t" * level + file_path[file_path.rfind(os.sep)+1:])if os.path.isdir(file_path):my_print_file(file_path, level + 1)my_print_file(path, 0)

    4. shutil模塊(拷貝和壓縮)

    shutil 模塊是python標(biāo)準(zhǔn)庫(kù)中提供的,主要用來(lái)做文件和文件夾的拷貝、移動(dòng)、刪除等;
    還可以做文件和文件夾的壓縮、解壓縮操作. os 模塊提供了對(duì)目錄或文件的一般操作.
    shutil 模塊作為補(bǔ)充,提供了移動(dòng)、復(fù)制、壓縮、解壓等操作,這些 os 模塊都沒(méi)有提供

    實(shí)操代碼-拷貝

    import shutil # 【示例】實(shí)現(xiàn)文件的拷貝 os.chdir("D:") # 切換當(dāng)前工作目錄 shutil.copyfile("a.txt", "a_copy.txt")# 【示例】實(shí)現(xiàn)遞歸的拷貝文件夾內(nèi)容(使用 shutil 模塊) shutil.copytree("亞洲人/黃種人", "人種", ignore=shutil.ignore_patterns("*.html", "*htm")) # "音樂(lè)"文件夾不存在才能用

    實(shí)操代碼-壓縮與解壓

    # 【示例】實(shí)現(xiàn)將文件夾所有內(nèi)容壓縮(使用 shutil 模塊) # 將"亞洲人/黃種人"文件夾下所有內(nèi)容壓縮到"生物資料"文件夾下生成race.zip shutil.make_archive("生物資料/race", "zip", "亞洲人/黃種人")# 壓縮:將指定的多個(gè)文件壓縮到一個(gè)zip文件 z = zipfile.ZipFile("a.zip", "w") z.write("a.txt") z.write("b.txt") z.close()# 【示例】實(shí)現(xiàn)將壓縮包解壓縮到指定文件夾(使用 shutil 模塊) z2 = zipfile.ZipFile("a.zip", "r") z2.extractall("d:/生物資料") z2.close()

    總結(jié)

    以上是生活随笔為你收集整理的Python升级之路( Lv9 ) 文件操作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 国产一区99 | 欧美亚洲在线观看 | 久久精品免费观看 | 美女被啪羞羞粉色视频 | 国产色站| 麻豆影视在线免费观看 | 男人用嘴添女人下身免费视频 | 亚洲日本精品 | 国产好片无限资源 | 国产成人自拍视频在线观看 | 亚洲电影一区二区 | 91视频入口 | 久久网亚洲 | 222aaa| 久久国产劲爆∧v内射 | 少妇人妻互换不带套 | 日韩av中字| 蜜臀一区二区三区 | 新红楼梦2005锦江版高清在线观看 | 中文字幕25页 | cekc老妇女cea0| 久久av一区| 免费国产91| fc2ppv在线播放| 天天干夜操| 男性裸体全身精光gay | 性国产精品| 日本一区电影 | 久久久久久久久久久久久久久久久久 | 日韩欧美国产高清91 | 日韩动漫av| 国产精品一区二区免费看 | 狠狠干网址 | 久久国产精品无码一区二区 | 久久久久久久久久久久久久久久久久久 | 男人的天堂黄色 | 免费在线播放 | 久热草| 99久久久成人国产精品 | 国产亚洲精品久久久久久青梅 | 欧洲亚洲国产精品 | 亚洲图片一区二区三区 | 蜜桃av在线播放 | 福利影院在线观看 | 免费爱爱视频网站 | 久久99精品久久久久久噜噜 | 一区二区三区久久久久 | 日韩电影网站 | 欧美日韩1区2区3区 亚洲日本精品视频 | heyzo在线播放 | 黄色大全在线观看 | 免费毛片在线播放免费 | 爱啪啪导航 | 高h放荡受浪受bl | 色片网站在线观看 | xxxxxxxx黄色片 | 日本美女黄网站 | 老司机av福利 | 日本欧美日韩 | 在线欧美视频 | 亚洲成av人在线观看 | 黄金网站在线观看 | 韩国甜性涩爱 | 精品国产一区二区三区在线 | 性生活一级大片 | 久热这里有精品 | 强伦人妻一区二区三区视频18 | 一本一道久久综合 | 秘密爱大尺度做爰呻吟 | 日本黄色免费观看 | 黄色一集片 | 中文字幕+乱码+中文字幕一区 | 国产精品我不卡 | 香蕉亚洲 | 午夜精品欧美 | 中国a毛片 | 国产福利在线导航 | 国产精品国产精品国产专区 | 日韩精品视频一区二区三区 | 精品一区二区三区毛片 | 久操福利视频 | 欧美一区二区三区成人精品 | 国产精品精品软件视频 | 亚洲高清在线免费观看 | 国产精品免费久久 | 91国内在线 | 蜜桃成人在线观看 | 欧类av怡春院 | 日噜 | wwwjavhd| 怡红院综合网 | 亚洲成人免费在线观看 | 午夜肉伦伦影院 | 超碰免费成人 | 午夜视频网站在线观看 | 波多野结衣中文在线 | 国产一级一片 | 成人精品区 | 女生张开腿给男生桶 |