演示文件為docx文檔,內(nèi)容如下:
創(chuàng)新互聯(lián)建站專業(yè)為企業(yè)提供昭通網(wǎng)站建設(shè)、昭通做網(wǎng)站、昭通網(wǎng)站設(shè)計、昭通網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、昭通企業(yè)網(wǎng)站模板建站服務(wù),10多年昭通做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。
源碼
運行源碼查看報錯信息
UnicodeDecodeError: 'gbk' codec can't decode byte 0xab in position 15: illegal multibyte sequence
上述錯誤是一種很常見的解碼錯誤,下面介紹該錯誤的解決方法
把utf-8,gbk等各種編碼方式都試了一遍,還是沒有解決問題然后仔細看報錯信息,根據(jù)UnicodeDecodeError: 'utf-8' codec can't decode byte 0xfb in position 14: invalid start byte,猜測文件中某個字節(jié)不能解碼,打開文件一看,并沒有看出什么問題來
open() 函數(shù)的第三個參數(shù)不是用來接收編碼方式的,而是傳入一個buffering的值,此處傳入了'gbk'字符串,所以系統(tǒng)提示傳一個整型
通過調(diào)用office的API進行操作,因為在office上能完成的操作,都能通過win32完成,所以我們選擇使用win32
(Python3.5 需要安裝 win32compat,里面含了 win32 的很多包)
在寫python程序時,常能用到一些函數(shù)和方法,總結(jié)一下,保存起來,方便查詢。
一、內(nèi)置函數(shù)
# abs()獲取數(shù)字絕對值
# chr(i)數(shù)字轉(zhuǎn)換為字符類型
# divmod() 獲取兩個數(shù)值的商和余數(shù)
# enumerate() 將可遍歷序列組合為索引序列
# float()轉(zhuǎn)換為浮點數(shù)
# format() 格式化字符串
# int()轉(zhuǎn)換為整數(shù)?
# input() 接受用戶輸入內(nèi)容
# len() 計算元素個數(shù)
# max() 返回最大值
# min() 返回最小值
# math.ceil() 返回指定數(shù)值的上舍整數(shù)
# open()打開文件并返回文件對象
# pow() 冪運算
# print()打印輸出?
# range() 生成器
# reversed()反轉(zhuǎn)所有元素
# round()四舍五入求值
# sorted()對可迭代對象進行排序?
# str() 轉(zhuǎn)換為字符串
# sum() 求和
# set() 創(chuàng)建集合
# tuple() 將序列轉(zhuǎn)換為元組
# zip()將可迭代對象打包成元組
二、方法
# append() 添加列表元素
# capitalize()首字母轉(zhuǎn)換為大寫?
# count()字符出現(xiàn)次數(shù)
# close() 關(guān)閉文件
# decode() 解碼字符串
# dict.keys() 獲取字典所有的鍵
# find()字符串首次出現(xiàn)的索引
# f.read() 讀取文件內(nèi)容
# dict.update()更新字典
# dict.items() 獲取字典鍵/值對
# dict.get() 返回指定鍵的值
# encode() 編碼字符串
# list.sort() 排序列表元素
# index() 元素首次出現(xiàn)的索引
# isdigit() 判斷字符串是否只由數(shù)字組成
# isupper() 是否所有字母都為大寫
# isnum() 判斷字符串是否由字母和數(shù)字組成
# islower() 是否所有字母都為小寫
# isdecimal() 檢查字符串是否只包含十進制字符
# isalpha() 檢測字符串是否為純字母
# random.shuffle()隨機排序
# random.sample()返回無重復隨機數(shù)列表
# random.choice() 返回一個隨機元素
# random.randint() 生成指定范圍的隨機整數(shù)
# random.randrange() 生成指定范圍的指定遞增基數(shù)隨機整數(shù)
# pop() 刪除列表中的元素
# remove()刪除列表中的指定元素
# strip()去除空格
# lstrip()去除左側(cè)空格
# rstrip() 去除右側(cè)空格
# readline() 讀取單行內(nèi)容
# root.after() Tkinter中等待一段時間后再執(zhí)行命令
# str.isnumeric() 驗證字符串是否為數(shù)字(適用于Unicode)
# split()分割字符串
# ord() 將字符轉(zhuǎn)換為整數(shù)
# replace() 字符串替換
# ljust() 左對齊填充
# rjust() 左對齊填充
# readlines() 讀取所有行內(nèi)容
# datetime.datetime.now() 返回指定時區(qū)的本地日期時間
# datetime.datetime.today() 獲取當前本地日期的date對象
# datetime.utcnow() 返回當前UTC時間的datetime對象
# time.strptime()把時間字符串解析為元組
# time.time()返回當前時間的時間戳
# time.sleep()暫停指定秒數(shù)
# time.strftime() 返回指定格式的日期字符串
# time.mktime() 接收時間元組并返回時間戳
# os.getcwd() 獲取當前工作目錄
# os.listdir() 獲取指定路徑下的目錄和文件列表
# os.makedirs() 遞歸創(chuàng)建目錄
# os.rename() 重命名目錄或文件
# os.path.exists() 判斷路徑是否存在
# upper() 全部轉(zhuǎn)換為大寫字母
# lower()? 全部轉(zhuǎn)換為小寫字母
# sys.stdout.write() 標準輸出打印
# sys.stdout.flush()刷新輸出?
# shutil.copy() 復制單個文件到另一文件或目錄
# write() 寫入文件內(nèi)容
# winsound.Beep() 打開電腦揚聲器
# zfill() 在字符串前面填充0
三、循環(huán)語句
# break終止當前循環(huán)
# continue 終止本循環(huán)進入下一次循環(huán)
# with open() as file 以with語句打開文件(數(shù)據(jù)保存)
四、轉(zhuǎn)義字符
\ 行尾續(xù)行符
\' 單引號?
\'' 雙引號
\a 響鈴
\e 轉(zhuǎn)義
\n 換行
\t 橫向制表符
\f 換頁
\xyy 十六進制yy代表的字符
\\反斜杠符號
\b 退格
\000 空
\v 縱向制表符
\r 回車
\0yy 八進制yy代表的字符
\other 其他的字符以普通格式輸出
base64 是經(jīng)常使用的一種加密方式,在 Python 中有專門的庫支持。
本文主要介紹在 Python2 和 Python3 中的使用區(qū)別:
在 Python2 環(huán)境:
在 Python3 環(huán)境:
Python3 中有一些區(qū)別,因為 Python3 中字符都是 unicode 編碼,而 b64encode 函數(shù)的參數(shù)為 byte 類型,所以必須先轉(zhuǎn)碼。
以上就是本文的全部內(nèi)容,如果覺得有用的話歡迎 點贊 和 轉(zhuǎn)發(fā) ,多謝。
推薦閱讀:
下面一張圖搞懂編碼、解碼、編碼表之間的關(guān)系。
不難看出,它們是一種根據(jù)編碼表進行翻譯、映射的過程:
實際上,字符串類型只有encode()方法,沒有decode()方法,而bytes類型只有decode()方法而沒有encode()方法。
二進制格式的數(shù)據(jù)也常稱為裸數(shù)據(jù)(raw data),所以str數(shù)據(jù)經(jīng)過編碼后得到raw data,raw data解碼后得到的str。
上面說了,編碼是將字符數(shù)據(jù)轉(zhuǎn)換成字節(jié)數(shù)據(jù)(raw data),解碼是將字節(jié)數(shù)據(jù)轉(zhuǎn)換成字符數(shù)據(jù)。在Python中字符數(shù)據(jù)也就是字符串,即str類型,字節(jié)數(shù)據(jù)也就是bytes類型或bytearray類型。
編碼時,可以使用字節(jié)類型的構(gòu)造方法bytes()、bytearray()來構(gòu)造字節(jié),也可以使用str類型的encode()方法來轉(zhuǎn)換。
解碼時,可以使用str類型的構(gòu)造方法str()來構(gòu)造字符串,也可以使用bytes、bytearray()類型的decode()方法。
另外需要注意的是,編碼和解碼的過程中都需要指定編碼表(字符集),默認采用的是utf-8字符集。
例如,使用encode()的方式將str編碼為bytes數(shù)據(jù)。
使用bytes()和bytearray()將str構(gòu)造成bytes或bytearray數(shù)據(jù),這兩個方法都要求str-byte的過程中給定編碼。
實際上,bytes()、bytearray()這兩個方法構(gòu)造字節(jié)數(shù)據(jù)的時候還有點復雜,因為可以從多個數(shù)據(jù)源來構(gòu)造,比如字符串、整數(shù)值、buffer。如何使用這兩個方法構(gòu)造字節(jié)數(shù)據(jù),詳細內(nèi)容參考help(bytes)和help(bytearray)給出的說明,這里給幾個簡單示例。
構(gòu)造bytes的方式:
構(gòu)造bytearray的方式:
解碼是字節(jié)序列到str類型的轉(zhuǎn)換。
例如,使用decode()方法進行解碼"我"字,它的utf-8的編碼對應(yīng)為"\xe6\x88\x91":
使用str()進行轉(zhuǎn)換。
當編碼、解碼的過程使用了不同的(不兼容的)編碼表時,就會出現(xiàn)亂碼。所以,解決亂碼的唯一方式是指定對應(yīng)的編碼表進行編碼、解碼。
例如,使用utf-8編碼"我"字,得到一個bytes序列,然后使用gbk解碼這個bytes序列。
這里報錯了,因為utf-8的字節(jié)序列里有g(shù)bk無法解碼的字節(jié)。如果使用文本編輯器一樣的工具去顯化這個過程,得到的將是亂碼字符。
原文地址: