python辦公自動化:文件和目錄操作

import os

創(chuàng)建目錄結(jié)構(gòu)

  • os.makedirs 可以遞歸的創(chuàng)建目錄結(jié)構(gòu)智哀,比如
os.makedirs('tmp/python/fileop',exist_ok=True)

在當前工作目錄下面創(chuàng)建 tmp目錄,在tmp目錄下面再創(chuàng)建 python目錄校读,在Python目錄下面再創(chuàng)建fileop目錄俭厚;exist_ok=True 指定了士鸥,如果某個要創(chuàng)建的目錄已經(jīng)存在,也不報錯

刪除文件或目錄

os.remove 可以刪除一個文件豪治,比如

os.remove('sdf.py')

shutil.rmtree() 可以遞歸的刪除某個目錄所有的子目錄和子文件 比如

import shutil
shutil.rmtree('tmp', ignore_errors=True)

注意:參數(shù) ignore_errors=True 保證如果目錄不為空洞拨,不會拋出異常。

拷貝文件

shutil 模塊里面有很多 目錄文件操作的函數(shù)
拷貝文件鬼吵,可以使用shutil模塊的copyfile函數(shù)扣甲。

from shutil import copyfile
# 拷貝 d:/tools/first.py 到 e:/first.py
copyfile('d:/tools/first.py', 'e:/first.py')

注意,如果拷貝前齿椅,e:/first.py 已經(jīng)存在琉挖,則會被拷貝覆蓋,所以使用該函數(shù)一定要小心涣脚。

拷貝目錄

如果我們要拷貝一個目錄里面所有的內(nèi)容(包括子目錄和文件示辈、子目錄里面的子目錄和文件,等等)到另外一個目錄中遣蚀,可以使用 shutil的copytree函數(shù)矾麻。

from shutil import copytree
# 拷貝 d:/tools/aaa 目錄中所有的內(nèi)容 到 e:/bbb 中
copytree('d:/tools/aaa', 'e:/new/bbb')

注意拷貝前纱耻, 目標目錄必須 不存在 ,否則會報錯险耀。

上面的代碼執(zhí)行前面弄喘,如果 e:/new/bbb 已經(jīng)存在,執(zhí)行到copytree時甩牺,就會報錯

上面的代碼執(zhí)行前面蘑志,如果 e:/new 這個目錄都不存在,執(zhí)行到copytree時贬派,就會 創(chuàng)建 e:/new 目錄急但,再創(chuàng)建 e:/new/bbb 目錄,再拷貝 d:/tools/aaa 目錄中所有的內(nèi)容 到 e:/new/bbb 中搞乏。

上面的代碼執(zhí)行前面波桩,如果 e:/new 這個目錄存在,但是 e:/new/bbb 不存在请敦,執(zhí)行到copytree時镐躲,就只會 創(chuàng)建 e:/new/bbb ,再拷貝 d:/tools/aaa 目錄中所有的內(nèi)容 到 e:/new/bbb 中冬三。

修改文件名匀油、目錄名

要修改文件名、目錄名勾笆,可以使用os模塊的rename函數(shù)敌蚜。

# 修改目錄名 d:/tools/aaa 為 d:/tools/bbb
os.rename('d:/tools/aaa','d:/tools/bbb')

# 修改文件名 d:/tools/first.py 為 d:/tools/second.py
os.rename('d:/tools/first.py','d:/tools/second.py')

對文件路徑名的操作

對于文件名的操作,比如 獲取文件名稱窝爪,文件所在目錄弛车,文件路徑的拼接等,都可以使用 os.path 模塊蒲每。

通常我們喜歡使用格式化字符串的方法來做文件路徑的拼接纷跛,但是如果你的程序需要在Linux、Windows等多個平臺運行邀杏,它們的路徑的分隔符是不同的贫奠,Windows上是 \ , 而 Linux上是 /

這時望蜡,我們應(yīng)該使用 os.path 模塊唤崭。 它能夠自動處理類似 Data/data.csv 和 Data\data.csv 這樣的文件路徑差異。

path = '/Users/beazley/Data/data.csv'
# 獲取路徑中的文件名部分
os.path.basename(path)
'data.csv'
# 獲取路徑中的目錄部分
os.path.dirname(path)
'/Users/beazley/Data'
# 文件路徑的拼接
os.path.join('tmp', 'data', os.path.basename(path))
'tmp/data/data.csv'

判斷文件脖律、目錄是否存在

os.path.exists('d:/systems/cmd.exe')
os.path.exists('d:/systems')

exists方法返回值為True表示 存在谢肾,否則表示不存在。
如果你要判斷指定路徑是否是文件小泉,可以這樣
os.path.isfile('d:/systems/cmd.exe')# 返回值為True 表示是文件
如果你要判斷指定路徑是否是目錄芦疏,可以這樣
os.path.isdir('d:/systems')#返回值為True 表示是目錄

