文件的概念:
文件是數據的抽象和集合,是存儲在輔助存儲器上的數據序列,文件是數據存儲的一種形式,文件的展現形態,文本文件和二進制文件。
文本文件輸出:
f.txt文件保存:“我是中國人”
>>> tf=open("d:/python_test/f.txt", "rt") >>> tf <_io.TextIOWrapper name='d:/python_test/f.txt' mode='rt' encoding='cp936'> >>> print(tf.readline()) 我是中國人 >>> tf.close <built-in method close of _io.TextIOWrapper object at 0x0000000002F81DC8>
二進制文件輸出:
>>> bf=open("d:/python_test/f.txt", "rb") >>> print(bf.readline()) b'\xce\xd2\xca\xc7\xd6\xd0\xb9\xfa\xc8\xcb' >>> bf.close <built-in method close of _io.BufferedReader object at 0x0000000002FD8F68>
文件的打開和關閉:
文件處理步驟:打開->操作->關閉
open : 文件的存儲狀態->文件的占用狀態
close: 文件的占用狀態->文件的存儲狀態
常用的讀寫文件操作:a.read(size) a.readline(size) a.readlines(hint) a.write(s) a.writelines(lines) a.seek(offset)
1、文件的打開
<變量名> = open(<絕對路徑/相對路徑/文件名>, <打開模式>)
'r' 只讀模式,默認值,如果文件不存在,返回FileNotFoundError
'w' 覆蓋寫模式,文件不存在則創建,存在則完全覆蓋
'x' 創建寫模式,文件不存在則創建,存在則返回FileExistError
'a' 追加寫模式,文件不存在則創建,存在則在文件最后追加內容
‘b’ 二進制文件形式
't' 文本文件模式,默認值
‘+’ 與r/w/x/a一同使用,在原功能基礎上增加同時讀寫功能
f = open('f.txt', 'a+') 文本形式打開,追加寫模式 + 讀文件
f = open('f.txt', 'b') 二進制形式打開,讀模式
2、文件的關閉
<變量名>.close()
如果調用了open沒有調用close,程序運行過程中,文件就一直處於打開模式,在程序退出后,python的解釋器會將文件關閉。要注意調用close。
3、文件內容的讀取
<f>.read(size = -1) 讀入全部內容,如果輸入參數,讀入前size長度,指針下移
<f>.readline(size = -1) 讀入一行內容,如果給出參數,讀入該行的前size長度,指針下移
<f>.readlines(hint=-1) 讀入文件所有行,以每行為元素形成列表,如果給出參數,讀入前hint行
fname=input("請輸入文件名稱:") fo = open(fname,"r") for line in fo.readlines(): print(line) fo.close()
一次性讀入文件,會消耗很多內存,一般采用分行讀入,逐行處理的思路
fname=input("請輸入文件名稱:") fo = open(fname,"r") for line in fo: print(line) fo.close()
4、數據的文件寫入
<f>.write(s) 向一個文件中寫入字符串或者字節流,指針下移
<f>.writelines(lines) 將一個元素全為字符串的列表寫入文件 ,直接拼接,不換行,指針下移
ls=["中國","法國","英國"] tf.writelines(ls) “中國法國英國”
<f>.seek(offset) 改變當前文件操作指針的位置,offset的含義如下:0-文件開頭,1-當前位置,2-文件結尾
fo=open("output.txt",'w+') ls=["中國","法國","英國"] fo.writelines(ls) fo.seek(0) for line in fo: print(line) fo.close() 輸出: "中國法國英國"
5、實例 從文件中讀取數據繪制圖形
#autodraw import turtle as t t.setup(800,600,0,0) t.pencolor("read") t.pensize(5) datals = [] f = open("d:/python_test/data.txt") for line in f: line = line.replace("\n","") '''將\n替換為,''' datals.append(list(map(eval, line.split(",")))) /map 對第二個參數中的每一個元素,執行第一個參數的函數/ datals f.close() for i in range(len(datals)): t.pencolor(datals[i][3], datals[i][4], datals[i][5]) t.fd(datals[i][0]) if datals[i][1]: t.right(datals[i][2]) else: t.left(datals[i][2])
舉一反三:
1、自動化思維:數據和功能分離,數據驅動的自動運行
2、接口化設計:格式化設計接口,清晰明了
3、二維數據應用:應用維度組織數據,二維數據最常用
4、擴展接口設計,增加更多控制接口
5、擴展功能設計
6、擴展應用需求