Python全栈工程师(文件操作、编码)
?
ParisGabriel 每天堅持手寫??一天一篇? 決定堅持幾年 為了夢想為了信仰 ?Python人工智能從入門到精通
?
?
?
最近簡直要死了 發燒感冒 喉嚨痛。。。。、
?
如何長期保存計算機中數據:
需要文件操作
文件 file:
文件是用于數據存儲的單位
文件通常用來長期儲存數據
文件中的數據是以字節為單位進行順序儲存的
文件的操作流程:
1.打開文件
2.讀/寫文件
3.關閉文件
注:
任何操作系統, 一個應用程序同時打開文件的數量有最大數限制
文件打開函數:
open(file, mode=‘rt’) 用于打開一個文件, 返回此文件流對象,
如果打開文件失敗, 則會觸發osError錯誤
文件的關閉方法:
F.colse() #關閉問津, 釋放系統資源
示例:
# 此示例示意文件的打開和關閉操作 try:f = open('./aaa.txt') # 不存在此文件# f = open('./myfile.txt') # 不存在此文件print("打開文件成功")# 此處要進行讀/寫操作 f.close() # 半閉文件 except OSError:print("文件打開失敗")文件方法:
文件
mode 模式字符的含義
| 'r' | 以只讀方式打開(默認) |
| 'w' | 以只寫方式打開,刪除原有文件內容(如果文件不存在,則創建該文件并以只寫方式打開) |
| 'x' | 創建一個新文件, 并以寫模式打開這個文件,如果文件存在則會產生"FileExistsError"錯誤 |
| 'a' | 以只寫文件打開一個文件,如果有原文件則追加到文件末尾 |
| 'b' | 用二進制模式打開 |
| 't' | 文本文件模式打開 (默認) |
| '+' | 為更新內容打開一個磁盤文件 (可讀可寫) |
- 缺省模式是 'rt'
- 'w+b' 可以實現二進制隨機讀寫,當打開文件時,文件內容將被清零
- 'r+b' 以二進制讀和更新模式打開文件,打開文件時不會清空文件內容
- 'r+' 以文本模式讀和更新模式打開文件,打開文件時不會清空文件內容
python 文件常用方法:
| 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”作為分隔符
f = open('phonenumber.txt')for line in f:print(line) # 打印每一行的數據?
標準輸入輸出文件:
sys.stdin 標準輸入文件
Ctrl + D ? ? 輸入文件結束符
sys.stdout ??標準輸出文件
sys.stderr? ? ? ?標準錯誤輸出文件
標準文件絕對不能關閉
Linux系統內所有的硬件都會映射成文件 關閉文件會導致錯誤
模塊:sys
注:
標準文件不需要打開和關閉就可以使用
示例:
?
二進制文件操作:
二進制文件操作模式字符:‘b’
默認文件中存儲的是以字節數據為單位, 通常有人為規定的格式
二進制文件操作需要用字節串進行讀寫
F.read()/F.readline() F.readlines()返回類型
對于文本操作
F.write() 對于二進制文件也需要用字節串進行操作
F.tell:
作用:
返回當前的讀寫位置(從文件頭以字節為單位)
F.seek方法:
F.seek(偏移量,whence=相對位置)
偏移量
大于0的數代表向文件尾方向移動的字節數
小于0的數代表向文件頭方向移動的字節數
相對位置
0代表從文件頭開始偏移
1代表從文件當前位置開始偏移
2代表從文件尾開始偏移 (第一個參數必須是負的)
示例:
?
漢字編碼(只講兩種)
國標系列:
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
異常還沒處理...........
轉載于:https://www.cnblogs.com/ParisGabriel/p/9357601.html
總結
以上是生活随笔為你收集整理的Python全栈工程师(文件操作、编码)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js 面向对象例子
- 下一篇: Python_面向对象_递归