1. 程式人生 > >孤荷淩寒自學python第三十五天python的文件操作之針對文件操作的os模塊的相關內容

孤荷淩寒自學python第三十五天python的文件操作之針對文件操作的os模塊的相關內容

mov 開始 帶來 vb6 上傳 語音 有導師 util close

孤荷淩寒自學python第三十五天python的文件操作之針對文件操作的os模塊的相關內容

(完整學習過程屏幕記錄視頻地址在文末,手寫筆記在文末)

一、打開文件後,要務必記得關閉,所以一般的寫法應當放在異常捕捉環境中。

try:

此處放打開文件的語句塊 f= open(文件,‘打開模式’,encoding=’文本編碼’)

執行打開文件後的操作語句塊

except ……:

……

else:

這兒可以繼續放其它要執行的正常語句塊

finally:

這兒必須有關閉文件的語句。f.close()

但我們可以簡化地寫成:

with open(文件,‘打開模式’,encoding=’文本編碼’) as f:

此處就可以對f對象(就是一個file對象)進行操作了

使用這種方法的話,是完全不用書寫關閉文件的語句的。

二、os模塊中對於文件操作的相關子模塊

os模塊中的子模塊:os.path模塊

必須先引用聲明後才能使用,引用方式:

import os.path

os.path類下的大部分方法都直接可以通過類名調用,無需將類實例化為具體的對象。

1

os.path.abspath(相對文件路徑名)

相對文件路徑名,是針對於絕對路徑文件名(完整路徑文件名而言)的

相對文件路徑如:

1.txt

上面的文件路徑,默認就是此當前目錄 下的1.txt

但我們並不知道其完整的路徑名。

而絕對路徑(完整路徑文件名)如:

windows系統下:

I:\MAKEAPP\python\Python365\邊學習邊測試文件夾\自學PYTHON部分\0035第三十五天\1.txt

linux系統下:

/home/pw/eclipse-workspace/py1/1.txt

此方法返回文件的完整路徑和文件名。

2

os.path.dirname(絕對文件路徑或絕對文件夾路徑)

執行此方法將返回絕對路徑中上級目錄(上一級文件夾)的絕對路徑。

3

os.path.basename(絕對文件路徑或絕對文件夾路徑)

執行此方法 將返回絕對路徑中的 相對文件名 或 相對文件夾名

4

os.path.exists(文件名或目錄名)

執行此方法 將返回指定的文件名或目錄名是否存在的布爾對象。

5

os.path.isabs(文件或目錄名)

執行此方法 將返回指定的文件名稱或目錄名是否是絕對路徑的布爾對象。

6

os.path.isfile(文件名或目錄名)

執行此方法 將返回指定的文件名或目錄名是否是 一個文件 的布爾對象。

7

os.path.isdir(文件名或目錄名)

執行此方法 將返回指定的文件名或目錄名 是否是 一個文件夾 的布爾對象。

8

os.path.getsize(文件名)

執行此方法 將返回指定的文件名的文件的占用磁盤空間的大小,單位為byte.

9

os.path.split(絕對文件名或絕對目錄名)

執行此方法 將把絕對文件名分成兩部分:上一級文件夾名 和 純粹的相對文件名

並將這兩部分組合成一個元組對象後返回。

10

os.path.splitdive(絕對文件名或絕對目錄名)

執行此方法 將把絕對文件名分成兩部分: 盤符 和 除開盤符之外的部分

並將這兩部分組合成一個元組對象後返回。

對於linux系統而言是沒有盤符的,因此,盤符部分為空字符串。

11

os.path.join(絕對路徑的文件夾名,純粹的相對文件名)

執行此方法 將把【絕對路徑的文件夾名】與【純粹的相對文件名】組合成一個完整的絕對路徑。

特別註意:

【絕對路徑的文件夾名】中的所有/符號必須有兩種情況:

可以直接使用下邊左移的的斜杠

/

如果使用下邊右移的斜杠

\

就必須轉義表達為:

\\

否則執行此方法不會成功。

經測試傳遞給本方法的第一個形參的下列寫法是正確的:

I:\\MAKEAPP\\python\\Python365\\邊學習邊測試文件夾\\自學PYTHON部分\\0035第三十五天\\

/home/pw/eclipse-workspace/py1

執行下面的語句進行測試:(win10下使用vscode環境)

import os.path

strfile=‘1.txt‘

strLongPath=os.path.abspath(strfile)

print(strLongPath)

strShortNm=os.path.basename(strLongPath)

print(strShortNm)

strDirNm=os.path.dirname(strLongPath)

print(strDirNm)

strShortDirNm=os.path.basename(strDirNm)

print(strShortDirNm)

isHad=os.path.exists(strfile)

print(isHad)

isHad=os.path.exists(strLongPath)