文件大小和修改日期

  • 返回文件大小
    os.path.getsize('file1')
    3669

  • 返回文件的最后修改日期冕杠,是秒時間
    參考下一章 日期和時間 里面的內(nèi)容
    os.path.getmtime('file1')
    1272478234.0

  • 可以把秒時間 轉(zhuǎn)化為日期時間
    import time
    time.ctime(os.path.getmtime('/etc/passwd'))
    'Wed Apr 28 13:10:34 2010'

當前工作目錄

當前工作目錄的路徑:
wd = os.getcwd()
改變當前工作目錄到另外的路徑:
os.chdir(path)
參數(shù)就是 新的當前工作目錄 路徑地址。

遞歸的遍歷目錄下面所有的文件

獲取某個目錄中所有的 文件酸茴, 包括子目錄里面的文件分预。 可以使用 os庫中的walk方法
比如我們要得到某個目錄下面所有的子目錄 和所有的文件,存放在兩個列表中
os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])
top :是你所要遍歷的目錄的地址, 返回的是一個三元組 (dirpath, dirnames, filenames)
topdown :可選薪捍,True則優(yōu)先遍歷 top 文件夾噪舀,與top 文件夾中每一個子目錄;否則優(yōu)先遍歷 top 的子目錄(默認為開啟)飘诗。
onerror :可選,需要一個 callable 對象界逛,當 walk 需要異常時昆稿,會調(diào)用
followlinks :可選,如果為 True息拜,則會遍歷目錄下的快捷方式(linux 下是軟連接 symbolic link )實際所指的目錄(默認關(guān)閉)溉潭,如果為 False,則優(yōu)先遍歷 top 的子目錄少欺;

  • 得到某個目錄下所有文件的全路徑
import os
# 目標目錄
targetDir = r'd:\tmp\util\dist\check'
for (dirpath, dirnames, filenames) in os.walk(targetDir):
    for fn in filenames:
        # 把 dirpath 和 每個文件名拼接起來 就是全路徑
        fpath = os.path.join(dirpath, fn)
# dirpath 代表當前遍歷到的目錄名
# dirnames 是列表對象喳瓣,存放當前dirpath中的所有子目錄名
# filenames 是列表對象,存放當前dirpath中的所有文件名

得到目錄中所有的文件和子目錄名

listdir返回的是該目錄下面所有的文件和子目錄赞别。

# 目標目錄
targetDir = r'd:\tmp\util\dist\check'
files =  os.listdir(targetDir)
print(files)

如果只需要獲取目錄中所有的文件畏陕,或者只需要子目錄

import os
from os.path import isfile, join,isdir
# 目標目錄
targetDir = r'd:\tmp\util\dist\check'
# 所有的文件
print([f for f in os.listdir(targetDir) if isfile(join(targetDir, f))])
# 所有的目錄
print([f for f in os.listdir(targetDir) if isdir(join(targetDir, f))])

得到目錄中指定擴展名的文件和子目錄

可以使用glob庫

import glob
exes = glob.glob(r'd:\tmp\*.txt')
print(exes)

http://www.byhy.net/tut/py/extra/file_dir

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市仿滔,隨后出現(xiàn)的幾起案子惠毁,更是在濱河造成了極大的恐慌,老刑警劉巖崎页,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鞠绰,死亡現(xiàn)場離奇詭異,居然都是意外死亡飒焦,警方通過查閱死者的電腦和手機蜈膨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來牺荠,“玉大人翁巍,你說我怎么就攤上這事≈镜纾” “怎么了曙咽?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長挑辆。 經(jīng)常有香客問我例朱,道長孝情,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任洒嗤,我火速辦了婚禮箫荡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘渔隶。我一直安慰自己羔挡,他們只是感情好,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布间唉。 她就那樣靜靜地躺著绞灼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪呈野。 梳的紋絲不亂的頭發(fā)上低矮,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天,我揣著相機與錄音被冒,去河邊找鬼军掂。 笑死,一個胖子當著我的面吹牛昨悼,可吹牛的內(nèi)容都是我干的蝗锥。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼率触,長吁一口氣:“原來是場噩夢啊……” “哼终议!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起闲延,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤痊剖,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后垒玲,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體陆馁,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年合愈,在試婚紗的時候發(fā)現(xiàn)自己被綠了叮贩。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡佛析,死狀恐怖益老,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情寸莫,我是刑警寧澤捺萌,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站膘茎,受9級特大地震影響桃纯,放射性物質(zhì)發(fā)生泄漏酷誓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一态坦、第九天 我趴在偏房一處隱蔽的房頂上張望盐数。 院中可真熱鬧,春花似錦伞梯、人聲如沸玫氢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽漾峡。三九已至,卻和暖如春喻旷,著一層夾襖步出監(jiān)牢的瞬間灰殴,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工掰邢, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人伟阔。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓辣之,卻偏偏與公主長得像,于是被迫代替她去往敵國和親皱炉。 傳聞我的和親對象是個殘疾皇子怀估,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容