日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

文本操作的相关概念和方法+pickle序列化+csv文件操作+操作系统命令(os和os.path)+shutil模块+zipfile模块+递归算法打印目录树

發(fā)布時(shí)間:2023/12/20 windows 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 文本操作的相关概念和方法+pickle序列化+csv文件操作+操作系统命令(os和os.path)+shutil模块+zipfile模块+递归算法打印目录树 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

?

一、文件操作

1、文本文件和二進(jìn)制文件

2、文件操作相關(guān)模塊概述

3、文件文本的寫入

4、中文亂碼問題的解決

5、close()關(guān)閉文件流——try異常管理

6、關(guān)閉流要點(diǎn):_with上下文管理_現(xiàn)場(chǎng)還原

?7、文本文件的讀取:

read([size])

readline()

readlines()

8、enumerate()函數(shù)和推導(dǎo)式生成列表,操作每行增加行號(hào)

9、二進(jìn)制文件的讀取和寫入

10、文件對(duì)象常用方法和屬性總結(jié)

11、使用pickle序列化

12、csv文件的操作

?二、操作系統(tǒng)命令

1、os模塊

(1)os調(diào)用操作系統(tǒng)文件和命令

<1>os 調(diào)用系統(tǒng)文件和命令

<2>os模塊操作文件

三、shutil模塊和zipfile模塊(拷貝和壓縮)

?四、遞歸算法

1、遞歸算法

2、遞歸算法原理——目錄樹結(jié)構(gòu)展示


一、文件操作

前面寫的程序數(shù)據(jù)沒有實(shí)際的存儲(chǔ),執(zhí)行完數(shù)據(jù)就消失了。

1、文本文件和二進(jìn)制文件

(1)文本文檔,儲(chǔ)存的是普通的“字符”文本,python默認(rèn)為unicode字符集(兩個(gè)字節(jié)表示一個(gè)字符65536個(gè)),可以用記事本程序打開,但是,word編輯的文本不是文本文件;

(2)二進(jìn)制文件把數(shù)據(jù)內(nèi)容用“字節(jié)”進(jìn)行存儲(chǔ),無法用記事本打開,必須使用專用的軟件進(jìn)行解碼,常見的有:MP4視頻文件、MP3音頻文件、JPG圖片、doc文檔等

2、文件操作相關(guān)模塊概述

創(chuàng)建文件對(duì)象open()

這個(gè)對(duì)象映射到實(shí)際的文件中

f = open(文件名,或者是錄入全路徑,打開方式)

當(dāng)輸入的是全路徑時(shí),前面可以加r,減少了“\”的輸入讓pychram知道它不是轉(zhuǎn)義字符

r:讀read模式

w:寫write模式,如果文件不存在則創(chuàng)建,存在則重新寫內(nèi)容

a:追加模式,如果文件不存在則創(chuàng)建,如果文件存在,則在文件末尾追加內(nèi)容;

b:二進(jìn)制模式(可與其他模式組合使用)

+:讀寫模式(可與其他模式組合使用)

如果是bw是以二進(jìn)制形式寫文件

如果沒有增加b,則是以字符形式處理文件

3、文件文本的寫入

基本的文件寫入操作:
(1)創(chuàng)建文件對(duì)象;

(2)寫入數(shù)據(jù);

(3)關(guān)閉文件對(duì)象,通過close關(guān)閉python進(jìn)行的文件操作以及os操作系統(tǒng)打開的文件

只有操作程序才有調(diào)用硬盤,所以如果不調(diào)用操作系統(tǒng)的資源,還打開資源,就造成了資源的浪費(fèi),所以有必要進(jìn)行關(guān)閉。

4、中文亂碼問題的解決

當(dāng)我在python里面寫了這樣一段代碼,生成的b.txt文件內(nèi)部產(chǎn)生的是一個(gè)亂碼的結(jié)果

(1)常見的編碼介紹

?

注:目前的項(xiàng)目用的普遍是UTF—8

