欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

自學Python:python中的OS模塊與pickle模塊

系統(tǒng) 1812 0

OS模塊

OS就是Operating System的縮寫,意為操作系統(tǒng),這可是一個非常高大上的模塊,因為在python中,對于文件系統(tǒng)的訪問就是通過OS模塊來實現(xiàn)的。我們所知道常用的操作系統(tǒng)就有Windows、Mac OS、Linux、UNIX等,這些操作系統(tǒng)底層對于文件系統(tǒng)的訪問工作原理是不一樣的,因此你可能就要針對不同的系統(tǒng)來考慮使用哪些文件系統(tǒng)模塊,這樣的做法是非常麻煩的,因為如果程序的運行環(huán)境一旦改變,你就要相應的去修改大量的代碼來應付。

但是python是一種跨平臺的語言,同樣的源代碼在不同的操作系統(tǒng)不需要修改就可以同樣實現(xiàn),有了OS模塊,不需要關(guān)心什么操作系統(tǒng)下使用什么模塊,OS模塊會幫你選擇正確的模塊并調(diào)用。

下面是OS模塊中關(guān)于文件/目錄常用的函數(shù)的使用方法:

函數(shù)名 使用方法
getcwd() 返回當前的工作目錄
chdir(path) 改變當前工作目錄
listdir(path=’.’) 列舉指定目錄中的文件名(‘.’表示當前目錄,’..'表示上一級目錄)
mkdir(path) 創(chuàng)建一個單層空目錄,如果該目錄已經(jīng)存在則會拋出異常
makedirs(path) 遞歸的創(chuàng)建多層目錄,如果內(nèi)層目錄已經(jīng)存在則報錯,('E:/a/b’和’E:/a/c’不會沖突)
remove(path) 刪除文件
rmdir(path) 刪除一個單層目錄,如果目錄非空則拋出異常
removedirs(path) 遞歸的刪除一系列目錄,從子目錄到父目錄逐層嘗試刪除,遇到非空目錄拋出異常
rename(old, new) 重命名
system(command) 運行系統(tǒng)的shell命令
以下是支持路徑操作中常用到的一些定義,支持所有平臺
os.curdir 指代當前目錄 == (’.’)
os.pardir 指代上一級目錄 == (’..’)
os.sep 輸出操作系統(tǒng)特定的路徑分隔符(在windows下為’\\’,Linux下為‘/’)
os.linesep 當前平臺使用的行終止符(在Windows下為’\r\n’,Linux下為’\n’)
os.name 指代當前實用的操作系統(tǒng)(包括’posix’、‘nt’、‘mac’、‘os2’、‘ce’、‘java’)

1、 getcwd()
有些情況下我們需要獲得應用程序當前的工作目錄(比如要保存臨時文件),那么可以使用getcwd()函數(shù)獲得:

            
              >>> import os
>>> os.getcwd()
'E:\\Program Files (x86)\\python37-32'

            
          

在這里插入圖片描述
2、 chdir(path)

            
              >>> os.chdir('E:/a')
>>> os.getcwd()
'E:\\a'

            
          

在這里插入圖片描述
3、listdir(path = ‘.’)
有時候你可能需要知道當前工作目錄下有哪些文件和子目錄,那么listdir()函數(shù)可以幫你列舉出來。path參數(shù)用于指定列舉的目錄,默認值是’.’,代表根目錄,也可以使用’..'代表上一級目錄:

            
              >>> os.chdir('E:/Program Files')
>>> os.listdir(path = '.')
['Tencent', 'YouKu']

            
          

在這里插入圖片描述

            
              os.listdir('./Tencent')

            
          

在這里插入圖片描述
4、mkdir(path)
mkdir()函數(shù)用于創(chuàng)建文件夾,如果該文件夾存在,則拋出FileExistsError異常:
在這里插入圖片描述
在這里插入圖片描述
5、makedirs(path)
makedirs()函數(shù)可用于創(chuàng)建多層目錄,用過linux系統(tǒng)的都知道,在linux中的話,要建立多層目錄可以使用 mkdir /A/B/C/D -p

            
              >>> os.chdir('E:/a')
>>> os.listdir()
>>> ['B']
>>> os.makedirs('E:/a/A/B/C')
>>> os.listdir('E:/a/')
['A', 'B']
>>> os.listdir('E:/a/A/B/')
['C']

            
          

自學Python:python中的OS模塊與pickle模塊_第1張圖片

自學Python:python中的OS模塊與pickle模塊_第2張圖片
6、remove(path)、rmdir(path)和removedirs(path)
remove()函數(shù)用于刪除指定的文件,注意是刪除文件,不是刪除目錄。如果需要刪除目錄,則用rmdir()函數(shù);如果要刪除多層目錄,則用removedirs()函數(shù)。

            
              >>> os.chdir('E:/A/A/B/C')
>>> os.listdir()
['test.txt']
>>> os.remove('test.txt')
>>> os.listdir()
[]
>>> os.chdir('E:/A/A/B/')
>>> os.listdir()
['C']
>>> os.rmdir('C')
>>> os.listdir()
[]
>>> os.chdir('E:/A/')
>>> os.removedirs('E:/A/A/B')
>>> os.listdir()
['B']

            
          

7、rename(old, new)
rename()函數(shù)用于重命名文件或者文件夾

            
              >>> os.listdir()
['B']
>>> os.rename('B', 'TEST_DIR')
>>> os.listdir()
['TEST_DIR']
>>> os.chdir('TEST_DIR')
>>> os.listdir()
['C', 'test2.txt']
>>> os.rename('test2.txt', 'new_test.txt')
>>> os.listdir()
['C', 'new_test.txt']

            
          

自學Python:python中的OS模塊與pickle模塊_第3張圖片
8、system(command)
os模塊的這個方法我個人感覺在linux系統(tǒng)中非常好用,在一些運維自動化腳本中用的非常頻繁,當然在windows中也可以用,幾乎每個操作系統(tǒng)都會提供一些小工具,system()函數(shù)用于使用這些小工具,她或使用相應的命令將這些工具調(diào)出來,比如說windows中的計算器,在dos窗口我們需要使用calc命令調(diào)出,因此,在python中我們可以使用system()函數(shù)調(diào)用計算器

            
              >>> os.system('calc')

            
          

自學Python:python中的OS模塊與pickle模塊_第4張圖片
9、walk(top)
最后是walk()函數(shù),這個函數(shù)在有些時候確實非常有用,可以省去很多麻煩。該函數(shù)的作用是遍歷top參數(shù)指定路徑下的所有子目錄,并將結(jié)果返回一個三元組(路徑,[包含目錄],[包含文件])。看一下下面的例子:

            
              >>> os.getcwd()
'E:\\A'
>>> for i in os.walk('.'):
 print(i)
 
('.', ['TEST_DIR', 'TEST_DIR2'], [])
('.\\TEST_DIR', ['C'], ['new_test.txt'])
('.\\TEST_DIR\\C', ['gd0306'], ['test.png'])
('.\\TEST_DIR\\C\\gd0306', [], ['gd0306.txt'])
('.\\TEST_DIR2', ['NEW_DIR'], ['test2.txt'])
('.\\TEST_DIR2\\NEW_DIR', [], ['test3.txt'])

            
          

自學Python:python中的OS模塊與pickle模塊_第5張圖片

os.path

除了上面提到的os模塊的一些功能外,還有一個強大的模塊是os.path,它可以完成一些針對路徑名的操作。其常用的函數(shù)方法有:

函數(shù)名 使用方法
basename(path) 去掉目錄路徑,單獨返回文件名
dirname(path) 去掉文件名,單獨返回目錄路徑
join(path1[,path2[, …]]) 將path1和path2各部分組合成一個路徑名
split(path) 分割文件名與路徑,返回(f_path, f_name)元祖。如果完全使用目錄,他也會講最后一個目錄作為文件名分離,且不會判斷文件或者目錄是否存在
splitext(path) 分離文件名與擴展名,返回(f_name, f_extension)元祖
getsize(file) 返回指定文件的尺寸,大小為字節(jié)
getatime(file) 返回指定文件最近的訪問時間(浮點型秒數(shù),可用time模塊的gmtime()或localtime()函數(shù)換算)
getctime(file) 返回指定文件的創(chuàng)建時間(浮點型秒數(shù),可用time模塊的gmtime()或者localtime()換算)
getmtime(file) 返回指定文件最新的修改時間(浮點型秒數(shù),可用time模塊的gmtime()或者localtime()換算)

以下為函數(shù)返回True或者False

函數(shù)名 使用方法
exists(path) 判斷指定路徑(目錄或者文件)是否存在
isabs(path) 判斷指定路徑是否為絕對路徑
isdir(path) 判斷指定路徑是否存在且是一個目錄
isfile(path) 判斷指定路徑是否存在且是一個文件
islink(path) 判斷指定路徑是否存在且是一個符號鏈接(軟連接)
ismount(path) 判斷指定路徑是否存在且是一個掛載點
samefile(path1, path2) 判斷path1和path2兩個路徑是否指向同一個文件

1、basename(path)和dirname(path)
basename()和dirname()函數(shù)分別用于獲得文件名和路徑名:

            
              >>> os.path.dirname(r'E:/A/TEST_DIR/new_test.txt')
'E:/A/TEST_DIR'
>>> os.path.basename(r'E:/A/TEST_DIR/new_test.txt')
'new_test.txt'

            
          

在這里插入圖片描述
2、join(path1[,path2[, …]])
join()函數(shù)跟BIF的那個join()函數(shù)不同,os.path.join()是用于將路徑名和文件名組合成一個完整的路徑,這個目錄路徑和文件都可以不存在:

            
              >>> os.path.join(r'E:/A/TEST_DIR', 'gd.txt')
'E:/A/TEST_DIR\\gd.txt'
>>> os.path.join(r'E:/A/TEST_DIR3', 'gd.txt')
'E:/A/TEST_DIR3\\gd.txt'

            
          

3、split(path)和splitext(path)
split()和splitext()函數(shù)都用于分割路徑,split()函數(shù)分割路徑和文件名(如果完全使用目錄,他也會將最后一個目錄作為文件名分離,且不會判斷文件或者目錄是否存在);splitext()函數(shù)則是用于分割文件名和擴展名:

            
              >>> os.path.split('E:/A/TEST_DIR/new_test.txt')
('E:/A/TEST_DIR', 'new_test.txt')
>>> os.path.splitext('E:/A/TEST_DIR/new_test.txt')
('E:/A/TEST_DIR/new_test', '.txt')

            
          

在這里插入圖片描述
4、getsize(file)
getsize()函數(shù)用于獲取文件的尺寸,返回值是以字節(jié)為單位的:

            
              >>> os.path.getsize('E:/A/TEST_DIR/new_test.txt')
2170

            
          

在這里插入圖片描述
5、getatime()、getctime()、getmtime()
這三個函數(shù)分別用于獲取文件的最近訪問時間、創(chuàng)建時間和修改時間。不過返回值是浮點型秒數(shù),可用time模塊的gmtime()或localtime()函數(shù)換算:

            
              >>> import time
>>> temp = time.localtime(os.path.getatime('E:/A/TEST_DIR/new_test.txt'))
>>> print('E:/A/TEST_DIR/new_test.txt 被訪問的時間是:', time.strftime('%d %b %Y %H: %M: %S', temp))
E:/A/TEST_DIR/new_test.txt 被訪問的時間是: 23 May 2019 22: 12: 44
>>> 
>>> temp = time.localtime(os.path.getctime('E:/A/TEST_DIR/new_test.txt'))
>>> print('E:/A/TEST_DIR/new_test.txt 被創(chuàng)建的時間是:', time.strftime('%d %b %Y %H: %M: %S', temp))
E:/A/TEST_DIR/new_test.txt 被創(chuàng)建的時間是: 23 May 2019 20: 49: 56
>>> 
>>> temp = time.localtime(os.path.getmtime('E:/A/TEST_DIR/new_test.txt'))
>>> print('E:/A/TEST_DIR/new_test.txt 被修改的時間是:', time.strftime('%d %b %Y %H: %M: %S', temp))
E:/A/TEST_DIR/new_test.txt 被修改的時間是: 23 May 2019 22: 12: 44

            
          

自學Python:python中的OS模塊與pickle模塊_第6張圖片

pickle:泡菜?

pickle是python提供的一個標準模塊,使用這個模塊,可以非常容易地將列表、字典這類復雜數(shù)據(jù)類型存儲為文件了。
pickle就是泡菜,腌菜的意思,用官方文檔中的話說,這是一個令人驚嘆的模塊,它幾乎可以把所有python的對象都轉(zhuǎn)化為二進制的形式存放,這個過程稱為pickling,那么從二進制形式轉(zhuǎn)化會對象的過程稱為unpickling。
我們來舉一個將列表數(shù)據(jù)保存到文件的例子:

            
              import pickle as p

my_list = [123, 345, 'pythoner', [12, 34, 56]]

# 使用二進制可寫的方式創(chuàng)建一個文件
pickle_file = open('E:/A/TEST_DIR/C/my_list.pkl', 'wb')

# 使用pickle模塊的dump方法將數(shù)據(jù)保存到創(chuàng)建的.pkl文件中
p.dump(my_list, pickle_file)

# 關(guān)閉文件
pickle_file.close()

            
          

運行這段python代碼之后,就會出現(xiàn)my_list.pkl這個文件,里面存儲的數(shù)據(jù)格式為二進制,所以要打開的話要以二進制方式打開,還有這個文件的后綴名是隨意的,使用pkl是為了方便記憶與分辨。

自學Python:python中的OS模塊與pickle模塊_第7張圖片
自學Python:python中的OS模塊與pickle模塊_第8張圖片
我們要想在python中將之前保存到文件的列表數(shù)據(jù)還原,就需要在python中以二進制可讀的方式打開pkl文件,隨后再使用pickle模塊的load方法將數(shù)據(jù)加載進來

            
              import pickle as p

# 使用二進制可讀的方式打開之前保存列表數(shù)據(jù)的pkl文件
pickle_file = open('E:/A/TEST_DIR/C/my_list.pkl', 'rb')

# 調(diào)用pickle模塊的load方法將列表數(shù)據(jù)加載到my_list對象中
my_list = p.load(pickle_file)
print(my_list)

            
          

運行這段代碼就可以得到我們之前的列表了
在這里插入圖片描述
利用pickle模塊不但可以保存列表數(shù)據(jù),其實他可以保存任何你能想象到的東西!!!


更多文章、技術(shù)交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 日本精品在线 | 国产精品久久久久久久久免费 | 日日操夜夜 | 国产美女啪啪 | 婷婷久久无码欧美人妻 | 色综合久久98天天综合 | www.天堂av.com | 亚洲精品无码国产爽快A片百度 | 特级丰满少妇一级aaaa爱毛片 | 五月天激激婷婷大综合丁香 | 亚洲国产一区二区三区四区五区 | 久久精品无码一区二区日韩av | 日麻批免费视频 | 日本黄视频在线观看 | 国产野花视频天堂视频免费 | 国产一区二区三区日韩欧美 | 深夜影院破解版免费vip | 精品国产一区二区三区四 | 久久国产欧美日韩精品 | 日韩a| 91视频在线 | 国产在线精品一区二区三区 | 高清一区二区亚洲欧美日韩 | 日色网站 | 免费精品久久 | 久久99精品久久久久久噜噜 | 欧美综合中文字幕久久 | 国产精品三级久久久久久电影 | 欧美成人精品一区二区三区 | 国产成年人网站 | 国产在线精品一区二区三区 | 91亚洲免费视频 | 青草福利 | 二区视频 | 午夜网站入口 | 色播在线永久免费视频网站 | 色精品一区二区三区 | 日本亚洲a | 欧洲色图亚洲色图 | 狠狠操狠狠搞 | 亚洲精品国产成人 |