|
這是菜鳥學(xué)python的第31篇原創(chuàng)文章 閱讀本文大概需要6分鐘 文件這塊知識(shí)已經(jīng)講了好幾篇,
其實(shí)我最開始學(xué)的時(shí)候壓根沒有人告訴我這幾招,后來工作中寫代碼多了,看了一些別人的開源代碼,才發(fā)現(xiàn)哇有這么好的模塊,真是相見恨晚啊!! 所以分享給大家,可以讓初學(xué)者少走彎路.也許哪一天你工作中用到這塊,可以翻開我的文章看一下~~ 1.如何對(duì)多個(gè)文件中的內(nèi)容替換 假設(shè)在當(dāng)前目錄下有2個(gè)文件 test01.txt,test02.txt 我們需要把里面的Java全部替換為Python,一次搞定怎么做呢? |--test01.txt--- Hi All, What Is Java? What Is Programming? |--test02.txt--- Hi All, Why do people use Java? It’s an important tool to learn Python標(biāo)準(zhǔn)庫(kù)里面有一個(gè)很強(qiáng)大的模塊fileinput ,fileinput 模塊允許你循環(huán)一個(gè)或多個(gè)文本文件的內(nèi)容,非常實(shí)用 #!/usr/bin/env python import fileinput import glob #利用glob模塊過濾出當(dāng)前目錄下所有的txt文件 #inplace=1 標(biāo)準(zhǔn)輸出,比如print會(huì)被重定向到打開文件 #把每一行去掉回車,然后把java替換為Python for line in fileinput.input(glob.glob('*.txt'),inplace=1): print line.strip().replace('Java','Python') fileinput.close()#關(guān)閉文件句柄 >> |--test01.txt--- Hi All, What Is Python? What Is Programming? |--test02.txt--- Hi All, Why do people use Python? it’s an important tool to learn 是不是很方便,假如你在批處理郵件,有1000封郵件,你希望把里面的標(biāo)題改掉,這招是不是很爽. 2.如何列出全目錄結(jié)構(gòu) 有的時(shí)候我們想列出當(dāng)前目錄下所有文件和子目錄,有沒有直接的方法 不需要用遞歸去處理,有python內(nèi)置的os.walk()函數(shù),一招搞定,是不是很貼心 假如我們有這樣的一個(gè)目錄結(jié)構(gòu)為'C:\myPython',結(jié)構(gòu)如下: |---demo--- |--demo_01.exe |--demo_02.msi |--other |--info.docc |---log----- |--1110_log.txt |--1111_log.txt |--1112_log.txt |---pic----- |--0127_1.jpg |--0127_2.jpg |--0127_3.jpg #!/usr/bin/env python import os path=r'C:\myPython' for folderName,subfolders,filenames in os.walk(path): print 'The current folder is :'+folderName for subfolder in subfolders:#列出子目錄 print ('Subfolder of '+folderName+': '+subfolder) for file_name in filenames:#列出文件 print ('File insdie '+folderName+': '+file_name) >> The current folder is :C:\myPython Subfolder of C:\myPython: demo Subfolder of C:\myPython: log Subfolder of C:\myPython: pic The current folder is :C:\myPython\demo Subfolder of C:\myPython\demo: other File insdie C:\myPython\demo: demo_01.exe File insdie C:\myPython\demo: demo_02.msi The current folder is :C:\myPython\demo\other File insdie C:\myPython\demo\other: info.docx The current folder is :C:\myPython\log File insdie C:\myPython\log: 1110_log.txt File insdie C:\myPython\log: 1111_log.txt File insdie C:\myPython\log: 1112_log.txt The current folder is :C:\myPython\pic File insdie C:\myPython\pic: 0127_1.jpg File insdie C:\myPython\pic: 0127_2.jpg File insdie C:\myPython\pic: 0127_3.jpg 3.如何把多個(gè)文件copy到另外一個(gè)目錄下 有的時(shí)候我們需要把一個(gè)或者多個(gè)文件備份到另外一個(gè)目錄下,有沒有啥辦法,簡(jiǎn)單快捷搞定.有的,python提供了一個(gè)高級(jí)文件模塊叫shutil,可以輕松搞定. 假如我們當(dāng)前目錄下有這樣一個(gè)文件結(jié)構(gòu): |---backup--- |--abc.txt |---test01.txt--- |---test02.txt--- 問題: 我們想把test01.txt和text02.txt備份到backup下,怎么辦 解決: 5行代碼搞定 #!/usr/bin/env python #列出所有的文件 #過濾出txt文件 #copy到backup下 import shutil,os for file in os.listdir('.'): if os.path.splitext(file)[1]=='.txt': shutil.copy(file,os.path.join('backup',file)) 也許有同學(xué)說怎么拷貝目錄,也有現(xiàn)成的模塊 shutil.copytree('backup', 'backup2') 創(chuàng)建了backup2目錄,然后把backup下的文件全部都copy過來 4.刪除目錄以及所有子目錄的文件 很多時(shí)候特別是我們要清空一個(gè)目錄的時(shí)候,若這個(gè)目錄下面有文件,或者不為空,直接用os.rmdir('backup2'),會(huì)報(bào)錯(cuò),告訴你:The directory is not empty: 'backup2' 捉急啊,怎么辦呢: 用shutil.rmtree('backup2'),backup2目錄就全部刪掉了 細(xì)心的同學(xué)會(huì)發(fā)現(xiàn)我的源碼上面為啥要加上'#!/usr/bin/env python',因?yàn)槲业脑创a都是在win編譯執(zhí)行的,有同學(xué)反映這樣在linux,mac上運(yùn)行會(huì)報(bào)錯(cuò),確實(shí)會(huì)有這個(gè)問題:
好了文件擴(kuò)展模塊小技巧就講到這里啦,希望能給初學(xué)者一些啟發(fā),若有什么不懂的,也可以留言跟我探討交流. 最后說一下,原創(chuàng)真的不易,希望大家能夠給點(diǎn)支持,歡迎轉(zhuǎn)發(fā)轉(zhuǎn)發(fā)轉(zhuǎn)發(fā),留言留言留言,重要的事情說三遍,也是對(duì)我的一點(diǎn)鼓勵(lì)和動(dòng)力. |
|
|