在Python中使用struct模塊打包數(shù)據(jù)和在C/C++語(yǔ)言中定義一個(gè)結(jié)構(gòu)體(也是把多個(gè)成員打包到一塊)差不多。
創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設(shè),韶關(guān)企業(yè)網(wǎng)站建設(shè),韶關(guān)品牌網(wǎng)站建設(shè),網(wǎng)站定制,韶關(guān)網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,韶關(guān)網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
只要客戶端告訴了你打包的數(shù)據(jù)的格式(比如:數(shù)據(jù)包的總長(zhǎng)度、數(shù)據(jù)包中各個(gè)數(shù)據(jù)域的長(zhǎng)度及類型,以及端序——大端還是小端),然后定義一個(gè)等價(jià)的C語(yǔ)言結(jié)構(gòu)體,并把接收到的數(shù)據(jù)放入一個(gè)這樣的結(jié)構(gòu)體變量(對(duì)象)中就完成了解包工作。然后,訪問(wèn)結(jié)構(gòu)體中的特定成員,就是訪問(wèn)傳送過(guò)來(lái)的特定數(shù)據(jù)了。
【常見的內(nèi)置函數(shù)】
1、enumerate(iterable,start=0)
是python的內(nèi)置函數(shù),是枚舉、列舉的意思,對(duì)于一個(gè)可迭代的(iterable)/可遍歷的對(duì)象(如列表、字符串),enumerate將其組成一個(gè)索引序列,利用它可以同時(shí)獲得索引和值。
2、zip(*iterables,strict=False)
用于將可迭代的對(duì)象作為參數(shù),將對(duì)象中對(duì)應(yīng)的元素打包成一個(gè)個(gè)元組,然后返回由這些元組組成的列表。如果各個(gè)迭代器的元素個(gè)數(shù)不一致,則返回列表長(zhǎng)度與最短的對(duì)象相同,利用*號(hào)操作符,可以將元組解壓為列表。
3、filter(function,iterable)
filter是將一個(gè)序列進(jìn)行過(guò)濾,返回迭代器的對(duì)象,去除不滿足條件的序列。
4、isinstance(object,classinfo)
是用來(lái)判斷某一個(gè)變量或者是對(duì)象是不是屬于某種類型的一個(gè)函數(shù),如果參數(shù)object是classinfo的實(shí)例,或者object是classinfo類的子類的一個(gè)實(shí)例,
返回True。如果object不是一個(gè)給定類型的的對(duì)象, 則返回結(jié)果總是False
5、eval(expression[,globals[,locals]])
用來(lái)將字符串str當(dāng)成有效的表達(dá)式來(lái)求值并返回計(jì)算結(jié)果,表達(dá)式解析參數(shù)expression并作為Python表達(dá)式進(jìn)行求值(從技術(shù)上說(shuō)是一個(gè)條件列表),采用globals和locals字典作為全局和局部命名空間。
【常用的句式】
1、format字符串格式化
format把字符串當(dāng)成一個(gè)模板,通過(guò)傳入的參數(shù)進(jìn)行格式化,非常實(shí)用且強(qiáng)大。
2、連接字符串
常使用+連接兩個(gè)字符串。
3、if...else條件語(yǔ)句
Python條件語(yǔ)句是通過(guò)一條或多條語(yǔ)句的執(zhí)行結(jié)果(True或者False)來(lái)決定執(zhí)行的代碼塊。其中if...else語(yǔ)句用來(lái)執(zhí)行需要判斷的情形。
4、for...in、while循環(huán)語(yǔ)句
循環(huán)語(yǔ)句就是遍歷一個(gè)序列,循環(huán)去執(zhí)行某個(gè)操作,Python中的循環(huán)語(yǔ)句有for和while。
5、import導(dǎo)入其他腳本的功能
有時(shí)需要使用另一個(gè)python文件中的腳本,這其實(shí)很簡(jiǎn)單,就像使用import關(guān)鍵字導(dǎo)入任何模塊一樣。
Python:常用函數(shù)封裝:
def is_chinese(uchar):
"""判斷一個(gè)unicode是否是漢字"""
if uchar = u'\u4e00' and uchar=u'\u9fa5':
return True
else:
return False
def is_number(uchar):
"""判斷一個(gè)unicode是否是數(shù)字"""
if uchar = u'\u0030' and uchar=u'\u0039':
return True
else:
return False
def is_alphabet(uchar):
"""判斷一個(gè)unicode是否是英文字母"""
if (uchar = u'\u0041' and uchar=u'\u005a') or (uchar = u'\u0061' and uchar=u'\u007a'):
return True
else:
return False
def is_other(uchar):
"""判斷是否非漢字,數(shù)字和英文字符"""
if not (is_chinese(uchar) or is_number(uchar) or is_alphabet(uchar)):
return True
else:
return False
def B2Q(uchar):
"""半角轉(zhuǎn)全角"""
inside_code=ord(uchar)
if inside_code0x0020 or inside_code0x7e: #不是半角字符就返回原來(lái)的字符
return uchar
if inside_code==0x0020: #除了空格其他的全角半角的公式為:半角=全角-0xfee0
inside_code=0x3000
else:
inside_code+=0xfee0
return unichr(inside_code)
def Q2B(uchar):
"""全角轉(zhuǎn)半角"""
inside_code=ord(uchar)
if inside_code==0x3000:
inside_code=0x0020
else:
inside_code-=0xfee0
if inside_code0x0020 or inside_code0x7e: #轉(zhuǎn)完之后不是半角字符返回原來(lái)的字符
return uchar
return unichr(inside_code)
def stringQ2B(ustring):
"""把字符串全角轉(zhuǎn)半角"""
return "".join([Q2B(uchar) for uchar in ustring])
def uniform(ustring):
"""格式化字符串,完成全角轉(zhuǎn)半角,大寫轉(zhuǎn)小寫的工作"""
return stringQ2B(ustring).lower()
def string2List(ustring):
"""將ustring按照中文,字母,數(shù)字分開"""
retList=[]
utmp=[]
for uchar in ustring:
if is_other(uchar):
if len(utmp)==0:
continue
else:
retList.append("".join(utmp))
utmp=[]
else:
utmp.append(uchar)
if len(utmp)!=0:
retList.append("".join(utmp))
return retList
return 應(yīng)該放在一個(gè)函數(shù)里面的,
將python打包成exe的程序有很多,比如py2exe、PyInstaller等等,但是到目前為止,它們對(duì)python3.1支持的都不好,所以這里我要介紹一下cx_freeze 4.2.2,它還能支持跨平臺(tái),可以在windows和linux運(yùn)行。
cx_freeze的下載網(wǎng)址為 ,要根據(jù)已安裝的python版本進(jìn)行選擇。比如我使用的是python3.1,所以就要下載cx_Freeze-4.2.2.win32-py3.1.msi這個(gè)文件。運(yùn)行這個(gè)安裝包后,相關(guān)程序就會(huì)被拷貝到python的目錄下。主要在兩個(gè)地方,一個(gè)是C:/Python31/Scripts,另一個(gè)是C:/Python31/Lib/site-packages/cx_Freeze
在以前版本的cx_Freeze中,是通過(guò)FreezePython.py這個(gè)腳本將py轉(zhuǎn)換為exe,而在4.2.2這個(gè)版本中,F(xiàn)reezePython.py已經(jīng)不見了,主要的工作交給了C:/Python31/Scripts下的cxfreeze.bat來(lái)完成。
使用cx_Freeze完成python打包exe主要有兩種方法:
第一種,直接運(yùn)行cxfreeze.bat通過(guò):
先進(jìn)入cmd命令行,進(jìn)入C:/Python31/Scripts目錄,然后運(yùn)行cxfreeze.bat -h 就可以看到它的使用說(shuō)明了。我們可以用cx_freeze自己的sample做個(gè)試驗(yàn)。
進(jìn)入到c:/python31/scripts/下,運(yùn)行
cxfreeze C:/Python31/Lib/site-packages/cx_Freeze/samples/PyQt4/PyQt4app.py --install-dir=d:/123
pytqt4app.py就會(huì)被打包成exe,并且它所用到的庫(kù)文件,也被一并考到了d:/123目錄下。
變量名={元素,元素,,,}
nums={11,24,45,96,28}
nums.add(42)
print(nums)
nums={11,24,45,96,28}
nums2=["anfly","tom"]
nums.update(nums2)
print(nums)
1)nums={11,24,45,96,28}? [沒有該數(shù)字報(bào)錯(cuò)]
? ?nums.remove(24)
? ?print(nums)
2)nums={11,24,45,96,28}? [隨機(jī)刪]
?nums.pop()
?print(nums)
3)nums={11,24,45,96,28}?[沒有該數(shù)字不會(huì)報(bào)錯(cuò)]
?nums.discard(24)
?print(nums)
交集:(存在相同元素)
set1={"anfly","tom","haha"}
set2={"anfly","susala"}
set3=set1set2
print(set3)
并集:(得到全部集合中全部的元素)
set1={1,2,3,4}
set2={3,4,5,6}
new_set=set1|set2
print(new_set)
運(yùn)算符 (+ * in)
內(nèi)置函數(shù) (len max min del)
列:set1 = {"1","2","3"}
? ? print(min(set1))
def函數(shù)名():
? ?執(zhí)行語(yǔ)句
函數(shù)名()
列:
defhello():
print("hello word")
hello()
2.函數(shù)參數(shù):
def? add2num():
a=11
b=22
c=a+b
print(c)
add2num()
3.位置參數(shù):
def? fun(a,b):
?print("a:",a)
?print("b:",b)
fun(2,3)
4.關(guān)鍵字參數(shù):
def? fun(a,b):
? print("a:",a)
?print("b:",b)
fun(a=2,b=3)? ?[第一個(gè)‘a(chǎn)’可以直接寫數(shù)字,也可以展示;第二個(gè)以及之后‘b’不能直接寫數(shù)字,要寫‘b=3’這種格式]
5.缺省參數(shù)
def printinfo(name,age=20):
? print("name:",name)
? print("age:",age)
printinfo(name="anfly")? [展示都能展示出來(lái)]
6.不定長(zhǎng)參數(shù)
1).*args[展示是元組]
defprintinfo(*args):
?print("args:",args)
printinfo(100,200,300,400)
2)**args[展示是k.v格式]
def printinfo(**kwargs):
?print("kwargs:",kwargs)
printinfo(a=100,b=200,c=300,d=400)
7.參數(shù)位置順序
def sun(a,*args,b=22,**kwargs):
? ? ?print("a:",a)? ? ? ? ==10
? ? ?print("args:",args)? ? ==(200,300)
? ? ?print("b:",b)? ? ==2
? ? ?print("kwargs:",kwargs)? =={‘m’:3,'n':4}
sun(100,200,300,b=2,m=3,n=4)
8.函數(shù)返回值
def fan(a,b):
? return a+b
print(fan(1,2))? #3
9.匿名函數(shù)(lambda函數(shù)也叫匿名函數(shù),即函數(shù)沒有具體的名稱)
案例一:
sum=lambda a,b:a+b
print(sum(1,2))? #3
案例二:
sum=lambda a,b:100
print(sum(1,2))? #100
1.局部變量
def jv():
? ?a=3?
? ?print(a)
def jv1():? ?
? ?a=99? ?
? ?print(a)
jv()? ? ? ?#3
jv1()? ? #99
2.全局變量
def jv():
? ?print(a)?
def jv1():? ?
? ? a=99? ?
? ? print(a)
jv()? ? ?#全局變量
jv1()? ? #99
3.局部變量升成全局變量
def jv():
? ? a=3?
? ? global b? ?
? ? ?b="我也是全局變量"?
? ? ? print(a)
def jv1():? ?
? ? ? ?a=99? ?
? ? ? ? print(a)? ?
? ? ? ? ?print(b)
jv()? ? ? ? ? #3
jv1()? ? ? ? #99 #“我也是全局變量”
一些python常用函數(shù)包:
1、Urllib3
Urllib3是一個(gè) Python 的 HTTP 客戶端,它擁有 Python 標(biāo)準(zhǔn)庫(kù)中缺少的許多功能:
線程安全
連接池
客戶端 SSL/TLS 驗(yàn)證
使用分段編碼上傳文件
用來(lái)重試請(qǐng)求和處理 HTTP 重定向的助手
支持 gzip 和 deflate 編碼
HTTP 和 SOCKS 的代理支持
2、Six
six 是一個(gè)是 Python 2 和 3 的兼容性庫(kù)。這個(gè)項(xiàng)目旨在支持可同時(shí)運(yùn)行在 Python 2 和 3 上的代碼庫(kù)。它提供了許多可簡(jiǎn)化 Python 2 和 3 之間語(yǔ)法差異的函數(shù)。
3、botocore、boto3、s3transfer、awscli
Botocore是 AWS 的底層接口。Botocore是 Boto3 庫(kù)(#22)的基礎(chǔ),后者讓你可以使用 Amazon S3 和 Amazon EC2 一類的服務(wù)。Botocore 還是 AWS-CLI 的基礎(chǔ),后者為 AWS 提供統(tǒng)一的命令行界面。
S3transfer(#7)是用于管理 Amazon S3 傳輸?shù)?Python 庫(kù)。它正在積極開發(fā)中,其介紹頁(yè)面不推薦人們現(xiàn)在使用,或者至少等版本固定下來(lái)再用,因?yàn)槠?API 可能發(fā)生變化,在次要版本之間都可能更改。Boto3、AWS-CLI和其他許多項(xiàng)目都依賴s3transfer。
4、Pip
pip是“Pip Installs Packages”的首字母遞歸縮寫。
pip很容易使用。要安裝一個(gè)包只需pip install package name即可,而刪除包只需pip uninstall package name即可。
最大優(yōu)點(diǎn)之一是它可以獲取包列表,通常以requirements.txt文件的形式獲取。該文件能選擇包含所需版本的詳細(xì)規(guī)范。大多數(shù) Python 項(xiàng)目都包含這樣的文件。
如果結(jié)合使用pip與virtualenv(列表中的 #57),就可以創(chuàng)建可預(yù)測(cè)的隔離環(huán)境,同時(shí)不會(huì)干擾底層系統(tǒng),反之亦然。
5、Python-dateutil
python-dateutil模塊提供了對(duì)標(biāo)準(zhǔn)datetime模塊的強(qiáng)大擴(kuò)展。我的經(jīng)驗(yàn)是,常規(guī)的Python datetime缺少哪些功能,python-dateutil就能補(bǔ)足那一塊。
6、Requests
Requests建立在我們的 #1 庫(kù)——urllib3基礎(chǔ)上。它讓 Web 請(qǐng)求變得非常簡(jiǎn)單。相比urllib3來(lái)說(shuō),很多人更喜歡這個(gè)包。而且使用它的最終用戶可能也比urllib3更多。后者更偏底層,并且考慮到它對(duì)內(nèi)部的控制級(jí)別,它一般是作為其他項(xiàng)目的依賴項(xiàng)。
7、Certifi
近年來(lái),幾乎所有網(wǎng)站都轉(zhuǎn)向 SSL,你可以通過(guò)地址欄中的小鎖符號(hào)來(lái)識(shí)別它。加了小鎖意味著與該站點(diǎn)的通信是安全和加密的,能防止竊聽行為。
8、Idna
根據(jù)其 PyPI 頁(yè)面,idna提供了“對(duì) RFC5891 中指定的應(yīng)用程序中國(guó)際化域名(IDNA)協(xié)議的支持?!?/p>
IDNA的核心是兩個(gè)函數(shù):ToASCII和ToUnicode。ToASCII會(huì)將國(guó)際 Unicode 域轉(zhuǎn)換為 ASCII 字符串。ToUnicode則逆轉(zhuǎn)該過(guò)程。在IDNA包中,這些函數(shù)稱為idna.encode()和idna.decode()
9、PyYAML
YAML是一種數(shù)據(jù)序列化格式。它的設(shè)計(jì)宗旨是讓人類和計(jì)算機(jī)都能很容易地閱讀代碼——人類很容易讀寫它的內(nèi)容,計(jì)算機(jī)也可以解析它。
PyYAML是 Python 的YAML解析器和發(fā)射器,這意味著它可以讀寫YAML。它會(huì)把任何 Python 對(duì)象寫成YAML:列表、字典,甚至是類實(shí)例都包括在內(nèi)。
10、Pyasn1
像上面的IDNA一樣,這個(gè)項(xiàng)目也非常有用:
ASN.1 類型和 DER/BER/CER 編碼(X.208)的純 Python 實(shí)現(xiàn)
所幸這個(gè)已有數(shù)十年歷史的標(biāo)準(zhǔn)有很多信息可用。ASN.1是 Abstract Syntax Notation One 的縮寫,它就像是數(shù)據(jù)序列化的教父。它來(lái)自電信行業(yè)。也許你知道協(xié)議緩沖區(qū)或 Apache Thrift?這就是它們的 1984 年版本。
11、Docutils
Docutils是一個(gè)模塊化系統(tǒng),用來(lái)將純文本文檔處理為很多有用的格式,例如 HTML、XML 和 LaTeX 等。Docutils能讀取reStructuredText格式的純文本文檔,這種格式是類似于 MarkDown 的易讀標(biāo)記語(yǔ)法。
12、Chardet
你可以用chardet模塊來(lái)檢測(cè)文件或數(shù)據(jù)流的字符集。比如說(shuō),需要分析大量隨機(jī)文本時(shí),這會(huì)很有用。但你也可以在處理遠(yuǎn)程下載的數(shù)據(jù),但不知道用的是什么字符集時(shí)使用它。
13、RSA
rsa包是一個(gè)純 Python 的 RSA 實(shí)現(xiàn)。它支持:
加密和解密
簽名和驗(yàn)證簽名
根據(jù) PKCS#1 1.5 版生成密鑰
它既可以用作 Python 庫(kù),也能在命令行中使用。
14、Jmespath
JMESPath,發(fā)音為“James path”,使 Python 中的 JSON 更容易使用。它允許你聲明性地指定如何從 JSON 文檔中提取元素。
15、Setuptools
它是用于創(chuàng)建 Python 包的工具。不過(guò),其文檔很糟糕。它沒有清晰描述它的用途,并且文檔中包含無(wú)效鏈接。最好的信息源是這個(gè)站點(diǎn),特別是這個(gè)創(chuàng)建 Python 包的指南。
16、Pytz
像dateutils一樣,這個(gè)庫(kù)可幫助你處理日期和時(shí)間。有時(shí)候,時(shí)區(qū)處理起來(lái)可能很麻煩。幸好有這樣的包,可以讓事情變得簡(jiǎn)單些。
17、Futures
從 Python 3.2 開始,python 提供current.futures模塊,可幫助你實(shí)現(xiàn)異步執(zhí)行。futures 包是該庫(kù)適用于 Python 2 的 backport。它不適用于 Python3 用戶,因?yàn)?Python 3 原生提供了該模塊。
18、Colorama
使用 Colorama,你可以為終端添加一些顏色:
更多Python知識(shí)請(qǐng)關(guān)注Python自學(xué)網(wǎng)