孤荷淩寒自學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模塊的相關內容