Python基础day07【文件读写、文件夹操作、面向对象(类、对象)】
- 視頻、源碼、課件、軟件、筆記:超全面Python基礎入門教程【十天課程】博客筆記匯總表【黑馬程序員】
?
目錄
01、復習
1.1、遞歸函數參數問題
1.2、格式化輸出位數
1.3、extend函數解析
02、文件讀操作
2.1、按字節讀取文件:f.read()函數
2.2、按行讀取文件:f.readlines()函數
03、模擬讀取大文件
3.1、大文件有換行
3.2、大文件無換行
3.3、補充:計算機中的大小
04、文件打開模式
05、應用-文件備份
5.1、文件備份
5.2、文件備份優化
06、文件和文件夾的操作
07、應用-批量修改文件名
08、學生管理系統文件版
09、面向對象
9.1、概念介紹[了解]
9.2、類和對象[理解]
9.3、類的組成
9.4、類的抽象
9.5、類的定義
9.6、創建對象
10、今日總結
01、復習
1.1、遞歸函數參數問題
遞歸函數必須要傳遞參數嗎?否!遞歸函數要嵌套調用自己,所以遞歸函數一般都有參數。若遞歸函數不要參數,可以使用global全局變量來控制遞歸函數,但使用global全局變量會降低遞歸函數的優勢。
不是所有程序都可以使用遞歸,但是使用遞歸的程序一定可以使用循環。
# 遞歸函數一般都是有參數. num = 10;def func():global num;if num == 1:returnnum = num - 1;print(num, end="、");func();func(); # 9、8、7、6、5、4、3、2、1、1.2、格式化輸出位數
1.3、extend函數解析
my_list = [20, 30] print(my_list) # [20, 30]def func(a):a += 50, # 列表+= --> extend,即a.extend(20,)# 將元組中的數據逐個添加到列表中,extend(可迭代數據類型-容器):str、list、tuple、dict# 50:int型數據func(my_list) print(my_list) # [20, 30, 50]# 可迭代: 能使用。for循環就是可迭代的。02、文件讀操作
2.1、按字節讀取文件:f.read()函數
# 1.打開文件 f = open('a.txt', 'r', encoding='utf-8')# 2.讀寫文件:文件對象.read(n)。n:一次讀取多少字節的內容;默認不寫,讀取全部內容. buf = f.read(3) print(buf) # 123 print('-'*30) buf = f.read(3) print(buf)# 3.關閉文件 f.close()2.2、按行讀取文件:f.readlines()函數
?
文件指針向后移動:f.readline()、f.readlines(),不重復讀取文件內容。
f = open('a.txt', 'r', encoding='utf-8') # f.readline() # 一次讀取一行的內容, 返回值是讀取到的內容(str) # buf = f.readline() # print(buf) # 1234# f.readlines() # 按行讀取,一次讀取所有行,返回值是列表,列表中的每一項是一個字符串,即一行的內容 buf = f.readlines() print(buf) # ['1234\n', '56789']buf = [i.strip() for i in buf] # strip去掉空白字符 print(buf) # ['1234', '56789'] f.close()03、模擬讀取大文件
read():一次讀取全部的內容,讀到文件末尾會返回空。
3.1、大文件有換行
?
f = open('a.txt', 'r', encoding='utf-8') while True:buf = f.readline() # 一行一行地讀取文件內容if buf: # if len(buf) > 0 # 容器可以直接作為判斷條件,容器中有內容為True;沒有數據是Falseprint(buf, end='')else:# 文件讀完了!breakf.close()3.2、大文件無換行
f = open('b.txt', 'r', encoding='utf-8') while True:buf = f.read(5) # f.read(4096):一次讀取4k的內容if buf:print(buf) # print(buf, end='')else:breakf.close()3.3、補充:計算機中的大小
計算機只認識0和1,根據電壓高低。
進制:
? ? 二進制:只有 0 和 1 組成,逢二進一;
? ? 十進制:0 1 2 3 4 5 6 7 8 9,逢十進一;
? ? 十六進制:0 1 2 3 4 5 6 7 8 9 A B C D E F,逢十六進一。
計算機最小的單位是 bit(位),只有兩個數據值 0 和 1。
字節:是計算機中基本的儲存單位byte。
1 byte = 8 bit
1KB = 1024 byte
1MB = 1024 KB
1GB = 1024 MB
1TB = 1024 GB?...
100Mbits、200Mbits、12.5MB/s、25MB/s
04、文件打開模式
文本文件:.txt、.py、.md,能夠使用記事本打開的文件。
二進制文件:具有特殊格式的文件,.mp3、.mp4、.rmvb、.avi、.png、.jpg等。
文本文件可以使用文本方式打開文件,也可以使用二進制方式打開文件。
二進制文件,只能使用二進制的方式打開文件。
二進制打開方式(rb、wb、ab)如下:不管讀取、還是書寫,都需要使用二進制的數據。注意點:不能指定encoding參數。
| r | 以只讀方式打開文件。文件的指針將會放在文件的開頭。這是默認模式。 |
| w | 打開一個文件只用于寫入。如果該文件已存在則將其覆蓋。如果該文件不存在,創建新文件。 |
| a | 打開一個文件用于追加。如果該文件已存在,文件指針將會放在文件的結尾。也就是說,新的內容將會被寫入到已有內容之后。如果該文件不存在,創建新文件進行寫入。 |
| rb | 以二進制格式打開一個文件用于只讀。文件指針將會放在文件的開頭。這是默認模式。 |
| wb | 以二進制格式打開一個文件只用于寫入。如果該文件已存在則將其覆蓋。如果該文件不存在,創建新文件。 |
| ab | 以二進制格式打開一個文件用于追加。如果該文件已存在,文件指針將會放在文件的結尾。也就是說,新的內容將會被寫入到已有內容之后。如果該文件不存在,創建新文件進行寫入。 |
| r+ | 打開一個文件用于讀寫。文件指針將會放在文件的開頭。 |
| w+ | 打開一個文件用于讀寫。如果該文件已存在則將其覆蓋。如果該文件不存在,創建新文件。 |
| a+ | 打開一個文件用于讀寫。如果該文件已存在,文件指針將會放在文件的結尾。文件打開時會是追加模式。如果該文件不存在,創建新文件用于讀寫。 |
| rb+ | 以二進制格式打開一個文件用于讀寫。文件指針將會放在文件的開頭。 |
| wb+ | 以二進制格式打開一個文件用于讀寫。如果該文件已存在則將其覆蓋。如果該文件不存在,創建新文件。 |
| ab+ | 以二進制格式打開一個文件用于追加。如果該文件已存在,文件指針將會放在文件的結尾。如果該文件不存在,創建新文件用于讀寫。 |
05、應用-文件備份
5.1、文件備份
1. 用只讀的方式,打開文件
2. 讀取文件內容
3. 關閉文件
4. 只寫的方式,打開新文件
5. 將第2步讀取的內容寫入新文件
6. 關閉新文件
思考:
? ? 1. 如果文件比較大 ---> 循環讀取文件;
? ? 2. 復制備份的文件可能是.txt文件,可能是二進制文件 ---> 使用二進制方式打開文件。
5.2、文件備份優化
?
file_name = input('請輸入要備份的文件名:')# 1.用只讀的方式打開文件 f = open(file_name, 'rb') # 2.讀取文件內容 buf = f.read() # 3.關閉文件 f.close()# 根據原文件名找到文件后綴和文件名 index = file_name.rfind('.') # 找.的下標 # 后綴 file_name[index:],切片得到文件后綴 # 新文件名 new_file_name = file_name[:index] + '[備份]' + file_name[index:] print(new_file_name) # 4.只寫的方式,打開新文件 f_w = open(new_file_name, 'wb') # 5.將第2步讀取的內容寫入新文件 f_w.write(buf) # 6.關閉新文件 f_w.close()06、文件和文件夾的操作
??
# 對文件和目錄的操作,需要導入os模塊 import os# 1.文件重命名:os.rename(原文件路徑名, 新文件路徑名) # os.rename('a.txt', 'aa.txt')# 2.刪除文件:os.remove(文件的路徑名) # os.remove('aa.txt')# 3.創建目錄:os.mkdir(目錄路徑名)-make directory os.mkdir('test') os.mkdir('test/aa')# 4.刪除空目錄:os.rmdir(目錄名)-remove directory # os.rmdir('test/aa')# 5.獲取當前所在的目錄:os.getcwd()-get current working directory buf = os.getcwd() print(buf) # F:\JetBrains\2pythonSpace\pythonCode\day07-文件# 6.修改當前的目錄:os.chdir(目錄名)-change dir os.chdir('test') buf = os.getcwd() print(buf) # F:\JetBrains\2pythonSpace\pythonCode\day07-文件\test# 7.獲取指定目錄中的內容:os.listdir(目錄), 默認不寫參數,是獲取當前目錄中的內容 # 返回值是列表, 列表中的每一項是文件名 buf = os.listdir() # test print(buf) # ['aa']07、應用-批量修改文件名
import osdef create_files():for i in range(10):file_name = 'test/file_' + str(i) + '.txt'print(file_name)f = open(file_name, 'w')f.close()def create_files_1():os.chdir('test')for i in range(10, 20):file_name = 'file_' + str(i) + '.txt'print(file_name)f = open(file_name, 'w')f.close()os.chdir('../') # ../ 上一級目錄,切換回上一級目錄def modify_filename():os.chdir('test') # 切換到test目錄buf_list = os.listdir() # 文件列表# print(buf_list)for file in buf_list:new_file = 'py_' + fileos.rename(file, new_file)os.chdir('../')def modify_filename_1():os.chdir('test')buf_list = os.listdir()# print(buf_list)for file in buf_list:num = len('PY_')new_file = file[num:]os.rename(file, new_file)os.chdir('../')# create_files() # create_files_1() # modify_filename() # modify_filename_1()08、學生管理系統文件版
學生管理系統,一名學生信息:{'name': 'isaac', 'age': 18, 'gender': m}
原版保存學生信息方式,列表:[{}, {}]
文件版:需要將所有的學生信息保存的到文件中。最簡單的的方法是:將整個列表保存到文件中,'[{}, {}, {}]' 。
w方式將信息寫入文件。
從文件中讀取信息:讀取'[{}, {}, {}]' ?--->? [{}, {}, {}],字符串轉列表使用eval()函數。
def save(): ?# 保存功能
? ? # 1.打開文件
? ? f = open('student.txt', 'w', encoding='utf-8')
? ? # 2.寫入學生信息
? ? f.write(str(stu_list)) ?# write()只能寫字符串
? ? # 3.關閉文件
? ? f.close()
def load_file():? # 讀取加載文件功能
? ? global stu_list
? ? if os.path.exists('student.txt'):
? ? ? ? f = open('student.txt', 'r', encoding='utf-8')
? ? ? ? buf = f.read()
? ? ? ? if buf:
? ? ? ? ? ? stu_list = eval(buf)
? ? ? ? f.close()
def main():
? ? load_file() ?# 只執行一次
? ? while True:
? ? ? ? ...
09、面向對象
9.1、概念介紹[了解]
面向對象和面向過程,是兩種編程思想。編程思想是指對待同一個問題,解決問題的套路方式。
-
面向過程:注重的過程,實現的細節。親力親為。
-
函數
-
-
面向對象:關注的是結果、偷懶。
-
封裝、繼承和多態(三大技術)
-
9.2、類和對象[理解]
類和對象,是面向對象中非常重要的兩個概念。
-
類
-
類是泛指的,指代多個,是由對的抽象來的。
-
在代碼中,是通過關鍵字class定義的。
-
-
對象
-
對象是特指的,指代一個,是具體存在的。
-
在代碼中,對象是由類創建的、類是由對象抽象而來的。
-
9.3、類的組成
類(Class)由3個部分組成:
類的名稱:類名
類的屬性:一組數據,特性、變量。一個類的屬性有很多,只關注需要使用的,沒有用到的不用管。
類的方法:允許對類進行操作的方法、行為、函數。
9.4、類的抽象
名詞提煉法、所見即所得
9.5、類的定義
隨后的代碼,使用狗類進行演示說明。
類名:Dog(狗類)
屬性:
? ? 姓名 name
? ? 年齡 age
? ? ...
方法:
? ? 吃 ?eat()
? ? 玩 ?play()
? ? ...
9.6、創建對象
在代碼中,對象是由類創建的。
# 定義類 class Dog(object):# 在類中定義的函數,稱為方法,函數的所有知識都可以使用def play(self): # 暫時不管selfprint('小狗快樂的拆家中...')# 創建對象:變量 = 類名() dog1 = Dog() # 創建一個對象:dog1 print(id(dog1)) # 1431080367296dog2 = Dog() # 創建一個對象:dog2 print(id(dog2)) # 1431084685728# 可以使用對象調用類中的方法:對象.方法名() dog1.play() # 小狗快樂的拆家中... dog2.play() # 小狗快樂的拆家中...10、今日總結
總結
以上是生活随笔為你收集整理的Python基础day07【文件读写、文件夹操作、面向对象(类、对象)】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python基础day06【匿名函数la
- 下一篇: websocket python爬虫_p