print(isHad)

isHad=os.path.exists(strDirNm)

print(isHad)

isHad=os.path.exists(strShortDirNm)

print(isHad)

isHad=os.path.exists(‘../‘ +strShortDirNm)

print(isHad)

intSize=os.path.getsize(strfile)

print(intSize)

isAbs=os.path.isabs(strfile)

print(isAbs)

isAbs=os.path.isabs(strLongPath)

print(isAbs)

isFile=os.path.isfile(strfile)

print(isFile)

isFile=os.path.isfile(strDirNm)

print(isFile)

strOnlyPath=os.path.splitdrive(strLongPath)

strOnlyFile=os.path.split(strLongPath)

print(strOnlyPath)

print(strOnlyFile)

strTemp=os.path.join(strOnlyFile[0],strOnlyFile[1])

print(strTemp)

strLs=os.path.join(‘I:\\MAKEAPP\\python\\Python365\\邊學習邊測試文件夾\\自學PYTHON部分\\0035第三十五天\\‘,‘1.txt‘)

print(strLs)

運行結果:

I:\MAKEAPP\python\Python365\邊學習邊測試文件夾\自學PYTHON部分\0035第三十五天\1.txt

1.txt

I:\MAKEAPP\python\Python365\邊學習邊測試文件夾\自學PYTHON部分\0035第三十五天

0035第三十五天

True

True

True

False

True

34

False

True

True

False

(‘I:‘, ‘\\MAKEAPP\\python\\Python365\\邊學習邊測試文件夾\\自學PYTHON部分\\0035第三十五天\\1.txt‘)

(‘I:\\MAKEAPP\\python\\Python365\\邊學習邊測試文件夾\\自學PYTHON部分\\0035第三十五天‘, ‘1.txt‘)

I:\MAKEAPP\python\Python365\邊學習邊測試文件夾\自學PYTHON部分\0035第三十五天\1.txt

I:\MAKEAPP\python\Python365\邊學習邊測試文件夾\自學PYTHON部分\0035第三十五天\1.txt

執行下面的語句,在linux(fedora)系統eclipse環境下測試:

import os.path

import shutil

strfile=‘1.txt‘

with open(strfile,‘w‘,encoding=‘utf-8‘) as f:

lstA=[‘孤荷淩寒\n‘,‘QQ號是_\n‘,‘578652607‘]

f.writelines(lstA)

isHad=os.path.exists(strfile)

print(isHad)

strpath=os.path.dirname(strfile)

print(strpath)

strlongfile=os.path.abspath(strfile)

print(strlongfile)

strpath=os.path.dirname(strlongfile)

print(strpath)

tplB=os.path.split(strlongfile)

tplC=os.path.splitdrive(strlongfile)

print(tplB)

print(tplC)

strfile2=os.path.join(tplB[0],tplB[1])

print(strfile2)

strfile2=os.path.join(‘\\home\\pw\\eclipse-workspace\\py1‘,tplB[1])

print(strfile2)

輸出結果:

True

/home/pw/eclipse-workspace/py1/1.txt

/home/pw/eclipse-workspace/py1

(‘/home/pw/eclipse-workspace/py1‘, ‘1.txt‘)

(‘‘, ‘/home/pw/eclipse-workspace/py1/1.txt‘)

/home/pw/eclipse-workspace/py1/1.txt

\home\pw\eclipse-workspace\py1/1.txt

三、os模塊中的其它文件操作方法

os.walk(目錄名)

執行此方法將返回從【目錄名】開始的全部文件樹的叠代器。

文件樹中,包含:

所有目錄

所有子級目錄

每個目錄中的文件

三大類的信息集合。

如果將此叠代器強制轉換為list(列表),則會顯示成一個復雜的嵌套列表。

一般可以通過如下方法遍歷此 叠代器的所有對象:

for dir,subdir,f in tree:

……

其中tree就是指執行此方法後返回的叠代器。

循環體中的dir將依次獲得每循環次的當前目錄名,subdir將依次獲得每循環次的子目錄名列表,f將依次獲得每循環次的文件名列表。

在windows下執行下面的操作:

import os.path

#importos.walk #沒有這個模塊!因為walk只是os中的一個方法

import shutil #這才是一個模塊,專門用於文件操作的,需要引用

import glob

strfile=‘1.txt‘

strlongfile=os.path.abspath(strfile)

strpath=os.path.dirname(strlongfile)

print(strpath)

objA=os.walk(strpath)#將列出strpath中的全部文件夾和文件,包括子目錄中的,形成一棵樹,返回的是一個叠代器

for dir,subdir,fin objA:

print(dir)

print(subdir)

print(f)

運行結果:

I:\MAKEAPP\python\Python365\邊學習邊測試文件夾\自學PYTHON部分\0035第三十五天

