string比較python
1. python中 字元串是怎麼比較大小的
從第一個字元串開始比較,比較的是字元對應的ASCII碼大小,如果兩年字元串字元相同,但是一個字元串的字元多,則多的大,比如:
"ABC"小於"ABCD"
"ABD"大於"ABC"
2. python對比兩字元串有幾個相同字元
3個。python對比兩字元串是有3個相同字元的。字元是電子計算機或無線電通信中字母、數字、符號的統稱,其是數據結構中最小的數據存取單位,通常由8個二進制位來表示一個字元。
3. Python String和PyQt QString的區別
以下在python2.5和PyQt4.4.6 for python2.5環境下討論。
在python中有兩種與字元有關的類型:string object和Unicode object。
平時進行輸入輸出的一般都用string
object,當需要顯示一些特殊字元或者中文等文字時候,需要轉換為Unicode編碼。在PyQt中也有兩種字元類型與上面兩者對應:QByteArray和QString,主要是使用QString操作數據。
1) python string
object可以理解為一個接一個位元組的位元組組,至於表示什麼編碼,與表示文字有關,比如「python
string」,「中文」。注意它是有不同編碼區分的。
PyQt中與之對應的是QbyteArray,而不是Qstring。
A built-in string object (plain or Unicode) is a sequence of
characters used to store and represent text-based information
(plain strings are also sometimes used to store and represent
arbitrary sequences of binary bytes). (摘自《Python in a
NutShell》)
QByteArray can be used to store both raw bytes (including '"0's)
and traditional 8-bit '"0'-terminated.(摘自《PyQt手冊》)
2)Python Unicode
object可以理解為固定使用utf-16編碼的位元組組,其中英文和中文都使用兩個位元組(16位)來表示,如:u"Python
Unicode object"、u"中文"。
PyQt中與之對應的就是QString了。
Unicode string literals have the same syntax as other string
literals, with a u or U immediately before the leading quote.
(摘自《Python in a NutShell》)
Qt also provides the QString class to store string data. It stores
16-bit Unicode characters, making it easy to store
non-ASCII/non-Latin-1 characters in your
application.(摘自《PyQt手冊》)
QString stores a string of 16-bit QChars, where each QChar
corresponds one Unicode 4.0 character.(摘自《PyQt手冊》)
2 PyQt內部類型轉換
QString有
toAscii()、toUtf8()函數轉換為QByteArray類型,(這個基本不用,因為很少直接用QByteArray類型)有__init__
(self, QByteArray a)函數將QByteArray類型轉為QString。
3. Python string object和Python Unicode object相互轉換
1)Python string object是原始編碼是有區分的,通過 decode('原始編碼')
函數解碼得到通用utf16編碼即Python Unicode object。
>>>"python
string".decode('ascii')
或者
>>>"python
string".decode()
得到 u"python string"
因為默認按ascii解碼。
>>>"中文".decode('gbk')
得到 u""u4e2d"u6587" ,列印出來就是 中文 二字。(注意結果是2位元組一組,共兩組,對應兩個漢字)
又:"python string".decode('gkb') ,即按漢字來解碼,也可以得到 u"python
string",因為gbk編碼也支持英文字母;
但是"中文".decode('ascii') 即按ascii解碼是錯誤的,因為ascii編碼不支持漢字!
>>>
"dfdf".decode()
u'dfdf'
>>>
"dfdf".decode("ascii")
u'dfdf'
>>>
"dfdf".decode("gbk")
u'dfdf'
>>>
"中文".decode("gbk")
u'"u4e2d"u6587'
>>>print
"中文".decode("gbk")
中文
>>>
"中文".decode("gb2312")
u'"u4e2d"u6587'
>>>
"中文".decode("ascii")
Traceback (most recent call last):
File "<interactive input>", line 1,
in <mole>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd6 in
position 0: ordinal not in range(128)
2)Python Unicode object原始編碼固定是utf16,通過 encode('目的編碼') 編碼來得到Python
string object。
>>>u"unicode
string".encode()
或者
>>>u"unicode
string".encode('ascii')
得到
'unicode string',默認目的編碼為ascii。
>>>u"中文".encode("gbk")
得到'"xd4"xd0"xce"xc4',列印出來就是 中文。(注意結果是1位元組一組,共4組)
>>>
u"sdff".encode()
'sdff'
>>>
u"sdff".encode('ascii')
'sdff'
>>>
u"sdff".encode('gbk')
'sdff'
>>>
u"sdff".encode('gb2312')
'sdff'
>>>
u"中文".encode('gbk')
'"xd6"xd0"xce"xc4'
>>> print
u"中文".encode('gbk')
中文
>>>
u"中文".encode('ascii')
Traceback (most recent call last):
File "<stdin>", line 1, in
<mole>
UnicodeEncodeError: 'ascii' codec can't encode characters in
position 0-1: ordin
al not in range(128)
注意:執行>>>
u"中文".encode('gbk')命令需要你的IDE支持gbk編碼,在官方shell下執行肯定沒問題,但如果你的IDE比如PyWin中文輸入異常,則可能報錯。
4. Python string object和Python Unicode object向QString的轉換。
Qt一般不直接操作QByteArray,只需關注Python string object和Python Unicode
object向QString的轉換。
很多關於PyQt4的英文書籍說:PyQt函數需要QString參數的地方都可以直接用Python string
object或者Python Unicode object,如果非要轉換可以直接用QtCore.QString()構造。比如《GUI
Programming with PyQt》,再如《PyQt手冊》:
Whenever PyQt expects a QString as a function argument, a Python
string object or a Python Unicode object can be provided instead,
and PyQt will do the necessary conversion automatically.
You may also manually convert Python string and Unicode objects to
QString instances by using the QString constructor as demonstrated
in the following code fragment:
qs1 = QtCore.QString("Converted Python string object")
qs2 = QtCore.QString(u"Converted Python Unicode object")
但可惜這只適用於英文即ascii編碼,對於中文則行不通!
直接的QString:
>>>
QtCore.QString('中文')
PyQt4.QtCore.QString(u'"xd6"xd0"xce"xc4')
>>> print
QtCore.QString('中文')
Traceback (most recent call last):
File "<stdin>", line 1, in
<mole>
UnicodeEncodeError: 'ascii' codec can't encode characters in
position 0-3: ordin
al not in range(128)
>>>
>>>
QtCore.QString(u'中文')
PyQt4.QtCore.QString(u'"u4e2d"u6587')
>>> print
QtCore.QString(u'中文')
Traceback (most recent call last):
File "<stdin>", line 1, in
<mole>
UnicodeEncodeError: 'ascii' codec can't encode characters in
position 0-1: ordin
al not in range(128)
>>>
因為它們都是默認按ascii編碼轉換!
GUI編程:
可以創建一個QTextEdit對象myTextEdit, 檢驗:
myTextEdit.append("中文")
或者
myTextEdit.append(u"中文")
或者
myTextEdit.append(QtCore.QString('中文'))
或者
myTextEdit.append(QtCore.QString(u'中文'))
你會發現顯示都是亂碼...因為它們都是默認按ascii編碼進行內部轉換得到QString相應utf16編碼的。
解決方法是:
利用unicode()函數顯示指定gb2312編碼進行中文編碼轉換,轉換後的Python Unicode
object則是可以直接作為QString參數代入用的:
>>> unicode('中文',
'gb2312', 'ignore')
u'"u4e2d"u6587'
>>> print
unicode('中文', 'gb2312', 'ignore')
中文
>>>
myTextEdit.append(unicode('中文', 'gb2312', 'ignore'))
#用以替代myTextEdit.append(u"中文")
或者多此一舉下:
myTextEdit.append(QtCore.QString(unicode('中文', 'gb2312',
'ignore')))
#用以替代myTextEdit.append(QtCore.QString(u'中文'))
5. QString向Python string object和Python Unicode object的轉換。
Python中需要用Python string object和Python Unicode
object的地方可就不一定可以直接用QString了!!!
QString向Python string object轉換可以理解,因為編碼不同。
QString向Python Unicode object的轉換?需要轉換嗎?不都是utf16編碼嗎?
QString是tuf16編碼,但是它的實現並非Python Unicode
object那樣直接的utf16碼,而實際是一個QChar串,每個QChar才對應unicode符,所以地位相當但並不相同。
許多英文書籍寫到:可以使用str()函數直接將QString轉換為Python string
object,可以使用unicode()直接將QString轉換為Python Unicode
object。如《PyQt手冊》:
In order to convert a QString to a Python string object use the
Python str() builtin. Applying str() to a null QString and an empty
QString both result in an empty Python string object.
In order to convert a QString to a Python Unicode object use the
Python unicode() builtin. Applying unicode() to a null QString and
an empty QString both result in an empty Python Unicode
object.
但同樣只適用於英文,具體見下面分別分析。
1)QString向Python Unicode object的轉換。
>>> from PyQt4 import
QtGui, QtCore
>>>
unicode(QtCore.QString('def'))
u'def'
>>> print
unicode(QtCore.QString('def'))
def
對於中文,unicode()必須要指定編碼後有效。(這樣也只針對直接的QString有效?對於Qt
GUI編程中,從QWidget取得的QString無效?)
>>> from PyQt4 import
QtGui, QtCore
>>>
unicode(QtCore.QString('中文'))
u'"xd6"xd0"xce"xc4'
>>> print
unicode(QtCore.QString('中文'))
Traceback (most recent call last):
File "<stdin>", line 1, in
<mole>
UnicodeEncodeError: 'gbk' codec can't encode character u'"xd6' in
position 0: il
legal multibyte sequence
指定原始編碼後:
>>>
unicode(QtCore.QString('中文'),'gbk','ignore')
u'"u4e2d"u6587'
>>> print
unicode(QtCore.QString('中文'),'gbk','ignore')
中文 TEST
4. python怎樣比較兩個字元串時間
舉例,一個時間偏移後的比較情況:
1 #-*-coding=utf-8-*-
2 __author__='zhongtang'
3
4 '''
5 時間戳與字元串的互相轉換
6 '''
7
8 import time
9
10 localtime1=time.localtime()
11 time.sleep(5)
12 localtime2=time.localtime(time.time())
13
14 print type(localtime1),localtime1
15 print type(localtime2),localtime2
16
17 gmtime=time.gmtime(time.time())
18 print type(gmtime),gmtime
19
20
21 strtime1='20160518010101'
22 strtime2='20160518020101'
23
24 #字元串變成時間數據結構
25 localtime1=time.strptime(strtime1,'%Y%m%d%H%M%S')
26 localtime2=time.strptime(strtime2,'%Y%m%d%H%M%S')
27
28 print type(localtime1),localtime1
29 print type(localtime2),localtime2
30
31
32 #從時間數據結構轉換成時間戳
33 time1= time.mktime(localtime1)
34 time2= time.mktime(localtime2)
35
36 print type(time1),time1
37 print type(time2),time2
38
39 #時間戳可以直接相減,得到以秒為單位的差額
40 print time2-time1
輸出結果
1 <type 'time.struct_time'> time.struct_time(tm_year=2016, tm_mon=5, tm_mday=19, tm_hour=9, tm_min=9, tm_sec=30, tm_wday=3, tm_yday=140, tm_isdst=0)
2 <type 'time.struct_time'> time.struct_time(tm_year=2016, tm_mon=5, tm_mday=19, tm_hour=9, tm_min=9, tm_sec=35, tm_wday=3, tm_yday=140, tm_isdst=0)
3 <type 'time.struct_time'> time.struct_time(tm_year=2016, tm_mon=5, tm_mday=19, tm_hour=1, tm_min=9, tm_sec=35, tm_wday=3, tm_yday=140, tm_isdst=0)
4 <type 'time.struct_time'> time.struct_time(tm_year=2016, tm_mon=5, tm_mday=18, tm_hour=1, tm_min=1, tm_sec=1, tm_wday=2, tm_yday=139, tm_isdst=-1)
5 <type 'time.struct_time'> time.struct_time(tm_year=2016, tm_mon=5, tm_mday=18, tm_hour=2, tm_min=1, tm_sec=1, tm_wday=2, tm_yday=139, tm_isdst=-1)
6 <type 'float'> 1463504461.0
7 <type 'float'> 1463508061.0
8 3600.0
5. Python:比較兩個字元串是否相等或包含
腳本片段:
str1 = "resultCode": "200";
str2 = "{"total":2,"pages":1,"hint":"","resultCode":"200","error":""}
預期結果應該是返回True,但腳本執行後,結果一直是False,
肉眼觀察沒有問題,最後發現是str1的冒號後面多了一個空格。
6. python如何比較兩不同長度字元串差異
看實際功能需要是對比結果什麼樣,如果只需要看兩個字元串是否相同。
用cmp()方法就可以
完全相同,返回值為0
7. python中 字元串是怎麼比較大小的
字元串按位比較,兩個字元串第一位字元的ascii碼誰大,字元串就大,不再比較後面的;第一個字元相同的情況下,就比第二個字元串,以此類推。
舉例如下:
1、創建python文件,testcompare.py;