文字編輯器讀取檔案內容的流程
階段1、啟動乙個檔案編輯器(文字編輯器如nodepad++,pycharm,word)
階段2、檔案編輯器會將檔案內容從硬碟讀入記憶體
階段3、文字編輯器會將剛剛讀入記憶體中的內容顯示到螢幕上
python直譯器執行檔案的流程
階段1、啟動python直譯器,此時就相當於啟動了乙個文字編輯器
階段2、python直譯器相當於文字編輯器,從硬碟上將test.py的內容讀入到記憶體中
階段3、python直譯器解釋執行剛剛讀入的記憶體的內容,開始識別python語法
計算機底層儲存資料的原理
"""只認識0101010的二進位制數字"""
# 字元編碼表:內部就是儲存了數字與人類字元的對應關係
1.美國
定義乙個數字與英文本元的對應關係》:字元編碼表
ascii碼:只記錄了英文本元與數字的對應關係
1bytes儲存英文本元
"""a-z:65-90
a-z:97-122
"""2.中國
自己發明一套編碼表》:數字與中文、英文本元的對應關係
gbk碼:記錄了英文、中文與數字的對應關係
1bytes儲存英文本元
2bytes儲存中文字元 如果不夠則使用3bytes\4bytes
南韓南韓棒子也發明了他們的編碼表》:數字與韓文、英文本元對應的關係
euc_kr:記錄了英文、韓文與數字的對應關係
日本小日本也發明了他們的編碼表》:數字與日文、英文本元對應的關係
shift_jis:記錄了英文、日文與數字的對應關係
..."""
群雄割據的階段會產生乙個非常奇怪的現象》:亂碼
其實就是編碼本使用混亂導致文字展示錯誤
"""3.unicode # 萬國碼
"""內部記錄了所有國家的字元與數字的對應關係"""
所有的字元統一採用最少2bytes儲存
現在的計算機可以輸出所有國家的字元 記憶體使用的是unicode編碼
unicode會浪費儲存空間和io時間 所以又開發了乙個編碼
utf8 # unicode transformation format
優化了unicode儲存資料的容量
1bytes儲存英文本元
3bytes儲存中文字元
# 結論:記憶體中的編碼不需要考慮 值考慮硬碟上的即可 utf8
# 編碼與解碼
encode 編碼 將人類能夠讀懂的字元編碼成計算機能夠讀懂的字元 print(str.encode('gbk'))
decode 解碼 將計算機能夠讀懂的字元解碼**類能夠讀懂的字元 print(str.decode('gbk'))
'''字串前面如果加了字母b 表示該資料型別為bytes型別 bytes型別可以看成是二進位制'''
'''基於網路的資料傳輸 資料都必須是二進位制格式 所以肯定涉及到編碼與解碼'''
# 如何解決亂碼
資料當初以什麼編碼編的就以什麼碼解即可
# python直譯器層面
python2直譯器預設的編碼是ascii碼
1.檔案頭:必須寫在檔案的最上方 告訴直譯器使用指定的編碼
coding:utf8 美化寫法:-*-coding:utf8-*-
2.字元字首:在使用python2直譯器的環境下定義字串習慣在前面加u
name = u'你好啊'
python3直譯器預設的編碼是utf8
'''檔案即作業系統暴露給使用者可以直接操作硬碟的快捷方式'''
# **操作檔案的流程
1.開啟檔案、建立檔案
2.編輯檔案內容
3.儲存檔案內容
4.關閉檔案
## 基本語法結構
結構1f1 = open()
f1.close()
res = open(r'路徑', 'r', encoding='utf8') 使用關鍵字開啟檔案
'''以後寫路徑為了防止特殊符號 直接加r'''
'''open(檔案的路徑,檔案的操作模式,檔案的編碼) 檔案的路徑是必須要寫的'''
print(res.read()) 讀取檔案內容
res.close() 關閉檔案
"""上述操作open完最後都需要執行close 而close這一行很任意被遺忘"""
結構2with open() as f:
pass
with open(r'路徑', 'r', encoding='utf8') as f: with上下文管理
data = f.read()
print(data)
'''pass (推薦)補全語法結構 本身沒有任何功能'''
'''... (不推薦)補全語法結構 本身沒有任何功能'''
r模式 r read 唯讀模式:只能讀不能寫
with open(r'路徑', 'r', encoding='utf8') as f1:
print(f1.read()) # 一次性讀取檔案內所有的內容
f1.write('python是最牛逼的語言!!!') # 報錯
路徑不存在:直接報錯
路徑存在:正常開啟檔案並等待內容讀取
w模式 w write 只寫模式:只能寫不能讀
with open(r'路徑', 'w', encoding='utf8') as f1:
f1.write('文字內容\n') # 寫入檔案內容
print(f1.read()) # 報錯
"""換行 最早的時候:\r\n
為了節省空間支援乙個字元 根據作業系統的不同可能有所區別
\n 、 \r
"""路徑不存在:自動建立檔案
路徑存在:先清空檔案內容 之後再寫入資料
with open(r'路徑', 'a', encoding='utf8') as f1:
f1.write('文字內容\n') # 寫入檔案內容
print(f1.read()) # 報錯
路徑不存在:自動建立檔案
路徑存在:不會清空檔案內容 而是在檔案末尾等待新內容的新增
t模式
文字模式 是預設的模式
r rt
w wt
a at
1.該模式只能操作文字檔案
2.該模式必須要指定encoding引數
3.該模式讀寫都是以字串為最小單位
b模式
二進位制模式 可以操作任意型別的檔案
rb 不能省略b
wb 不能省略b
ab 不能省略b
1.該模式可以操作任意型別的檔案
2.該模式不需要指定encoding引數
3.該模式讀寫都是以bytes型別為最小單位
read() 一次性讀取檔案內容
1.執行完之後游標在檔案末尾 繼續讀取沒有內容
2.當檔案內容特別大的時候 容易造成記憶體溢位(滿了)
readline() 一次唯讀一行內容
readlines() 結果是乙個列表 裡面的各個元素是檔案的一行行內容
readable() 判斷當前檔案是否可讀
支援for迴圈 一行行讀取檔案內容(推薦使用) 記憶體中同一時刻只會有一行內容
write 寫入檔案內容(字串或者bytes型別)
writelines() 可以將列表中多個元素寫入檔案
writeable() 判斷檔案是否可寫
flush() 相當於主動按了ctrl+s(儲存)
Python學習筆記 9
只能用於可變序列,不能用於字串str 列表的方法 只能用於可變序列,不能用於字串str s a b c print 修改前 s d print s extend 使用新的序列擴充套件當前序列 相當於在結尾新增了乙個序列 s.extend i j print s s.extend s print s ...
字典 Python基礎前傳(9)
jacky說科學存在的邏輯只有兩個 1.解釋問題 2.解決問題 我們明白了科學的邏輯,我們理解任何的知識和技能,都是很簡單的 user info 而list相反 user info name 迴圈for i in user info print i user info.keys user info....
字典 Python基礎前傳(9)
jacky說科學存在的邏輯只有兩個 1.解釋問題 2.解決問題 我們明白了科學的邏輯,我們理解任何的知識和技能,都是很簡單的 user info 而list相反 user info name 迴圈for i in user info print i user info.keys user info....