python用unicode來編碼,實(shí)際存儲(chǔ)的時(shí)候可能用的是GBK,也有可能是UTF—8(圖里有寫錯(cuò)的地方,注意一下,python里面實(shí)際儲(chǔ)存有可能是utf—8或者GBK

(2)中文亂碼問題:

編碼的時(shí)候用的是unicode,但是實(shí)際儲(chǔ)存的時(shí)候,windows和linux有區(qū)別

windows操作系統(tǒng)默認(rèn)的編碼是GBK,linux操作系統(tǒng)默認(rèn)的編碼是UTF—8

由于在windows操作系統(tǒng)中將文件儲(chǔ)存為了GBK的形式,我們打開的時(shí)候也應(yīng)該以GBk的格式打開:右擊文件b.txt,選擇file encoding,選擇GBK

對(duì)于上述亂碼的文件可以選擇編碼系統(tǒng)GBK即可正常顯示文字

或者在代碼里寫出用utf—8來編碼

f = open(r"b.txt", "w") f.write("西安電子科技大學(xué)\n小星星\n18歲\n天下第一美") f.close()f = open(r"c.txt", "w", encoding="utf—8") #用utf—8進(jìn)行編碼 f.write("西安電子科技大學(xué)\n小星星\n18歲\n天下第一美") f.close()

?

5、close()關(guān)閉文件流——try異常管理

由于文件底層是由操作系統(tǒng)控制的,所以我們打開文件對(duì)象必須顯示調(diào)用close()方法關(guān)閉文件對(duì)象。當(dāng)調(diào)用close()方法時(shí),首先會(huì)把緩沖區(qū)數(shù)據(jù)寫入文件,也可以直接調(diào)用flush(),再關(guān)閉文件,釋放文件對(duì)象。

write()/writelines()寫入數(shù)據(jù)

write(a):把字符串a(chǎn)寫入到文件中;

writelines(b):把字符串列表寫入文件中,換行符需要自己加

try:f = open(r"c.txt", "a", encoding="utf—8")print()f.write("小星星\n") exceopt BaseException as e:print(e)finally:f.close()

當(dāng)使用close()方法時(shí),首先會(huì)把緩沖區(qū)數(shù)據(jù)寫入文件,然后再關(guān)閉文件,釋放資源

6、關(guān)閉流要點(diǎn):_with上下文管理_現(xiàn)場(chǎng)還原

with上下文管理器可以自動(dòng)管理上下文資源,不論什么原因跳出with塊,都可以確保文件正常關(guān)閉,并且可以在代碼執(zhí)行文筆后自動(dòng)還原進(jìn)該代碼塊的現(xiàn)場(chǎng)

s = ["高宇星\n", "韓敏\n", "燕子\n", "胖頭魚\n"]with open("c.txt", "w",encoding="utf—8") as f:f.writelines(s)

?7、文本文件的讀取:

read([size])

從文件中讀取size字符,并作為結(jié)果返回。如果沒有size參數(shù),則讀取整個(gè)文件——從頭到尾。

with open(r"e.txt", "r", encoding="utf—8") as f:str = f.read()print(str)''' I love you! xidian litterStar ''' with open(r"e.txt", "r", encoding="utf—8") as f:str = f.read(3)print(str)#壓力大

readline()

讀取一行內(nèi)容作為結(jié)果返回。讀取文件末尾,會(huì)返回字符串

with open(r"e.txt", "r",encoding="utf—8") as f:for a in f:print(a, end=" ") #end = “ ” ——不換行 ''' 壓力大I love you!xidianlitterStar0 '''#另一種方法 with open(r"e.txt", "r", encoding="utf—8") as f:while True:fragement = f.readline()if not fragement:breakelse:print(fragement, end="")''' 壓力大 I love you! xidian litterStar '''

readlines()

文本文件中,每一行作為一個(gè)字符串傳入列表中,返回該列表

8、enumerate()函數(shù)和推導(dǎo)式生成列表,操作每行增加行號(hào)

a = ["小星星\n", "世界第一美\n", "超可愛\n"] b = enumerate(a)print(b) #<enumerate object at 0x0000021A384CE280> 枚舉對(duì)象 print(list(b)) #[(0, '小星星\n'), (1, '世界第一美\n'), (2, '超可愛\n')] #會(huì)以元組的形式返回列表中的內(nèi)容,前面是索引,后面是元素c = [temp + "#" + str(index) for index, temp in enumerate(a)] #temp是enumerate生成器里對(duì)元素的定義,indes是索引,因?yàn)榍懊娴亩际亲址?#xff0c;index也需要強(qiáng)制轉(zhuǎn)換為字符串格式 print(c) #['小星星\n#0', '世界第一美\n#1', '超可愛\n#2']#為了去掉轉(zhuǎn)義字符\n,我們使用rstrip,就是去掉尾部指定信息 d = [temp.rstrip("\n") + "#" + str(index) for index, temp in enumerate(a)] print(d) #['小星星#0', '世界第一美#1', '超可愛#2']with open(r"c.txt", "r", encoding="utf—8") as f:lines = f.readlines()print(lines)#['高宇星\n', '韓敏\n', '燕子\n', '胖頭魚\n']lines = [temp.rstrip("\n") +"#"+ str(index+1) for index, temp in enumerate(lines)]print(lines)#['高宇星#1', '韓敏#2', '燕子#3', '胖頭魚#4']

9、二進(jìn)制文件的讀取和寫入

拷貝了一張圖片,拷貝成功

with open(r"a.jpg", "rb") as f:with open(r"a_copy.jpg", "wb") as w:for lines in f.readlines():w.write(lines)print("圖片拷貝完成")

10、文件對(duì)象常用方法和屬性總結(jié)

seek(相對(duì)指針位置的偏移量,指針位置)

0:表示指針從頭開始;

1:表示從當(dāng)前位置開始計(jì)算;

2:表示從文件末尾開始計(jì)算

with open(r"e.txt", "r", encoding="utf—8") as f:print("文件名是:{0}".format(f.name))print(f.tell()) #查看指針位置print("讀取的內(nèi)容是:{0}".format(f.readline()))print(f.tell())#print("讀取的內(nèi)容為{0}".format(f.readline()))#從頭開始讀取f.seek(0) #從頭開始,且偏移量為0print("讀取的內(nèi)容是:{0}".format(f.readline()))f.seek(3) #指針位置沒有寫東西,默認(rèn)從頭開始,偏移量為3——即第一個(gè)漢字被跳過了print("讀取的內(nèi)容為:{0}".format(f.readline()))''' 文件名是:e.txt 0讀取的內(nèi)容是:壓力大 #在utf—8里面,一個(gè)漢字占3個(gè)字節(jié),文件開頭占一個(gè)字節(jié),換行符占用一個(gè)字節(jié),相當(dāng)于1+3*3+1 = 11 11 #讀取的內(nèi)容為I love you! 讀取的內(nèi)容是:壓力大 讀取的內(nèi)容為:力大 '''

11、使用pickle序列化

python中,一切皆對(duì)象,對(duì)象本質(zhì)上就是一個(gè)“存儲(chǔ)數(shù)據(jù)的內(nèi)存塊”;我們需要將“內(nèi)存塊的數(shù)據(jù)”保存到硬盤上,就必須進(jìn)行對(duì)象的序列化和反序列化。

這樣就可以使信息在磁盤和內(nèi)存之間傳輸,甚至在網(wǎng)頁之間傳輸。

序列化的核心就是將數(shù)據(jù)形式“串行化”。

序列化可以使用pickle模塊

#將對(duì)象序列化到文件中 import picklewith open("data.txt","wb") as f:a1 = "可愛的星星呀"a2 = "永遠(yuǎn)開心哦"a3 = "永遠(yuǎn)幸福哦"pickle.dump(a1,f)pickle.dump(a2,f)pickle.dump(a3,f)with open("data.txt","rb") as f:b1 = pickle.load(f)b2 = pickle.load(f)b3 = pickle.load(f)print(b1, b2, b3) #可愛的小星星 一定要天天快樂呀 ['不要哭泣', '一切都會(huì)變好的!']print(id(a1)) #2401331729104print(id(b1)) #2401375112304#雖然內(nèi)容都一樣,但是反序列化的對(duì)象是新對(duì)象

12、csv文件的操作

用excle做了一張工資表,前兩天整理電腦刪掉了,醉了

復(fù)制粘貼到pycharm里面,是這樣的

#測(cè)試csv文件的讀取和寫入 import csvwith open("工作簿1.csv", "r", encoding="utf—8") as f:a_csv = csv.reader(f) #csv.reader()是個(gè)生成器哦!#print(a_csv)#<_csv.reader object at 0x000002EE52540580> 生成器只能調(diào)用一次,所以注釋掉再用一次print(list(a_csv))#[['\ufeffID', '姓名', '年齡', '薪資'], ['1001', '高宇星', '18', '30000'], ['1002', '韓敏', '16', '35000'], ['1003', '胖頭魚', '17', '10252'], ['1004', '燕子', '19', '33560']]#在一個(gè)大列表里把每一行信息寫作一個(gè)小列表for row in a_csv:print(row)''' ['\ufeffID', '姓名', '年齡', '薪資'] ['1001', '高宇星', '18', '30000'] ['1002', '韓敏', '16', '35000'] ['1003', '胖頭魚', '17', '10252'] ['1004', '燕子', '19', '33560'] '''

?二、操作系統(tǒng)命令

1、os模塊

os模塊可以幫助我們直接對(duì)操作系統(tǒng)進(jìn)行操作。我們可以直接調(diào)用系統(tǒng)的可執(zhí)行文件、命令,直接操作文件、目錄等。

(1)os調(diào)用操作系統(tǒng)文件和命令

<1>os 調(diào)用系統(tǒng)文件和命令

import osos.system("notepad.exe") #調(diào)用記事本 os.system("regedit") #調(diào)用注冊(cè)表 os.system("ping www.baidu.com") #ping網(wǎng)站,在python里面是亂碼,不操作了,我把file encoding改成GBK之后,pycharm癱瘓了,哭了簡(jiǎn)直 #直接調(diào)用可執(zhí)行的文件 os.startfile(r"C:\Program Files (x86)\Tencent\WeChat\WeChat.exe") #這里的文件路徑是通過右擊微信選擇屬性看到的

<2>os模塊操作文件

os模塊常用的操作文件的方法

remove(path)? ? ? ? ?? ? ? ? ? ? ? ? ? ? 刪除指定文件

rename(src,dest)? ? ? ? ? ? ? ? ? ? ?重命名文件或目錄

os.rename("電影", "movie") #把文件夾“電影”改成movie”

stat(path)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 返回文件的所有屬性

print(os.stat("任務(wù)140.py")) #查看文件相關(guān)信息 #os.stat_result(st_mode=33206, st_ino=12103423998578021, st_dev=3166015284, st_nlink=1, st_uid=0, st_gid=0, st_size=989, st_atime=1617243729, st_mtime=1617243665, st_ctime=1617242648) #可以看到文件所有的信息,文件的大小等等

listdir(path)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?返回path目錄下的文件和目錄列表

dirs = os.listdir("movie") #列出movie的子目錄 print(dirs) #['日本', '歐美', '港臺(tái)']

mkdir(path)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?創(chuàng)建目錄

os.mkdir("書籍") #創(chuàng)建一個(gè)目錄,書籍,在當(dāng)前的工作空間里創(chuàng)建了

makedirs(path1/path2/path3··)? ?創(chuàng)建多級(jí)目錄

os.makedirs("電影/港臺(tái)/周星馳") #創(chuàng)建了多級(jí)目錄os.makedirs("../音樂/港臺(tái)/劉德華") #../表示在當(dāng)前目錄的上一級(jí)目錄下面創(chuàng)建了一個(gè)文件 #File "D:\developer_tools\anaconda\lib\os.py

rmdir(path)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?刪除目錄

os.rmdir("書籍") #相對(duì)路徑是相對(duì)于當(dāng)前的工作目錄在python下把書籍這個(gè)文件刪掉了#創(chuàng)建了多級(jí)目錄 在周星馳下面加了一個(gè)文件 “功夫” os.removedirs("電影/港臺(tái)/周星馳")#此時(shí)無法刪除,因?yàn)槲募A不為空 Traceback (most recent call last):File "D:/developer_tools/python/pythonProject/123.py", line 39, in <module>os.removedirs("電影/港臺(tái)/周星馳")File "D:\developer_tools\anaconda\lib\os.py", line 241, in removedirsrmdir(name) OSError: [WinError 145] 目錄不是空的。: '電影/港臺(tái)/周星馳'報(bào)錯(cuò)了,刪除目錄的時(shí)候只能刪除空目錄

removedirs(path1/path2/path3··)刪除多級(jí)目錄

os.removedirs("電影/港臺(tái)/周星馳") #刪除了多及目錄

getcwd()? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 返回當(dāng)前工作目錄

print(os.getcwd()) #查看文件的工作空間 #D:\developer_tools\python\pythonProject

chdir(path)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?把path設(shè)成當(dāng)前工作目錄

os.chdir("c:") #改變了工作空間 在c盤 print(os.getcwd()) os.mkdir("音樂") #在c盤中創(chuàng)建目錄成功

walk()? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 遍歷目錄樹

os.walk()方法會(huì)返回一個(gè)3個(gè)元素的元組(dirpath, dirnames, filenames)

dirpath:要列出指定目錄的路徑

dirnames:目錄下的所有文件夾

filenames:目錄下的所有文件

import ospath = os.getcwd() list_files = os.walk(path) print(list_files) #<generator object walk at 0x000002303D2BA248> #說明os.walk()是一個(gè)生成器啊! #walk 函數(shù)返回三個(gè)元組dirpath——目錄路徑, dirnames——目錄名, filenames——文件名for dirpath, dirnames, filenames in list_files:for dir in dirnames:print(dir)for file in filenames:print(file)''' movie 任務(wù)148.py 港臺(tái) 日本 歐美 周星馳 功夫.mp4 '''######################把文件目錄加上################################import ospath = os.getcwd() list_files = os.walk(path)for dirpath, dirnames, filenames in list_files:for dir in dirnames:print(os.path.join(dirpath, dir))for file in filenames:print(os.path.join(dirpath, file))''' D:\developer_tools\python\pythonProject\test.os\movie D:\developer_tools\python\pythonProject\test.os\任務(wù)148.py D:\developer_tools\python\pythonProject\test.os\movie\港臺(tái) D:\developer_tools\python\pythonProject\test.os\movie\日本 D:\developer_tools\python\pythonProject\test.os\movie\歐美 D:\developer_tools\python\pythonProject\test.os\movie\港臺(tái)\周星馳 D:\developer_tools\python\pythonProject\test.os\movie\港臺(tái)\周星馳\功夫.mp4'''#####################將所有的東西都放在一個(gè)列表里############################# import osall_files = []path = os.getcwd() list_files = os.walk(path)for dirpath, dirnames, filenames in list_files:for dir in dirnames:all_files.append(os.path.join(dirpath, dir))for file in filenames:all_files.append(os.path.join(dirpath, file))print(all_files)#['D:\\developer_tools\\python\\pythonProject\\test.os\\movie', 'D:\\developer_tools\\python\\pythonProject\\test.os\\任務(wù)148.py', 'D:\\developer_tools\\python\\pythonProject\\test.os\\movie\\港臺(tái)', 'D:\\developer_tools\\python\\pythonProject\\test.os\\movie\\日本', 'D:\\developer_tools\\python\\pythonProject\\test.os\\movie\\歐美', 'D:\\developer_tools\\python\\pythonProject\\test.os\\movie\\港臺(tái)\\周星馳', 'D:\\developer_tools\\python\\pythonProject\\test.os\\movie\\港臺(tái)\\周星馳\\功夫.mp4']

sep? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?當(dāng)前操作系統(tǒng)所使用的路徑分隔符

import os a = "獲取文件和文件夾相關(guān)的想信息" b = a.center(60, "*") print(b) print(os.name) #nt, windows返回的是nt,linux返回的是posix 可以通過OS.name來判斷操作系統(tǒng) print(os.sep) #返回分隔符,windows返回的是\ linux發(fā)揮的是/ print(repr(os.linesep)) #返回?fù)Q行符,windows返回的是'\r\n',linux返回的是\n\

完整的,成體系的代碼如下:
?

import os a = "獲取文件和文件夾相關(guān)的想信息" b = a.center(60, "*") print(b) print(os.name) #nt, windows返回的是nt,linux返回的是posix 可以通過OS.name來判斷操作系統(tǒng) print(os.sep) #返回分隔符,windows返回的是\ linux發(fā)揮的是/ print(repr(os.linesep)) #返回?fù)Q行符,windows返回的是'\r\n',linux返回的是\n\print(os.stat("任務(wù)140.py")) #查看文件相關(guān)信息 #os.stat_result(st_mode=33206, st_ino=12103423998578021, st_dev=3166015284, st_nlink=1, st_uid=0, st_gid=0, st_size=989, st_atime=1617243729, st_mtime=1617243665, st_ctime=1617242648) #可以看到文件所有的信息,文件的大小等等a = "關(guān)于目錄的操作" b = a.center(60, "*") print(b) print(os.getcwd()) #查看文件的工作空間 #D:\developer_tools\python\pythonProject #os.mkdir("書籍") #創(chuàng)建一個(gè)目錄,書籍,在當(dāng)前的工作空間里創(chuàng)建了 #os.rmdir("書籍") #相對(duì)路徑是相對(duì)于當(dāng)前的工作目錄 在python下把書籍這個(gè)文件刪掉了#os.chdir("c:") #改變了工作空間 在c盤 #print(os.getcwd()) #os.mkdir("音樂") #在c盤中創(chuàng)建目錄成功#os.makedirs("電影/港臺(tái)/周星馳") #創(chuàng)建了多級(jí)目錄 #os.removedirs("電影/港臺(tái)/周星馳") #刪除了多及目錄#os.makedirs("電影/港臺(tái)/周星馳") #創(chuàng)建了多級(jí)目錄 在周星馳下面加了一個(gè)文件 “功夫” #os.removedirs("電影/港臺(tái)/周星馳") ''' Traceback (most recent call last):File "D:/developer_tools/python/pythonProject/123.py", line 39, in <module>os.removedirs("電影/港臺(tái)/周星馳")File "D:\developer_tools\anaconda\lib\os.py", line 241, in removedirsrmdir(name) OSError: [WinError 145] 目錄不是空的。: '電影/港臺(tái)/周星馳'報(bào)錯(cuò)了,只能刪除空目錄 '''#os.makedirs("../音樂/港臺(tái)/劉德華") #../表示在當(dāng)前目錄的上一級(jí)目錄下面創(chuàng)建了一個(gè)文件 #File "D:\developer_tools\anaconda\lib\os.py#os.rename("電影", "movie")dirs = os.listdir("movie") #列出movie的子目錄 print(dirs) #['日本', '歐美', '港臺(tái)']

2、os.path模塊

os.path模塊

提供了目錄相關(guān)(路徑判斷/切分/鏈接/文件夾遍歷)的操作

import osfrom os import path #這樣的話,每句話里就不需要再打印osprint(path.isabs("d:/a.txt")) #判斷是否是一個(gè)絕對(duì)路徑 #True print(path.isdir("d:/a.txt")) #判斷是否是一個(gè)目錄 #False print(path.isfile("d:/a.txt")) #判斷是否是一個(gè)文件 #True print(path.exists("d:/a.txt")) #判斷是否存在 #True####################獲得文件基本信息########################### print(path.getsize("b.txt")) #獲取文件的大小 #42print(path.abspath("b.txt")) #獲取文件的絕對(duì)路徑 #D:\developer_tools\python\pythonProject\b.txtprint(path.dirname("d:/a.txt")) #獲取文件的根目錄 #d:/print(path.getatime("b.txt")) #獲取最后訪問時(shí)間 #1617698622.5961854print(path.getctime("b.txt")) #這個(gè)表示從1970年1月1日已經(jīng)經(jīng)過多少秒 #1617150774.058493print(path.getmtime("b.txt")) #獲取最后的修改時(shí)間 #1617168894.4296467###################對(duì)路徑的操作############################# path = os.path.abspath("b.txt") print(os.path.split(path)) #將路徑以進(jìn)行切割 #('D:\\developer_tools\\python\\pythonProject', 'b.txt') #返回的是元組,第一個(gè)元素是目錄,第二個(gè)元素是文件名print(os.path.splitext(path)) #返回的是拓展名,將拓展名和前面的東西分開了 #('D:\\developer_tools\\python\\pythonProject\\b', '.txt')print(os.path.join("aa", "bb", "cc")) #aa\bb\cc #以分隔符的形式將字符串連在一起########################練習(xí)################################## #列出工作目錄下所有的.py文件,并輸出文件名import ospath = os.getcwd()file_list = os.listdir(path) #列出子目錄,子文件for filename in file_list:if filename.endswith("py"): #做一個(gè)簡(jiǎn)單的判斷,篩選python文件print(filename)'''任務(wù).py 任務(wù)140.py 任務(wù)142.py 任務(wù)143.py 任務(wù)144.py 任務(wù)145 os模塊.py 任務(wù)147.py '''#通過推導(dǎo)式來輸出 print("########################") file_list2 = [filename for filename in os.listdir(path) if filename.endswith("py")] for f in file_list2:print(f, end="\t")#任務(wù).py 任務(wù)140.py 任務(wù)142.py 任務(wù)143.py 任務(wù)144.py 任務(wù)145 os模塊.py 任務(wù)147.py

三、shutil模塊和zipfile模塊(拷貝和壓縮)

主要用來做文件和文件夾的拷貝、移動(dòng)、刪除等,還可以做文件和文件夾的壓縮、解壓縮文件

os模塊提供了對(duì)目錄或文件的一般操作,shutil模塊作為補(bǔ)充,提供了移動(dòng)、復(fù)制、壓縮、解壓等操作,這些都是os模塊不具有的

import shutil import zipfile#shutil.copyfile("1", "1_copy") #把文件1拷貝到1_copy里面#shutil.copytree("movie/港臺(tái)", "電影") #在這里呢,movie和港臺(tái)都沒拷貝,拷貝的是港臺(tái)下面的子目錄和子文件#shutil.copytree("movie/港臺(tái)", "電影1", ignore= shutil.ignore_patterns("*.txt")) #在最后寫明了所有后綴為.txt的文件都不拷貝########################壓縮、解壓############################## shutil.make_archive("電影/gg", "zip", "movie/港臺(tái)") #把movie文件里面的港臺(tái)文件壓縮成zip格式,放在電影下面的gg文件里 #查看的之后,右鍵壓縮文件選擇”show in explor“z = zipfile.ZipFile("a.zip", "w") #生成zipfile生成器,寫入文件名,沒有指定位置時(shí),默認(rèn)在工作空間里,以寫入的方式打開 z.write("1", "1_copy") #把1和1_copy這兩個(gè)文件寫進(jìn)去 z.close() #最后要記得關(guān)閉哦#可以指定路徑 #z1 = zipfile.ZipFile("d:/a.zip", "w") #z1.write("1") #z1.write("1_copy") #z.close() #最后要記得關(guān)閉哦z2 = zipfile.ZipFile("d:/a.zip", "r") #把壓縮文件讀入 z2.extractall("電影") #將所有的文件都?jí)嚎s到電影里面 z2.close()

?四、遞歸算法

1、遞歸算法

包括兩部分:

(1)定義遞歸頭:解答什么時(shí)候不用調(diào)用自身方法,如果沒有頭,將會(huì)陷入死循環(huán);

(2)遞歸體:什么時(shí)候需要調(diào)用自身方法

def a():print("a")b() #在a方法里面調(diào)用b方法是可以的 #在a方法里面調(diào)用自己會(huì)死循環(huán)def b():print("b")a()

當(dāng)每個(gè)棧的值向上返回時(shí),棧就結(jié)束了使命,關(guān)閉了。

num = 1def a():global num #在函數(shù)中想要改變?nèi)肿兞康闹?#xff0c;必須聲明一下才可以呢!num += 1print("a")if num < 5:a()#else:#break#break/continue 只適用于while、for這樣的循環(huán)a()#小練習(xí),計(jì)算n的階乘def f(n):if n == 1:return n #這一步最關(guān)鍵了,是關(guān)閉棧的時(shí)候返回的那個(gè)值else:return n * f(n-1)print(f(5)) #120

2、遞歸算法原理——目錄樹結(jié)構(gòu)展示

import osdef getAllFiles(path):childFiles = os.listdir(path) #把傳遞路徑的文件的目錄收集起來for file in childFiles:filepath = os.path.join(path, file)print(filepath)getAllFiles("test.os") #test.os\movie #test.os\任務(wù)148.py#此時(shí),文件test.os里面確實(shí)有兩個(gè)文件夾 #但我們相把所有的文件內(nèi)容都打印出來,就需要遞歸處理了import osdef getAllFiles(path):childFiles = os.listdir(path) #把傳遞路徑的文件的目錄收集起來for file in childFiles:filepath = os.path.join(path, file)if os.path.isdir(filepath):getAllFiles(filepath)print(filepath)getAllFiles("test.os") ''' test.os\movie test.os\任務(wù)148.py test.os\movie\日本 test.os\movie\歐美 test.os\movie\港臺(tái)\周星馳\功夫.mp4 test.os\movie\港臺(tái)\周星馳 test.os\movie\港臺(tái) test.os\movie test.os\任務(wù)148.py ''' #加縮進(jìn)! import osdef getAllFiles(path, level):childFiles = os.listdir(path) #把傳遞路徑的文件的目錄收集起來for file in childFiles:filepath = os.path.join(path, file)if os.path.isdir(filepath):getAllFiles(filepath, level+1)print("\t" * level + filepath)#"\t"是制表符,level等于0 的時(shí)候不縮進(jìn),每增加1,就縮進(jìn)4個(gè)字節(jié)getAllFiles("test.os", 0)''' test.os\movie test.os\任務(wù)148.pytest.os\movie\日本test.os\movie\歐美test.os\movie\港臺(tái)\周星馳\功夫.mp4test.os\movie\港臺(tái)\周星馳test.os\movie\港臺(tái) test.os\movie test.os\任務(wù)148.py'''allfiles = [] def getAllFiles(path, level):childFiles = os.listdir(path) #把傳遞路徑的文件的目錄收集起來for file in childFiles:filepath = os.path.join(path, file)if os.path.isdir(filepath):getAllFiles(filepath, level+1)allfiles.append("\t" * level + filepath)getAllFiles("test.os", 0)for f in reversed(allfiles): #倒序print(f) #同樣可以實(shí)現(xiàn)跟上面代碼一樣的效果呢''' test.os\movie test.os\任務(wù)148.py test.os\任務(wù)148.py test.os\movietest.os\movie\港臺(tái)test.os\movie\港臺(tái)\周星馳test.os\movie\港臺(tái)\周星馳\功夫.mp4test.os\movie\歐美test.os\movie\日本 '''

?

總結(jié)

以上是生活随笔為你收集整理的文本操作的相关概念和方法+pickle序列化+csv文件操作+操作系统命令(os和os.path)+shutil模块+zipfile模块+递归算法打印目录树的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。