2020-09-27

4招小技巧识虚,帶你迅速提升Python文件處理的逼格

原創(chuàng)?xinxin?菜鳥學(xué)Python?

這是菜鳥學(xué)python的第31篇原創(chuàng)文章

閱讀本文大概需要6分鐘

文件這塊知識已經(jīng)講了好幾篇,

第一篇是2個小例子入門

第二篇是文件語法和場景的一個總覽

第三篇是一個綜合小例子實戰(zhàn)一下,可以融合前面所學(xué)的知識

這一篇算是收尾吧哭靖,回憶我以前寫過的python程序芳誓,我覺得python文件處理有這么幾個模塊非常重要湖雹,但是一般沒有人告訴你,學(xué)會這幾招后,讓你的工作會更方便更實用一些.

其實我最開始學(xué)的時候壓根沒有人告訴我這幾招,后來工作中寫代碼多了示惊,看了一些別人的開源代碼好港,才發(fā)現(xiàn)哇有這么好的模塊,真是相見恨晚啊!!

所以分享給大家,可以讓初學(xué)者少走彎路.也許哪一天你工作中用到這塊米罚,可以翻開我的文章看一下~~

1.如何對多個文件中的內(nèi)容替換

假設(shè)在當(dāng)前目錄下有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標(biāo)準(zhǔn)庫里面有一個很強(qiáng)大的模塊fileinput?,fileinput 模塊允許你循環(huán)一個或多個文本文件的內(nèi)容,非常實用

#!/usr/bin/env python

import fileinput?

import glob

#利用glob模塊過濾出當(dāng)前目錄下所有的txt文件

#inplace=1 標(biāo)準(zhǔn)輸出,比如print會被重定向到打開文件

#把每一行去掉回車钧汹,然后把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)

有的時候我們想列出當(dāng)前目錄下所有文件和子目錄隘竭,有沒有直接的方法

不需要用遞歸去處理塘秦,有python內(nèi)置的os.walk()函數(shù),一招搞定动看,是不是很貼心

假如我們有這樣的一個目錄結(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.如何把多個文件copy到另外一個目錄下

有的時候我們需要把一個或者多個文件備份到另外一個目錄下尊剔,有沒有啥辦法,簡單快捷搞定.有的,python提供了一個高級文件模塊叫shutil,可以輕松搞定.

假如我們當(dāng)前目錄下有這樣一個文件結(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.刪除目錄以及所有子目錄的文件

很多時候特別是我們要清空一個目錄的時候,若這個目錄下面有文件仇轻,或者不為空京痢,直接用os.rmdir('backup2'),會報錯,告訴你:The directory is not empty: 'backup2'

捉急啊篷店,怎么辦呢:

用shutil.rmtree('backup2')祭椰,backup2目錄就全部刪掉了

細(xì)心的同學(xué)會發(fā)現(xiàn)我的源碼上面為啥要加上"#!/usr/bin/env python",因為我的源碼都是在win編譯執(zhí)行的,有同學(xué)反映這樣在linux,mac上運行會報錯船庇,確實會有這個問題:

很多小白剛開始學(xué)的時候吭产,都會原封不動的把源碼拿過來執(zhí)行(我當(dāng)時學(xué)的時候也是這樣的),也許老鳥或者有經(jīng)驗的同學(xué)一看鸭轮,哦這個問題啊,原來是沒有引入python解釋器的路徑

但是對新手來說臣淤,可能會花很多時間去debug,去查找問題.

所以我決定寧可我麻煩一點,每一段都加上這個頭窃爷,也要保證新手能準(zhǔn)確無誤的運行我的代碼邑蒋,有的時候確實要換位思考一下小白用戶的感受.也許你多花幾秒鐘多寫幾行,卻可以幫助新手按厘,幫助別人節(jié)省好多時間医吊,少走很多彎路.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市逮京,隨后出現(xiàn)的幾起案子卿堂,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件草描,死亡現(xiàn)場離奇詭異览绿,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)穗慕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進(jìn)店門饿敲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人逛绵,你說我怎么就攤上這事怀各。” “怎么了术浪?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵瓢对,是天一觀的道長。 經(jīng)常有香客問我添吗,道長沥曹,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任碟联,我火速辦了婚禮妓美,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鲤孵。我一直安慰自己壶栋,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布普监。 她就那樣靜靜地躺著贵试,像睡著了一般。 火紅的嫁衣襯著肌膚如雪凯正。 梳的紋絲不亂的頭發(fā)上毙玻,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天,我揣著相機(jī)與錄音廊散,去河邊找鬼桑滩。 笑死,一個胖子當(dāng)著我的面吹牛允睹,可吹牛的內(nèi)容都是我干的运准。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼缭受,長吁一口氣:“原來是場噩夢啊……” “哼胁澳!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起米者,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤韭畸,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體胰丁,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡普筹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了隘马。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡妻顶,死狀恐怖酸员,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情讳嘱,我是刑警寧澤幔嗦,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站沥潭,受9級特大地震影響邀泉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜钝鸽,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一汇恤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧拔恰,春花似錦因谎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至河爹,卻和暖如春匠璧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背咸这。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工夷恍, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人炊苫。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓裁厅,卻偏偏與公主長得像,于是被迫代替她去往敵國和親侨艾。 傳聞我的和親對象是個殘疾皇子执虹,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,691評論 2 361