1. 程式人生 > >第八章 永久存儲[DDT書本學習 小甲魚]【3】

第八章 永久存儲[DDT書本學習 小甲魚]【3】

寫入文本 切換 遞歸 分別是 recent 並且 ati etc sts

技術分享圖片

8.2 文件系統:介紹一個高大上的東西
Python自身帶有很多使用的模塊。
比如random模塊的randint()函數生成隨機數,不能直接調用,要引入。
import random
random.randint(0,9)
========================================================
OS模塊,就是Operating System的縮寫,意思是操作系統,平時說的ios是指
iPhone OS的意思,蘋果操作系統。
Python是跨平臺語言,同樣代碼在不同的操作系統不需要修改代碼。
有了OS模塊,不需要關系系統,OS模塊會幫我們選擇合適的模塊並且調用。
---------------------------------------------------------------------------
表8-3 OS模塊中關於 文件/目錄 常用的函數使用方法
getcwd()返回當前工作目錄
chdir(path)改變工作目錄
listdir(path=".")列舉指定目錄的文件名("."表示當前目錄,".."表示上一級目錄)
-------------------------------
mkdir(path)創建單層目錄,如果存在則拋出異常
makedirs(path)遞歸創建多層目錄,目錄存拋異,註意"E:\\a\\b"和"E:\\a\\c"不沖突
-----------------------------------
remove(path)刪除文件
--------------------------------------
rmdir(path)刪除單層目錄,如果該目錄非空則拋出異常
removedirs(path)遞歸刪除目錄,從子目錄到父目錄逐層嘗試刪除,遇到非空拋出異常
----------------------------------------
rename(ole,new)將文件ole重命名為new
----------------------------------------
system(command)運行系統shell命令
---------------------------------------------------------------------------
1.getcwd() 經常用來獲取應用程序當前工作目錄
import os
print(os.getcwd())
----------------------
C:\PycharmProjects\my1

2.chdir(path)改變當前工作目錄,比如切換到E盤
import os
print(os.getcwd())
os.chdir("E:\\")
print(os.getcwd())
-------------------
C:\PycharmProjects\my1
E:\

3.listdir(path=".") 當前目錄下的文件和子目錄,列舉出來。".."代表上層目錄。
import os
print(os.chdir("E:\\迅雷下載\\"))
print(os.listdir(".."))
-----------------------------
[‘$RECYCLE.BIN‘, ‘PCKii‘, ‘System Volume Information‘, ‘u盤‘, ‘元旦會‘, ‘壁紙‘, ‘電影‘, ‘迅雷下載‘]

4.mkdir(path)創建文件夾,如果存在,報異常。
import os
os.chdir("E:\\")
os.mkdir("test")
print(os.listdir(‘.‘))
----------------------------
[‘$RECYCLE.BIN‘, ‘PCKii‘, ‘System Volume Information‘, ‘test‘, ‘u盤‘, ‘元旦會‘, ‘壁紙‘, ‘電影‘, ‘迅雷下載‘]
================再次運行程序,結果如下========================
Traceback (most recent call last):
File "C:/PycharmProjects/my1/t2.py", line 3, in <module>
os.mkdir("test")
FileExistsError: [WinError 183] 當文件已存在時,無法創建該文件。: ‘test‘

5.makedirs(path)創建多層目錄 目錄存在拋出異常
import os
os.chdir("E:\\")
os.makedirs(r".\a\b\c") # r".\a\b\e" 不拋出; r".\a\b"拋出異常

6.remove()刪除指定的文件
rmdir(path)刪除目錄
removedirs()刪除多層目錄
===========開始我的表演========================
import os
os.chdir("E:\\")

print("起始情況:")
print(os.listdir())


print("創建工作:")
open(os.getcwd()+"test.txt","w")
os.mkdir("a")
os.makedirs(r".\b\c\d")
print(os.listdir())

print("刪除工作:")
os.remove("test.txt")
os.rmdir("a")
os.removedirs(r".\b\c\d")
print(os.listdir())
--------------------------------------
起始情況:
[‘$RECYCLE.BIN‘, ‘PCKii‘, ‘System Volume Information‘, ‘u盤‘, ‘元旦會‘, ‘壁紙‘, ‘電影‘, ‘迅雷下載‘]
創建工作:
[‘$RECYCLE.BIN‘, ‘a‘, ‘b‘, ‘PCKii‘, ‘System Volume Information‘, ‘test.txt‘, ‘u盤‘, ‘元旦會‘, ‘壁紙‘, ‘電影‘, ‘迅雷下載‘]
刪除工作:
[‘$RECYCLE.BIN‘, ‘PCKii‘, ‘System Volume Information‘, ‘u盤‘, ‘元旦會‘, ‘壁紙‘, ‘電影‘, ‘迅雷下載‘]

7.rename(old,new) 重命名文件或者文件名
import os
os.chdir(r"E:\test")
print(os.listdir())
os.rename("a","b")
os.rename("tanke.txt","plane.txt")
print(os.listdir())
---------------------------
[‘a‘, ‘tanke.txt‘]
[‘b‘, ‘plane.txt‘]
========================================

8.system(command)每個操作系統都會提供一些小工具,用於調用。
os.system("calc") 調用系統的計算器