I:\MAKEAPP\python\Python365\邊學習邊測試文件夾\自學PYTHON部分\0035第三十五天

[‘.idea‘, ‘a‘]

[‘1.txt‘, ‘3.txt‘, ‘4.txt‘,‘5.txt‘, ‘6.txt‘, ‘ghlh_python_35th_文件操作_os模塊中有關文件操作的方法(一).py‘,‘ghlh_python_35th_文件

操作_os模塊中有關文件操作的方法(一)的運算結果.txt‘, ‘ghlh_python_35th_文件操作_os模塊中有關文件操作的方法(二).py‘,‘ghlh_python_35th_文件操作_在linux系統下的測試.py‘, ‘ghlh_python_35th_文件操作_在linux系統下的測試的運算結果.txt‘, ‘ghlh_python_35th_文件操作_通過with語句來打開文件.py‘]

I:\MAKEAPP\python\Python365\邊學習邊測試文件夾\自學PYTHON部分\0035第三十五天\.idea

[‘libraries‘]

[‘misc.xml‘, ‘modules.xml‘,‘workspace.xml‘, ‘第三十四天.iml‘]

I:\MAKEAPP\python\Python365\邊學習邊測試文件夾\自學PYTHON部分\0035第三十五天\.idea\libraries

[]

[‘R_User_Library.xml‘]

I:\MAKEAPP\python\Python365\邊學習邊測試文件夾\自學PYTHON部分\0035第三十五天\a

[‘b‘, ‘c‘]

[‘4.txt‘]

I:\MAKEAPP\python\Python365\邊學習邊測試文件夾\自學PYTHON部分\0035第三十五天\a\b

[‘d‘]

[‘2.txt‘]

I:\MAKEAPP\python\Python365\邊學習邊測試文件夾\自學PYTHON部分\0035第三十五天\a\b\d

[]

[‘1.txt‘]

I:\MAKEAPP\python\Python365\邊學習邊測試文件夾\自學PYTHON部分\0035第三十五天\a\c

[]

[‘3.txt‘]

在linux(fedora)下執行下列操作:

obj=os.walk(‘\\home\\pw\\eclipse-workspace\\py1‘)

lstD=list(obj)

print(lstD)

運行結果:

[(‘/home/pw/eclipse-workspace/py1‘,[‘__pycache__‘], [‘.project‘, ‘firstpage.py‘, ‘.pydevproject‘, ‘3.txt‘,‘1.txt‘]), (‘/home/pw/eclipse-workspace/py1/__pycache__‘, [],[‘firstpage.cpython-36.pyc‘])]

四、shutil模塊

使用shutil模塊前必須聲明引用:

import shutil

主要方法如下:

1

copyfile(源文件名,目標文件名)

copy(源文件名,目標文件名)

copy2(源文件名,目標文件名)

上面三個操作都可以完成文件復制操作,但區別如下:

copyfile只復制了文件的內容,而文件的屬性和權限標識等都沒有復制;

copy只復制了文件的內容和權限標識,但沒有復制文件的屬性;

copy2完全復制了文件的全部信息,包括文件內容,文件的屬性與文件的權限標識。

如果源文件不存在 ,將報錯!

【註意】

經測試,在windows下沒有發現三個的太大區別,特別是屬性當中的【隱藏】屬性;此外windows下設置的用戶權限在三個復制命令中,都沒有得到復制。

在linux下的操作區別較為明顯。

2

copytree(源文件夾名,目標文件夾名)

此方法將完整的復制指定的文件夾到目標文件夾,包含所有子文件夾和文件樹。

如果源文件夾不存在 ,將報錯!

3

rmtree(要刪除的文件夾名)

此方法將完全刪除指定的文件夾,同時也就刪除了指定文件夾下的所有子文件夾和文件樹。

如果要刪除的文件夾不存在 ,將報錯!

4

move(源文件名或源文件夾名,目標文件名或文件夾名)

此方法將移動源文件到目標文件位置。

如果要移動的源不存在,將報錯。

五、查找出指定目錄下(不包含子目錄)的符合篩選特征的文件列表

引用聲明:

import glob

使用glob模塊的glob()方法可以列出符合篩選條件的文件列表,返回的是絕對文件名組成的叠代器:

1

glob.glob(篩選條件的文件名的純文件名部分沒有路徑信息)

這種方法是指在當前Py文件的當前目錄下查找符合【篩選條件的文件名】列表

篩選字符串支持通配符號:*

2

glob.glob(指定的盤符及路徑同時指定篩選文件名)

這時相當於指定了絕對路徑

這兩種情況都只傳遞了一個參數。

如果指定的文件夾不存在 ,將報錯。

測試如下:

files=glob.glob(‘*.txt‘)

for a in files:

print(a)

