day07-字符编码、文件操作
生活随笔
收集整理的這篇文章主要介紹了
day07-字符编码、文件操作
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
目錄:
-
字符編碼
-
文件處理
一、字符編碼:
#1. 什么是字符編碼:將人識別的字符轉換計算機能識別的01,轉換的規(guī)則就是字符編碼表
#2. 常用的編碼表:ascii、unicode、GBK、Shift_JIS、Euc-kr
#3. 編碼操作:編碼encode()、解碼decode()? 1.1 知識儲備
# 電腦三大核心:cpu - 內存 - 硬盤(數(shù)據的存取過程),任何一個程序要想運算,必選先有硬盤加載到內存,然后cpu去內存取指執(zhí)行,運行著的應用程序產生的數(shù)據,必先存在內存。# 軟件及python解釋器讀取文件過程:啟動 - 讀取 - 展示|解釋執(zhí)行,python解釋器運行一個py文件(xxx.py)步驟:1.將python解釋器的代碼由硬盤讀到內存2.將xxx.py以普通文本文件形式讀到內存3.python讀取文件內容 識別python語法 執(zhí)行相應操作ps:普通的文本編輯器與python解釋器前兩步都是一樣的# python2環(huán)境的文件頭:# coding: 編碼格式 字符編碼
#字符編碼針對的是文字,那也就意味著這里需要考慮 視頻文件 音頻文件等其他文件嗎?
#不需要,字符編碼只跟文本文件有關#文本編輯器的輸入和輸出是兩個過程
#人在操作計算機的時候輸入的是人能夠看懂的字符,但是計算機只能識別010101這樣的二進制數(shù)據,那么:
#輸入的字符 >>>(字符編碼表)>>> 二進制數(shù)字 簡介與發(fā)展
#1. ascii - 各國編碼 - 萬國編碼
#2. 存取不一致的亂碼現(xiàn)象
#3. unicode與utf-8 #字符編碼表就是字符與數(shù)字的對應關系 a 0b 1a 00b 01 c 11d 10#ASCII碼表 #用八位二進制表示一個英文字符 所有的英文字符+符號最多也就在125位左右 0000 0000 1111 1111 #GBK #用2Bytes表示一個中文字符 還是用1Bytes表示一個英文字符 0000 0000 0000 0000 1111 1111 1111 1111 最多能表示65535個字符#基于上面的推導步驟 任何一個國家要想讓計算機支持本國語言都必須自己創(chuàng)建一個字符與數(shù)字的對應關系 日本人 shift 韓國人 fuck#萬國碼unicode 統(tǒng)一用2Bytes表示所有的字符 a 0000 0000 0010 1010 #1.浪費存儲空間 #2.io次數(shù)增減,程序運行效率降低(致命)#當內存中的unicode編碼格式數(shù)據存到硬盤的時候,會按照utf-8編碼 unicode transformation format #會將unicode的英文字符由原來的2Bytes變成1Bytes #會將unicode中文字符由原來的2Bytes變成3Bytes#現(xiàn)在的計算機 內存都是unicode硬盤都是utf-8
需要掌握的
#(需要掌握的) unicode的兩個特點1.用戶在輸入的時候,無論輸什么字符都能夠兼容萬國字符2.其他國家編碼的數(shù)據由硬盤讀到內存的時候unicode與其他各個國家的編碼都有對應關系#(必須掌握的) 數(shù)據由內存保存到硬盤1.內存中的unicode格式二進制數(shù)字 >>>>編碼(encode)>>>>> utf-8格式的二進制數(shù)據硬盤中的數(shù)據由硬盤讀到內存1.硬盤中的utf-8格式的二進制數(shù)據 >>>>>解碼(decode)>>>>> 內存中unicode格式的二進制數(shù)據#保證不亂碼在于(******)文本文件以什么編碼編的就以什么編碼解
核心
# 編碼操作:編碼encode()、解碼decode() python2和3的區(qū)別
#python2
將py文件按照文本文件讀入解釋器中默認使用ASCII碼(因為在開發(fā)python2解釋器的unicode還沒有盛行)
#python3 將py文件按照文本文件讀入解釋器中默認使用utf-8#文件頭:
# coding:utf-8 1.因為所有的編碼都支持英文字符,所以文件頭才能夠正常生效#基于Python解釋器開發(fā)的軟件,只要是中文,前面都需要加一個u
為了的就是講python2(當你不指定文件頭的時候,默認用ASCII存儲數(shù)據,如果指定文件頭那么就按照文件頭的編碼格式存儲數(shù)據)python3中字符串默認就是unicode編碼格式的二進制數(shù)補充:1.pycharm終端用的是utf-8格式2.windows終端采用的是gbk 字符與字節(jié)
重點
#1. 字節(jié)的存儲方式:8個二進制位
#2. 字符所占字節(jié)數(shù):根據編碼的不同,所占字節(jié)數(shù)可能不同
#3. 三種格式字符串:u''、b''、r'' 了解
#u、b格式字符串轉換: str(b'', encode='utf-8')、bytes(u'', encode='utf-8') 字符編碼總結
x = '上'
res1 = x.encode('gbk') # 將unicode編碼成可以存儲和傳輸?shù)膗tf-8的二進制數(shù)據
print(res1) # b'\xe4\xb8\x8a'
# bytes類型 字節(jié)串類型 你就把它當成二進制數(shù)據即可
res2 = res1.decode('gbk') # 將硬盤中的utf-8格式的二進制數(shù)據解碼成unicode格式的二進制數(shù)據
print(res2)# 補充:
# 你a他
# 1Bytes|1Bytes|1Bytes|1Bytes|1Bytes|1Bytes|1Bytes
# 1+7bit|1+7bit|1+7bit|1+7bit|1+7bit|1+7bit|1+7bit 二、文件操作
靈魂三問
#什么是文件?
操作系統(tǒng)提供給用戶操作復雜硬件(硬盤)的簡易的接口#為什么操作文件
人或者應用程序需要永久的保存數(shù)據#如何用f = open()f.read()f.close() 重點
#1. 文件操作的三步驟:打開文件 - 使用文件 - 關閉文件
#2. 文件操作三要素:文件源、操作模式、編碼
#3. with語法:with open(...) as 別名, ..., open(...) as 別名: pass
#4. 重點方法:read() | write() | readline() | close() | f.flush() | f.seek() 操作模式
#主模式:r | w | a
#從模式:b | t | +
#了解:x | U 操作方法
#讀:read() | readline() | readlines()
#寫:write() | writelines() | flush()
#光標:seek() | tell()
#特征:encoding | closed#了解:readable() | writable() | name 案例
通過python代碼操作文件 r取消轉義 f = open(r'text.txt',encoding='utf-8') # 向操作系統(tǒng)發(fā)送請求 打開某個文件 # 應用程序要想操作計算機硬件 必須通過操作系統(tǒng)來簡介的操作 print(f) # f是文件對象 print(f.read()) # windows操作系統(tǒng)默認的編碼是gbk f.read() # 向操作系統(tǒng)發(fā)請求 讀取文件內容 f.close() # 告訴操作系統(tǒng) 關閉打開的文件 print(f) print(f.read())f = open('/Users/yuanjianwei/PycharmProjects/Python text/text.txt', encoding='UTF-8') # f = open(r'text.txt', encoding='GBK') :r取消轉義(\n,\a等),win系統(tǒng)默認的編碼是gbk print(f) # f相當于遙控器,文件相當于電視機 # <_io.TextIOWrapper name='/Users/yuanjianwei/PycharmProjects/Python text/text.txt' mode='r' encoding='UTF-8'> print(f.read()) f.read() # 向操作系統(tǒng)發(fā)請求 讀取文件內容 f.close() # 告訴操作系統(tǒng) 關閉打開的文件 print(f) # 遙控器還在,但是電視機關了 print(f.read()) # 報錯:ValueError: I/O operation on closed file. 文件上下文操作 with open(r'D:\Python項目\day07\a.txt',encoding='utf-8') as f ,\open(r'D:\Python項目\day07\b.txt',encoding='utf-8') as f1: # f僅僅是一個變量名 你把它看成是一個遙控器print(f)print(f.read())print(f1)print(f1.read())# 通過 with...as 代替文件的打開關閉(節(jié)省內存), with open(r'text.txt', encoding='UTF-8') as f:print(f) # f為被賦值變量,也就是遙控器print(f.read()) # read讀取文件內容
案例二
with open(r'text3.txt', mode='w+', encoding='utf-8') as f:print(f.write('You love who ?'))print(f.readable()) # 是否可讀?Trueprint(f.writable()) # 是否可寫?Trueprint(f.read()) # 不報錯,但也沒有輸出值 with open(r'D:\Python項目\day07\a.txt', mode='r', encoding='utf-8') as f:print(f.readable()) # 是否可讀print(f.writable()) # 是否可寫print(f.read()) # 一次性將文件內容全部讀出 操作文件單位的方式t 文本文件 t在使用的時候需要指定encoding參數(shù) 如果不知道默認是操作系統(tǒng)的默認編碼b 二進制 一定不能指定encoding參數(shù) with open(r'D:\Python項目\day07\1.jpeg', mode='rb') as f:print(f.readable()) # 是否可讀print(f.writable()) # 是否可寫print(f.read()) # 一次性將文件內容全部讀出 r模式在打開文件的時候 如果文件不存在 直接報錯 文件路徑可以寫相對路徑 但是需要注意該文件必須與執(zhí)行文件在同一層文件下 with open(r'a.txt',mode='r',encoding='utf-8') as f: with open(r'a.txt','r',encoding='utf-8') as f1: mode關鍵字可以不寫 print(f.readable()) # 是否可讀 print(f.writable()) # 是否可寫 print(">>>1:") print(f.read()) # 一次性將文件內容全部讀出 print('>>>2:') print(f.read()) # 讀完一次之后 文件的光標已經在文件末尾了,再讀就沒有內容了可讀 print(f.readlines()) # 返回的是一個列表 列表中的一個個元素對應的就是文件的一行行內容 for line in f: # f可以被for循環(huán) 每for循環(huán)依次 讀一行內容print(i) # 這個方法 就可以解決大文件一次性讀取占用內存過高的問題 print(f.readline()) # 只讀取文件一行內容 print(f.readline()) print(f.readline()) print(f.readline())with open(r'/Users/Python text/text.txt', 'r', encoding='utf_8') as f1:print(f1.readline()) # 取第一行print(f1.readline())print(f1.readlines()) # 取全部行print(f1.readlines()) # 只能取到[],因為上一行已經全部讀完,光標到最后 w模式:w模式一定要慎用 1.文件不存在的情況下 自動創(chuàng)建該文件 2.當文件存在的情況下 會先清空文件內容再寫入 with open(r'xxx.txt',mode='w',encoding='utf-8') as f:print(f.readable()) # 是否可讀print(f.writable()) # 是否可寫 f.write('不不不,你沒有翻~\n') f.write('不不不,你沒有翻~\n') f.write('不不不,你沒有翻~\n') f.write('不不不,你沒有翻~\r') f.write('不不不,你沒有翻~') l = ['不sdffs,sdfs有翻~\n','不sdfsdf不,你sdfsf翻~\n','不sfad不,你沒sa翻~\n'] f.writelines(l) # 上下等價 for i in l:f.write(i)with open(r'love.txt', 'w', encoding='utf-8') as l1:l1.write('不不不,你沒有翻車~\n')l1.write('不不不,你沒有翻車~\n')l1.write('不不不,你沒有翻車~\n')l1.write('不不不,你沒有翻車~')l1.write('不不不,你沒有翻車~')l1.write('不不不,你沒有翻車~')l = ['不sdffs,sdfs有翻~\n', '不sdfsdf不,你sdfsf翻~\n','不sfad不,你沒sa翻~\n']l1.writelines(l)a模式 1.當文件不存在的情況下 自動創(chuàng)建該文件 2.當文件存在的情況下,不清空文件內容, 文件的光標會移動文件的最后 with open(r'yyy.txt',mode='a',encoding='utf-8') as f:print(f.readable()) # 是否可讀print(f.writable()) # 是否可寫f.write('我是小尾巴\n')with open(r'love.txt', 'a', encoding='utf-8') as l2:print(l2.readable())print(l2.writable())l2.write('我是小尾巴\n')
?
?
1. 文件復制
2. 文件修改
了解:py文件腳本機制
?
轉載于:https://www.cnblogs.com/Ryan-Yuan/p/11140725.html
總結
以上是生活随笔為你收集整理的day07-字符编码、文件操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Day 33 并发编程3
- 下一篇: 微软CRM 2011 新功能之三:可新增