9.walk(top)有時候非常有用,遍歷top參數制定路徑下的素有子目錄,並且返回一個
三元組(路徑,[包含目錄],[包含文件])
代碼如下
import os
os.chdir("E:\\")
for i in os.walk("test"):
print(i)
--------------------------------
(‘test‘, [‘bin‘, ‘obj‘], [‘20fdgfdgfd.ico‘, ‘chinaz4.ico‘])
(‘test\\bin‘, [‘Debug‘], [])
(‘test\\bin\\Debug‘, [‘app.publish‘], [‘搗蛋頭-電話騷擾器.exe‘, ‘搗蛋頭-電話騷擾器.exe.manifest‘])
(‘test\\bin\\Debug\\app.publish‘, [‘Application Files‘], [‘setup.exe‘, ‘WindowsFormsApplication14.application‘])
(‘test\\bin\\Debug\\app.publish\\Application Files‘, [‘WindowsFormsApplication14_1_2_4_2‘], [])
(‘test\\bin\\Debug\\app.publish\\Application Files\\WindowsFormsApplication14_1_2_4_2‘, [], [‘20fdgfdgfd.ico.deploy‘, ‘chinaz4.ico.deploy‘])
(‘test\\obj‘, [‘x86‘], [])
(‘test\\obj\\x86‘, [‘Debug‘], [])
(‘test\\obj\\x86\\Debug‘, [‘TempPE‘], [‘DesignTimeResolveAssemblyReferences.cache‘, ‘DesignTimeResolveAssemblyReferencesInput.cache‘, ‘GenerateResource.read.1.tlog‘, ‘GenerateResource.write.1.tlog‘])
(‘test\\obj\\x86\\Debug\\TempPE‘, [], [])
=============================================================
另外,path模塊還提供了一些實用的定義,分別是:
os.curdir 表示當前目錄
os.pardir 表示上一級目錄("..")
os.sep 表示路徑的分隔符 windows系統為"\\" 而Linux為"/"
os.linesep 表示當前平臺使用的行終止符 windows系統為"\r\n" 而Linux為"\n"
os.name 表示當前使用的操作系統 Windows 返回 ‘nt‘; Linux 返回’posix‘。
=============================================================================

另一個強大的【模塊是os.path】,它可以完成一些針對路徑名的操作,如表所示【略】
列舉幾個,介紹如下:
10.basename(path)和dirname(path)分別用於獲取文件名和路徑名,舉例
import os
print(os.path.dirname(r"a\b\test.txt"))
print(os.path.basename(r"a\b\test.txt"))
--------------------------------------------
a\b
test.txt

=============================

11.join(path1,path2)與BIF的那個join()不同,os.path.join()用於路徑和文件名組合
成為完整路徑。
import os
k=os.path.join(r"C:\Python37\Test","FishC.txt")
print(k)
------------------
C:\Python37\Test\FishC.txt
===========================================================

12.split(path)和splitext(path) 都是用於分割路徑。
第一個比較盲目,如果全是目錄,就會把最後一個目錄當文件名,第二個高級智能一些。
示例如下:
import os
a=os.path.split("C:\Python37\Test\FishC.txt")
b=os.path.splitext("C:\Python37\Test\FishC.txt")
c=os.path.split("C:\Python37\Test")
print(a)
print(b)
print(c)
-----------------------------------------------------
(‘C:\\Python37\\Test‘, ‘FishC.txt‘)
(‘C:\\Python37\\Test\\FishC‘, ‘.txt‘)
(‘C:\\Python37‘, ‘Test‘)

13.getsize(file) 返回文件的大小,字節為單位
import os
os.chdir(r"D:\360Downloads\Software")
print(os.path.getsize("360.exe"))
-------------------------------
11912512
===========================

14.getatime(file),getctime(file)和getmtime(file)
最近訪問時間-----創建時間-----修改時間
不過返回的是浮點型秒數,用time模塊的gmtime()或localtime()換算。
示例代碼如下:
import time
import os
os.chdir(r"D:\360Downloads\Software")
temp=time.localtime(os.path.getatime("360.exe"))
print("文件被訪問的時間是:",time.strftime("Y% %b %d %H:%M:%S",temp))
------------------------------------------------------------------
文件被訪問的時間是: 2019 Feb 05 21:28:43
----------------個人小結-----------------------
import time
import os
print(time.strftime("%Y%b%d %H:%M:%S",time.localtime(time.time())))
先是由time.time()得到當前時間的浮點值
再由time.localtime()進行元組整理
最後由time.strftime()格式化展示出來
==========================================================================
================================= pickle 腌制美味泡菜 ====================
1 從文件讀取字符串很簡單,但是要讀取數值,就要多費周折。
無論read()還是readline()方法,返回的都是一個字符串,如果要從字符串中提取數值,
可以使用int()或者float()把類似“123”或者“3.14”的字符串強制轉化。
2 以前保存文本容易,但是要保存的數據如列表,字典甚至是類的實例這些更復雜的數據類型,
普通文件操作就不知所措了,也許你會把他們全部轉換為字符串,再寫入文本進行保存,但
是,要把這個過程反過來,文本恢復數據到對象,那就異常麻煩了。
所以,模塊出現了,這個就是pickle模塊。
========================== pickle模塊 =========================
import pickle
my = [123, 3.14, "導彈頭", ["其它列表"]]
f = open(r"C:\Users\Daodantou\Desktop\ri.bo", "wb")
pickle.dump(my,f) #拿泡菜罐 放入東西 壓緊保存
f.close()
-------------------------------已經保存,但是打開是亂碼------------------
import pickle
e = open("C:\\Users\\Daodantou\\Desktop\\ri.bo", "rb")
my1 = pickle.load(e) #取出泡菜
print(my1)
e.close()
------------------------------正常讀取文件到程序-------------------------

第八章 永久存儲[DDT書本學習 小甲魚]【3】