print(‘----下面是指定絕對路徑的測試--------‘)

files=glob.glob(‘I:\\MAKEAPP\\python\\Python365\\邊學習邊測試文件夾\\自學PYTHON部分\\0035第三十五天\\*.py‘)

for a in files:

print(a)

運行結果:

1.txt

3.txt

4.txt

5.txt

6.txt

ghlh_python_35th_文件操作_os模塊中有關文件操作的方法(一)的運算結果.txt

ghlh_python_35th_文件操作_在linux系統下的測試的運算結果.txt

----下面是指定絕對路徑的測試--------

I:\MAKEAPP\python\Python365\邊學習邊測試文件夾\自學PYTHON部分\0035第三十五天\ghlh_python_35th_文件操作_os模塊中有關文件操作的方法(一

).py

I:\MAKEAPP\python\Python365\邊學習邊測試文件夾\自學PYTHON部分\0035第三十五天\ghlh_python_35th_文件操作_os模塊中有關文件操作的方法(二

).py

I:\MAKEAPP\python\Python365\邊學習邊測試文件夾\自學PYTHON部分\0035第三十五天\ghlh_python_35th_文件操作_在linux系統下的測試.py

I:\MAKEAPP\python\Python365\邊學習邊測試文件夾\自學PYTHON部分\0035第三十五天\ghlh_python_35th_文件操作_通過with語句來打開文件.py

——————————

今天整理的學習筆記完成,最後例行說明下我的自學思路:

根據過去多年我自學各種編程語言的經歷,認為只有真正體驗式,解決實際問題式的學習才會有真正的效果,即讓學習實際發生。在2004年的時候我開始在一個鄉村小學自學電腦 並學習vb6編程語言,沒有學習同伴,也沒有高師在上,甚至電腦都是孤島(鄉村那時還沒有網絡),有的只是一本舊書,在痛苦的自學摸索中,我找到適應自己零基礎的學習方法:首先是每讀書的一小節就作相應的手寫筆記,第二步就是上機測試每一個筆記內容是否實現,其中會發現書中講的其實有出入或錯誤,第三步就是在上機測試之後,將筆記改為電子版,形成最終的修訂好的正確無誤的學習筆記。

通過反復嘗試錯誤,在那個沒有分享與交流的黑暗時期我摸黑學會了VB6,爾後接觸了其它語言,也曾聽過付費視頻課程,結果發現也許自己學歷果然太低,就算是零基礎的入門課程,其實也難以跟上進度,講師的教學多數出現對初學者的實際情況並不了解的情況,況且學習者的個體也存在差異呢?當然更可怕的是收費課程的價格往往是自己難以承受的。

於是我的所有編程學習都改為了自學,繼續自己的三步學習筆記法的學習之路。

當然自學的最大問題是會走那麽多的彎路,沒有導師直接輸入式的教學來得直接,好在網絡給我們帶來無限搜索的機會,大家在網絡上的學習日誌帶給我們共享交流的機會,而QQ群等交流平臺、網絡社區的成立,我們可以一起自學,互相批評交流,也可以獲得更有效,更自主的自學成果。

於是我以人生已過半的年齡,決定繼續我的編程自學之路,開始學習python,只希望與大家共同交流,一個人的獨行是可怕的,只有一群人的共同前進才是有希望的。

誠摯期待您的交流分享批評指點!歡迎聯系我加入從零開始的自學聯盟。

這個時代互聯網成為了一種基礎設施的存在,於是本來在孤獨學習之路上的我們變得不再孤獨,因為網絡就是一個新的客廳,我們時刻都可以進行沙龍活動。

非常樂意能與大家一起交流自己自學心得和發現,更希望大家能夠對我學習過程中的錯誤給予指點——是的,這樣我就能有許多免費的高師了——這也是分享時代,社區時代帶來的好福利,我相信大家會的,是吧!

根據完全共享的精神,開源互助的理念,我的個人自學錄制過程是全部按4K高清視頻錄制的,從手寫筆記到驗證手寫筆記的上機操作過程全程錄制,但因為4K高清文件太大均超過5G以上,所以無法上傳至網絡,如有需要可聯系我QQ578652607對傳,樂意分享。上傳分享到百度網盤的只是壓縮後的720P的視頻。

我的學習過程錄像百度盤地址分享如下:(清晰度:1280x720)

鏈接:https://pan.baidu.com/s/1dD1ArqpUO4DHO_Pxw3K5PA 密碼:ruem

Bilibili:

https://www.bilibili.com/video/av37645205/

喜馬拉雅語音筆記:

https://www.ximalaya.com/keji/19103006/144111442

技術分享圖片

技術分享圖片

技術分享圖片

孤荷淩寒自學python第三十五天python的文件操作之針對文件操作的os模塊的相關內容