4招小技巧,帶你迅速提升Python文件處理的逼格
這是菜鳥學python的第31篇原創文章
閱讀本文大概需要6分鐘
文件這塊知識已經講了好幾篇,
第一篇是2個小例子入門
http://mp.weixin.qq.com/s?__biz=MzIxNjM4NDE2MA==&mid=2247483855&idx=1&sn=ea55de10eea01b739ad78bdb6a245c11&chksm=97889600a0ff1f16dedfbc375d3ab9414d17c5910693358ecd27a0e9f1153c5b68ae847ab85e#rd
第二篇是文件語法和場景的一個總覽
http://mp.weixin.qq.com/s?__biz=MzIxNjM4NDE2MA==&mid=2247483859&idx=1&sn=00dbe38071e05a71888c8e3987ef1cd2&chksm=9788961ca0ff1f0aad5ffa97f750f56b46423635fa975b28627a7c62eaef713de04108c342be#rd
第三篇是一個綜合小例子實戰一下,可以融合前面所學的知識
http://mp.weixin.qq.com/s?__biz=MzIxNjM4NDE2MA==&mid=2247483871&idx=1&sn=4f3ea341227e35ec889dc849d6d7e036&chksm=97889610a0ff1f069715ed7ecd52ad7e62f51d8e5f0724f0bb9fbcacdff6d52b9a7d7ea7a762#rd
這一篇算是收尾吧,回憶我以前寫過的python程序,我覺得python文件處理有這麼幾個模塊非常重要,但是一般沒有人告訴你,學會這幾招後,讓你的工作會更方便更實用一些.
http://mp.weixin.qq.com/s?__biz=MzIxNjM4NDE2MA==&mid=2247483875&idx=1&sn=2a0738ced094273db6c2761f41100810&chksm=9788962ca0ff1f3a655c1f62a973b961cb1d74029439800eca970173e197f2a449c3e5553dce#rd
其實我最開始學的時候壓根沒有人告訴我這幾招,後來工作中寫代碼多了,看了一些別人的開源代碼,才發現哇有這麼好的模塊,真是相見恨晚啊!!
所以分享給大家,可以讓初學者少走彎路.也許哪一天你工作中用到這塊,可以翻開我的文章看一下~~
1.如何對多個文件中的內容替換
假設在當前目錄下有2個文件 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標準庫裡面有一個很強大的模塊fileinput ,fileinput 模塊允許你循環一個或多個文本文件的內容,非常實用
#!/usr/bin/env python
import fileinput
import glob
#利用glob模塊過濾出當前目錄下所有的txt文件
#inplace=1 標準輸出,比如print會被重定向到打開文件
#把每一行去掉回車,然後把java替換為Python
for line in fileinput.input(glob.glob(*.txt),inplace=1):
print line.strip().replace(Java,Python)
fileinput.close()#關閉文件句柄
>>
|--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封郵件,你希望把裡面的標題改掉,這招是不是很爽.
2.如何列出全目錄結構
有的時候我們想列出當前目錄下所有文件和子目錄,有沒有直接的方法
不需要用遞歸去處理,有python內置的os.walk()函數,一招搞定,是不是很貼心
假如我們有這樣的一個目錄結構為C:myPython,結構如下:
|---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=rC: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:myPythondemo
Subfolder of C:myPythondemo: other
File insdie C:myPythondemo: demo_01.exe
File insdie C:myPythondemo: demo_02.msi
The current folder is :C:myPythondemoother
File insdie C:myPythondemoother: info.docx
The current folder is :C:myPythonlog
File insdie C:myPythonlog: 1110_log.txt
File insdie C:myPythonlog: 1111_log.txt
File insdie C:myPythonlog: 1112_log.txt
The current folder is :C:myPythonpic
File insdie C:myPythonpic: 0127_1.jpg
File insdie C:myPythonpic: 0127_2.jpg
File insdie C:myPythonpic: 0127_3.jpg
3.如何把多個文件copy到另外一個目錄下
有的時候我們需要把一個或者多個文件備份到另外一個目錄下,有沒有啥辦法,簡單快捷搞定.有的,python提供了一個高級文件模塊叫shutil,可以輕鬆搞定.
假如我們當前目錄下有這樣一個文件結構:
|---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))
也許有同學說怎麼拷貝目錄,也有現成的模塊
shutil.copytree(backup, backup2)
創建了backup2目錄,然後把backup下的文件全部都copy過來
4.刪除目錄以及所有子目錄的文件
很多時候特別是我們要清空一個目錄的時候,若這個目錄下面有文件,或者不為空,直接用os.rmdir(backup2),會報錯,告訴你:The directory is not empty: backup2
捉急啊,怎麼辦呢:
用shutil.rmtree(backup2),backup2目錄就全部刪掉了
細心的同學會發現我的源碼上面為啥要加上"#!/usr/bin/env python",因為我的源碼都是在win編譯執行的,有同學反映這樣在linux,mac上運行會報錯,確實會有這個問題:
很多小白剛開始學的時候,都會原封不動的把源碼拿過來執行(我當時學的時候也是這樣的),也許老鳥或者有經驗的同學一看,哦這個問題啊,原來是沒有引入python解釋器的路徑
但是對新手來說,可能會花很多時間去debug,去查找問題.
所以我決定寧可我麻煩一點,每一段都加上這個頭,也要保證新手能準確無誤的運行我的代碼,有的時候確實要換位思考一下小白用戶的感受.也許你多花幾秒鐘多寫幾行,卻可以幫助新手,幫助別人節省好多時間,少走很多彎路.
好了文件綜合實戰小例子就講到這裡啦,希望能給初學者一些啟發,若有什麼不懂的,也可以留言跟我探討交流.
最後說一下,原創真的不易,希望大家能夠給點支持,歡迎轉發,留言,也是對我的一點鼓勵和動力.
也歡迎更多喜歡Python的同學關注 菜鳥學python,一起來學python吧
推薦閱讀: