Python人工智能從入門到精通python
最近簡直要死了 發燒感冒 喉嚨痛。。。。、緩存
如何長期保存計算機中數據:
須要文件操做app
文件 file:
文件是用於數據存儲的單位
文件一般用來長期儲存數據
文件中的數據是以字節爲單位進行順序儲存的
文件的操做流程:
1.打開文件
2.讀/寫文件
3.關閉文件
注:
任何操做系統, 一個應用程序同時打開文件的數量有最大數限制
文件打開函數:
open(file, mode=‘rt’) 用於打開一個文件, 返回此文件流對象,
若是打開文件失敗, 則會觸發osError錯誤
文件的關閉方法:
F.colse() #關閉問津, 釋放系統資源ide
示例:函數
# 此示例示意文件的打開和關閉操做 try: f = open('./aaa.txt') # 不存在此文件 # f = open('./myfile.txt') # 不存在此文件 print("打開文件成功") # 此處要進行讀/寫操做 f.close() # 半閉文件 except OSError: print("文件打開失敗")
文件方法:編碼
字符 | 含義 |
---|---|
'r' | 以只讀方式打開(默認) |
'w' | 以只寫方式打開,刪除原有文件內容(若是文件不存在,則建立該文件並以只寫方式打開) |
'x' | 建立一個新文件, 並以寫模式打開這個文件,若是文件存在則會產生"FileExistsError"錯誤 |
'a' | 以只寫文件打開一個文件,若是有原文件則追加到文件末尾 |
'b' | 用二進制模式打開 |
't' | 文本文件模式打開 (默認) |
'+' | 爲更新內容打開一個磁盤文件 (可讀可寫) |
方法 | 說明 |
---|---|
F.close() | 關閉文件(關閉後文件不能再讀寫會發生ValueError錯誤) |
F.readline() | 讀取一行數據, 若是到達文件尾則返回空行 |
F.readlines(max_chars=-1) | 返回每行字符串的列表,max_chars爲最大字符(或字節)數 |
F.writelines(lines) | 將字符串的列表或字符串的列表中的內容寫入文件 |
二進制文件操做方法 | |
F.read(size=-1) | 從一個文件流中最多讀取size個字符(文本文件)或字節(二進制文件),若是不給出參數,則默認讀取文件中所有的內容並返回 |
F.write(text) | 寫一個字符串到文件流中,返回寫入的字符數(文本文件)或字節數(二進制文件) |
F.tell() | 返回當前文件流讀寫指針的絕對位置(字節爲單位) |
F.seek(offset, whence=0) | 改變數據流讀寫指針的位置,返回新的絕對位置 |
F.flush() | 把寫入文件對象的緩存內容寫入到磁盤 |
F.readable() | 判斷這個文件是否可讀,可讀返回True,不然返回False |
F.writable() | 判斷這個文件是否可寫,可寫返回True,不然返回False |
F.seekable() | 返回這個文件對象是否支持隨機定位 |
F.truncate(pos = None) | 剪掉 自pos位置以後的數據,返回新的文件長度 |
文本文件操做:
操做模式:
‘t’
說明:
1.默認文件中儲存的都爲字節數據, 在讀寫過程中會自動進行編解碼操做
2.文本文件以行位單位進行分割, 在python內部統一用"\n"作爲換行符進行分割
3.對文本文件的讀寫操做須要用字符串(str)進行數據操做
Linux換行符: '\n'
Windows 換行符: '\r\n'
新的Mac OS 換行符: '\n'
舊的Macintosh換行符: '\r'(已不用了)人工智能
文件流對象是可迭代對象, 迭代過程當中將換行符「\n」做爲分隔符spa
f = open('phonenumber.txt') for line in f: print(line) # 打印每一行的數據
標準輸入輸出文件:
sys.stdin 標準輸入文件
Ctrl + D 輸入文件結束符
sys.stdout 標準輸出文件
sys.stderr 標準錯誤輸出文件
標準文件絕對不能關閉
Linux系統內全部的硬件都會映射成文件 關閉文件會致使錯誤
模塊:sys
注:
標準文件不須要打開和關閉就可使用
示例:指針
import sys sys.stdout.write("我是標準輸出\n") sys.stderr.write("我是一個錯誤\n") import sys s = sys.stdin.read() print("s=", s) print("程序結束")
二進制文件操做:
二進制文件操做模式字符:‘b’
默認文件中存儲的是以字節數據爲單位, 一般有人爲規定的格式
二進制文件操做須要用字節串進行讀寫
F.read()/F.readline() F.readlines()返回類型
對於文本操做
F.write() 對於二進制文件也須要用字節串進行操做
F.tell:
做用:
返回當前的讀寫位置(從文件頭以字節爲單位)
F.seek方法:
F.seek(偏移量,whence=相對位置)
偏移量
大於0的數表明向文件尾方向移動的字節數
小於0的數表明向文件頭方向移動的字節數
相對位置
0表明從文件頭開始偏移
1表明從文件當前位置開始偏移
2表明從文件尾開始偏移 (第一個參數必須是負的)
示例:code
# 此示例示意用seek改變文件的讀寫位置,用tell來獲得讀寫位置 f = open('myseek.txt', 'rb') b = f.read(2) # b'AB' 讀取出來 print(b) # b'AB # 從頭開始向後走5個字節 # f.seek(5, 0) # 從當前位置向後走3個字節 # f.seek(3, 1) # 從文件尾向前數15個字節 f.seek(-15, 2) b = f.read(5) print(b) # b'abcde' f.close()
漢字編碼(只講兩種)
國標系列:
GB18030(二字節或四字節編碼27553個字)
GBk(二字節編碼21003個字)
GB2312(二字節編碼6763個字)
(Windows 經常使用)
國際標準: Unicode <---> UTF-8 (Ascii 佔1字節 漢字佔3字節)
(Linux Mac OS X / IOS /Android)
python編碼字符串:
‘gb18030’
‘gb2312’
‘gbk’
‘utf-8’
‘ascii’
....
以上字符串用於encide和decode中
編碼註釋:
在Python源文件中的第一行或第二行寫入以下內容:
# -*- codeing:gbk -*-
#設置源文件編碼格式爲gbk
或
# -*- codeing:utf-8 -*-
#設置源文件編碼格式爲utf-8
做用:
告訴解釋執行器此文件的編碼是什麼
練習:
本身寫一個文件 'info.txt' 內部存一些文字信息
如:
張三 20 100
李四 21 96
小王 22 98
寫程序將這些數據讀取出來,打印到終端上
答案:
try: f = open("myfile.txt") L = f.readlines() for x in L: s = x.strip() n, a, s = s.split() print("姓名:", n, "年齡:", int(a), "成績:", int(s)) except: print("打開文件是失敗")
練習:
1. 寫程序,循環輸入不少我的的姓名,電話號碼,
當輸入結束後將這些信息存入到文件phonenumber.txt中
(建議先用列表暫存數據,格式本身定義)
2. 寫程序,將phonenumber.txt文件中的數據讀取出來.
再用如下格式打印出來:
如:
小張 的電話是 13888888888
小李 的電話是 13999999999
練習:
1. 寫程序實現複製文件的功能
要求:
1. 要考慮特大文件問題
2. 要關閉文件
3. 要能複製二進制文件
如:
請輸入源文件路徑名: /home/tarena/xxx.tar.gz
請輸入目標文件路徑名: ./a.tar.gz
顯示:
文件已成功複製
答案:
def copy_myfile(): try: ypath = input("please inout raw path:") xpath = input("please inout new path:") f1 = open(xpath, "w+b") f = open(ypath, "r+b") for x in f: f1.write(x) f1.close() f.close() print("File copied") except: print("file not inexeistence") copy_myfile()
2. 修改學生信息管理程序,要求加入兩個功能:
9) 保存信息到文件(si.txt)
L = [{"name": "Tom", "age": 20, "score": 98}, {"name": "Lin", "age": 21, "score": 99}, {"name": "Garin", "age": 19, "score": 100}] def student_file(L): try: f = open("./si.txt", "x") for x in L: f.write(x["name"]) f.write(" ") f.write(str(x["age"])) f.write(" ") f.write(str(x["score"])) f.write("\n") except FileExistsError: f = open("./si.txt", "a") for x in L: f.write(x["name"]) f.write(" ") f.write(str(x["age"])) f.write(" ") f.write(str(x["score"])) f.write("\n") student_file(L)
10) 從文件中讀取數據(si.tx
def open_student_file(): f = open("./si.txt") L = [] for line in f.readlines(): s = line.strip() n, a, s = s.split() # 拆成列表 student = {"name": n, "age": a, "score": s} L.append(student) f.close() return L
源碼: https://pan.baidu.com/s/1vVuH7OwNdn8vqaBKAivniQ
異常還沒處理...........