日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

day07-字符编码、文件操作

發(fā)布時間:2023/11/27 生活经验 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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-字符编码、文件操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。