一、python列表知识点
3、深入 Python :Dive Into Python 中文版——list
二、字符串的split函数
print 'a b c d e f g'.split()
print 'a,b,c,d,e,f,g'.split(',')
结果都是:['a','b','c','d','e','f','g']
字符串的split函数默认分隔符是空格 ' ',如果没有分隔符,就把整个字符串作为列表的一个元素
S.split([sep [,maxsplit]]) -> list of strings
以sep为分隔符,把S分隔成一个list。maxsplit表示分割的次数。默认的分割字符为空白字符。空白字符包括空格、TAB、换行...另外,还有S.rsplit([sep,[maxsplit]])和S.rsplit([sep,[maxsplit]])。
contype = 'application/octet-stream'
maintype, subtype = contype.split('/', 1)
print maintype,subtype
结果为:application octet-stream
即maintype值为application,subtype值为:octet-stream
也就是说字符串contype通过split,使用符号“/”做为分隔字符串,如果指出maxsplit,那么至多maxsplit完成分割。注意,由于列表是由下标0开始,所以如果maxsplit值为1,正如上面的例子中一样,表示要分为两段。分别给予列表中的两个变量:maintype和subtype
测试代码:
contype = 'application/octet-stream/sss'
maintype, subtype = contype.split('/', 1)
print maintype,subtype
结果为:application octet-stream/sss
即maintype值为application,subtype值为:octet-stream/sss
由于这里列表中只有两个变量,所以maxsplit值只能为1,小于1或大于1都将会显示错误。也就是说,如果采用上述给列表赋值方式,那么maxsplit的值必须要等于列表的下标最大值,在提醒一下,列表下标从0开始。如果列表有四个元素,那么maxsplit值必须等于3。
如果分隔符(sep)没有指定或为无,任何空白的字符串将做为“分隔字符串”,且空白字符从结果中被删除,注意:空白字符包括空格、换行符、制表符等,例如:
print 'a b c d e f \t\n g'.split()
输出的结果为:['a', 'b', 'c', 'd', 'e', 'f', 'g']
与split作用相反,我在这也介绍一下join。join用来连接字符串,与split恰好相反,拆分字符串的。不用多解释,看完代码,其意自现了。
>>>li = ['my','name','is','bob']
>>>' '.join(li)
'my name is bob'
>>>s = '_'.join(li)
>>>s
'my_name_is_bob'
>>>s.split('_')
['my', 'name', 'is', 'bob']
join的功能就是返回一个字符串——即以其参数字符串做为连接符,将序列中的每个元素连接起来。
三、获取不带路径的文件名
import os.path
file_name = "c:/1.png"
basename = os.path.basename(file_name)
print basename
os.path模块详情访问:http://my.oschina.net/cuffica/blog/33494
四、python三元运算符的正确方法
python三元运算符:
V1 if 条件 else V2
如果条件为真,返回V1值;如果条件为假,返回V2值
注意:该语法适用python 2.5及以上版本
五、python中中文乱码问题的原因及解决方案
1、字符串在Python内部的表示是 unicode 编码。因此在做编码转换时,通常需要以unicode作为中间编码,即先将其它编码的字符串转换为unicode,再从unicode编码转换成另一种编码。
将其它编码的字符转换成unicode编码的语法是:str.decode("gb2312") 表示将gb2312编码的字符串str转换成unicode编码
将unicode编码转换成其他编码的语法是:str.encode("gb2312") 表示将unicode编码的字符串str转换成gb2312编码。
2、在转换编码的时候,一定要先搞明白,当前转码的字符串是什么编码。只有确定欲转换的字符串的编码,你才能灵活运用decode和encode来实现编码转换。
3、如何确定当前字符串的编码呢?
代码中字符串的默认编码与代码文件本身的编码一致。比如你的程序内容如下:
s="中文"
print s
该文件保存时编码格式为utf-8,那么这里的字符串s的编码就是utf8编码。同理,如果你保存时的编码格式为GB2312,那么这里的字符串s的编码就是gb2312。
不管文件保存时编码是什么,如果程序中字符串是这样定义的:
str=u"中文"
那么,该字符串的编码就被指定为unicode编码了,即Python的内部编码,而与代码文件本身的编码无关。因此,对于这种情况做编码转换,只需要直接使用encode方法将其转换为指定编码即可。
注意:如果一个字符串已经是unicode编码,再使用decode进行解码则将出错。因此通常要对其编码是否为unicode进行判断:
isinstance(s, unicode) #用来判断是否为unicode,是unicode返回true,否则返回false
同理,对于非unicode编码形式的str,使用encode会报错。强调:encode方法就是将unicode编码转为其它编码的方法。
4、如何获得系统的默认编码?
#coding=utf-8
import sys
print sys.getdefaultencoding()
注意:某些IDE中,字符串的输出总是出现乱码,甚至错误,其实是由于IDE的结果输出控制台自身不能显示字符串编码,而不是程序本身的问题。
比如:
s=u"中文"
print s
如果提示错误,则将最后一句改为:
print s.encode("gb2312")
则会正常输出“中文”,而不会出现乱码现象。
另外,unicode(str,'gb2312')与str.decode('gb2312')是一样的,都是将gb2312编码的str转为unicode编码
使用str.__class__可以查看str的编码形式
原理说了半天,最后来个包治百病的吧:)
#!/usr/bin/env python
#coding=utf-8
s="中文"
if isinstance(s, unicode):
#s=u"中文"
print s.encode('gb2312')
else:
#s="中文"
print s.decode('utf-8').encode('gb2312')
来源:http://www.51testing.com/?uid-75417-action-viewspace-itemid-219300
chardet 字符编码判断
chardet 通用编码检测器
支持
■ASCII, UTF-8, UTF-16 (2 variants), UTF-32 (4 variants)
■Big5, GB2312, EUC-TW, HZ-GB-2312, ISO-2022-CN (Traditional and Simplified Chinese)
■EUC-JP, SHIFT_JIS, ISO-2022-JP (Japanese)
■EUC-KR, ISO-2022-KR (Korean)
■KOI8-R, MacCyrillic, IBM855, IBM866, ISO-8859-5, windows-1251 (Cyrillic)
■ISO-8859-2, windows-1250 (Hungarian)
■ISO-8859-5, windows-1251 (Bulgarian)
■windows-1252 (English)
■ISO-8859-7, windows-1253 (Greek)
■ISO-8859-8, windows-1255 (Visual and Logical Hebrew)
■TIS-620 (Thai)
需要python2.1以上
下载地址:http://pypi.python.org/pypi/chardet/1.0.1#downloads
安装方式:
方法一(推荐)
解压后,将chardet文件夹复制到 /Lib/site-packages 目录即可。
方法二:解压后
cd chardet-1.0.1
sudo python setup.py install
使用案例
import chardet
file= open("bianma.txt",'r') #打开目标文件
line=file.readline()
en=chardet.detect(line) #检测文件编码
print(en["encoding"]) #输出文件编码
识别网页字符编码
>>> import urllib
>>> rawdata = urllib.urlopen('http://www.google.cn/').read()
>>> import chardet
>>> chardet.detect(rawdata)
{'confidence': 0.98999999999999999, 'encoding': 'GB2312'}
>>>