【python】-- 字符串、字符编码与转码
字符串
字符串是 Python 中最常用的数据类型。我们可以使用引号('或")来创建字符串。
创建字符串很简单,只要为变量分配一个值即可;访问子字符串,可以使用方括号来截取字符串:
var1 = 'Hello World!'
var2 = "Runoob" print ("var1[0]: ", var1[0])
print ("var2[1:5]: ", var2[1:5])
1、字符串运算符
变量a值为字符串 "Hello",b变量值为 "Python":
2、字符串格式化
print ("我叫 %s 今年 %d 岁!" % ('小明', 10))
#我叫 小明 今年 10 岁!
字符串格式化符号
3、字符串内置方法:
capitalize()
将首字母大写
>>> name = "qigao zhang"
>>> name.capitalize()
'Qigao zhang'
#------------------------------------------------------------- count(sub,start=None,end=None)
统计
sub:统计的字符,start:开始位,end:结束位,start和end默认为空时,则表示全部字符中去统计 >>> name = "qigao zhangz"
#有开始和结束符
>>> name.count("z",1,5)
0
#从整个字符串中统计字符
>>> name.count("z")
2 #----------------------------------------------------- center(width,fillchar) 如果width(字符宽度)小于等于(<=)字符串的长度,则返回原字符串,如果大于(>)字符串的,则用fillchar(填满字符)填满,处理结果等于width,字符串位于fillchar的中间 >>> name = "qigao zhangz"
>>> len(name)
12
#10小于等于字符串宽度
>>> name.center(10,'-')
'qigao zhangz'
#51大于字符串长度,并且字符串位于填充字符的中间
>>> name.center(51,'-')
'--------------------qigao zhangz-------------------'
>>> len(name.center(51,'-'))
51 #----------------------------------------------------- ljust(width,fillchar) 如果字符串的长度大于width(字符宽度),则返回原字符串,如果小于width,则用fillchar(填满字符)填满,处理结果等于width,fillchar位于字符串的最右边 >>> name = "qigao zhang"
>>> len(name)
11
#小于等于字符串的长度
>>> name.ljust(11,'-')
'qigao zhang'
#大于字符串的长度
>>> name.ljust(50,'-')
'qigao zhang---------------------------------------'
>>> len(name.ljust(50,'-'))
50
注:ljust中的l表示left的意思,表示从右向左 #----------------------------------------------------- rjust(width,fillchar) 如果字符串的长度大于width(字符宽度),则返回原字符串,如果小于width,则用fillchar(填满字符)填满,处理结果等于width,fillchar位于字符串的最左边 >>> name = "qigao zhang"
>>> len(name)
11
>>> name.rjust(11,'-')
'qigao zhang'
>>> name.rjust(50,'-')
'---------------------------------------qigao zhang'
>>> len(name.rjust(50,'-'))
50
注:ljust中的l表示left的意思,表示从左向右 #----------------------------------------------------- 编码(encode) 字符串的编码和解码 str = "python";
str_utf8 = str.encode("UTF-8")
str_gbk = str.encode("GBK") print(str) print("UTF-8 编码:", str_utf8)
print("GBK 编码:", str_gbk) print("UTF-8 解码:", str_utf8.decode('UTF-8','strict'))
print("GBK 解码:", str_gbk.decode('GBK','strict')) #----------------------------------------------------- endwith(suffix,start=None,end=None) 判断是否已suffix结尾,是返回True,否返回Fales suffix:表示字符,start:开始位,end:结束位,start和end默认为空是,表示从整个字符串的结尾去判断 >>> name = "qigao zhang"
#start和end不为空
>>> name.endswith('g',1,5)
False
#默认为空
>>> name.endswith('g')
True #----------------------------------------------------- find(sub,start=None,end=None) 全文查找sub中第一个字符所在整个字符串中的索引值,没有找到则返回-1 sub:字符或者字符串,start:开始位,end:结束位,start和end默认为空时,则在整个字符串中查找 >>> name = "qigao zhang"
#没找到,则返回-1
>>> name.find('zh',1,5)
-1
>>> name.find('q',2)
-1
>>> name.find('zh')
6
>>> name.find('zh',1,8)
6 #----------------------------------------------------- rfind(sub,start=None,end=None) 从左向右查找sub中第一个字符所在整个字符串中的索引值,没有找到则返回-1 >>> name = "qigao zhang"
#找到
>>> name.rfind('q')
0
#未找到
>>> name.rfind('q',2)
-1 #----------------------------------------------------- 12、format() 指定方式格式化 #----------------------------------------------------- format_map() 数据格式,以字典形式传入 >>> name = "name:{name},age:{age}"
>>> name.format_map({'name':'zhangqigao','age':23})
#输出结果
'name:zhangqigao,age:23' #----------------------------------------------------- isalnum() 是否是一个阿拉伯数字和字母,它包含因为英文字符+(1-9)数字,中间不能有特殊字符 >>> age = ''
>>> age.isalnum()
True
#有特殊字符的
>>> age = '2.3'
>>> age.isalnum()
False
>>> age = 'ab23'
>>> age.isalnum()
True
>>> age = 'ab'
>>> age.isalnum()
True #----------------------------------------------------- isalpha() 是否是一个纯的英文字符,包含大写 >>> age = 'ab'
>>> age.isalpha()
True
#夹着数字
>>> age = 'ab23'
>>> age.isalpha()
False
#大写
>>> age = 'Ab'
>>> age.isalpha()
True #----------------------------------------------------- isdigit() 判断是否是一个整数 #----------------------------------------------------- isspace() 判断是否是一个空格 #不是空格
>>> age = ' age'
>>> age.isspace()
False
#是空格
>>> age = ' '
>>> age.isspace()
True #----------------------------------------------------- istitle() 是否是一个标题(字符串中的每个单子首字母大写) #每个单词的首字母是大写
>>> name = "Zhang Qi Gao"
>>> name.istitle()
True
#每个单词的首字母是小写
>>> name = "zhang qi gao"
>>> name.istitle()
False #----------------------------------------------------- isupper() 是否是大写,注意字符串必须全部是大写才会返回True,否则返回False #全部大写
>>> name="ZHANG"
>>> name.isupper()
True
#小写
>>> name="Zhang"
>>> name.isupper()
False #----------------------------------------------------- join() 序列用某个字符拼接成一个字符串,注意的是,序列的元素必须是str类型 >>> a = ['','','']
>>> '+'.join(a)
'1+2+3' #----------------------------------------------------- lower() 字符串中的大写字母转换为小写字母 >>> name = "ZhangQiGao"
>>> name.lower()
'zhangqigao' #----------------------------------------------------- upper() 字符串中的小写字母转换为大写字母 >>> name = "ZhangQiGao"
>>> name.upper()
'ZHANGQIGAO' #----------------------------------------------------- strip() 去掉左右两边的空格(space)和回车(\n) >>> name = " \n zhangqigao \n"
>>> name.strip()
'zhangqigao' #----------------------------------------------------- lstrip() 删掉左边到右的空格(space)和回车(\n) >>> name = " \n zhangqigao \n"
>>> name.lstrip()
'zhangqigao \n' #----------------------------------------------------- rstrip() 删掉右边到左边的空格(space)和回车(\n) >>> name = " \n zhangqigao \n"
>>> name.rstrip()
' \n zhangqigao'
至此,方法前有l(left)和r(right)的函数,都是对之前函数的一个扩展,带l的表示至始至终从右到左操作,记住左边才是最终目的地,而带r的至始至终都是从左到右,因为右边才是它的终极目标 #----------------------------------------------------- split() 分割函数,默认是以空格分割(space)生成一个列表,如果其他字符分割,输入其他字符参数 >>> name = "qigao zhang"
#默认为空,按空格分割
>>> name.split()
['qigao', 'zhang']
>>> name = "qigao+zhang"
#以'+'字符分割
>>> name.split("+")
['qigao', 'zhang']
#以'\n'分割
>>> name = "qigao\nzhang"
>>> name.split("\n")
['qigao', 'zhang'] #----------------------------------------------------- splitlines() 以换行符分割,这个一般在windows上开发,移到Linux上执行,或者在Linux上开发,移到Windows上执行,因为换行在windows上是"\r\n",linux上是'\n' >>> name = "qigao\nzhang"
>>> name.splitlines()
['qigao', 'zhang'] #----------------------------------------------------- swapcase() 把大写换成小写,把小写换成大写
>>> name = "ZHang"
>>> name.swapcase()
'zhANG' #----------------------------------------------------- startswith(prefix, start=None,end=None) 判断是否已prefix结尾,是返回True,否返回Fales prefix:表示字符或者字符或者字符串,start:开始位,end:结束位,start和end默认为空是,表示从整个字符串的结尾去判断 >>> name = "zhang qigao"
>>> name.startswith("zhang") #开头找到"zhang" 字符串
True
>>> name.startswith("h",3,5) #在索引3到5之间没有找到以字符'h'开头
False #----------------------------------------------------- replace(old,new[, max]) old:将被替换的子字符串; new:新字符串,用于替换old子字符串;max:可选字符串, 替换不超过 max 次 >>> name = "zhang is shuai ge"
>>> name.replace('is','was')
'zhang was shuai ge'
#原字符串没有改变
>>> name
'zhang is shuai ge'
>>> name.replace('is','was',0)
'zhang is shuai ge'
>>> name.replace('is','was',1)
'zhang was shuai ge' #----------------------------------------------------- zfill(width) 字符的长度是否大于等于(>=)with,如果比width小,则在字符串钱用0填充,如果>=width,则返回原字符串 >>> name = "zhangqigao"
>>> len(name)
10
#width大于字符串长度
>>> name.zfill(11)
'0zhangqigao'
#width小于等于字符串长度
>>> name.zfill(10)
'zhangqigao'
format()
字符串的函数 str.format(),它增强了字符串格式化的功能。
基本语法是通过 {} 和 : 来代替以前的 % 。
format 函数可以接受不限个参数,位置可以不按顺序。
>>>"{} {}".format("hello", "world") # 不设置指定位置,按默认顺序
'hello world' >>> "{0} {1}".format("hello", "world") # 设置指定位置
'hello world' >>> "{1} {0} {1}".format("hello", "world") # 设置指定位置
'world hello world'
也可以设置参数:
print("网站名:{name}, 地址 {url}".format(name="QQ", url="www.QQ.com")) # 通过字典设置参数
site = {"name": "QQ", "url": "www.QQ.com"}
print("网站名:{name}, 地址 {url}".format(**site)) # 通过列表索引设置参数
my_list = ['QQ', 'www.QQ.com']
print("网站名:{0[0]}, 地址 {0[1]}".format(my_list)) # "0" 是可选的
数字格式化:
str.format() 格式化数字的多种方法
>>> print("{:.2f}".format(3.1415926));
3.14
字符编码与转码
总结:
1.在python2默认编码是ASCII, python3里默认是unicode
2.unicode 分为 utf-32(占4个字节),utf-16(占两个字节),utf-8(占1-4个字节), so utf-16就是现在最常用的unicode版本, 不过在文件里存的还是utf-8,因为utf8省空间
3.在py3中encode,在转码的同时还会把string 变成bytes类型,decode在解码的同时还会把bytes变回string
详细文章:
http://www.cnblogs.com/yuanchenqi/articles/5956943.html
【python】-- 字符串、字符编码与转码的更多相关文章
- Python基础-字符编码与转码
***了解计算机的底层原理*** Python全栈开发之Python基础-字符编码与转码 需知: 1.在python2默认编码是ASCII, python3里默认是utf-8 2.unicode 分为 ...
- Python中字符编码及转码
python 字符编码及转码 python 默认编码 python 2.X 默认的字符编码是ASCII, 默认的文件编码也是ASCII python 3.X 默认的字符编码是unicode,默认的文件 ...
- python(字符编码与转码)
一.字符编码演变史 二进制(0 1) """ 算机中的所有数据,不论是文字.图片.视频.还是音频文件,本质上最终都是按照类似 01010101 的二进制存储的,再说简单点 ...
- python之字符编码与转码
说起python编码,真是句句心酸,今天终于是,终于梳理清楚了,下面我们就来一起揭开py编码的真相吧! 一,什么是编码? 其实基本概念很简单.我们都知道消息,那么消息就是人类所能理解的,简单易懂的存在 ...
- python基础之 列表、元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码
本节内容 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 1. 列表.元组操作 列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作 定义列表 ...
- Python自动化 【第三篇】:Python基础-集合、文件操作、字符编码与转码、函数
1. 集合 1.1 特性 集合是一个无序的,不重复的数据组合,主要作用如下: 去重,把一个列表变成集合实现自动去重. set可以看成数学意义上的无序和无重复元素的集合,因此,两 ...
- 小白的Python之路 day2 字符编码和转码
字符编码和转码 详细文章: http://www.cnblogs.com/yuanchenqi/articles/5956943.html http://www.diveintopython3.net ...
- Python字符编码与转码
字符编码与转码 注: 该图转自 http://www.cnblogs.com/luotianshuai/p/5735051.html. Python2 解码,编码 #Python2 #-*- codi ...
- Python的字符编码
Python的字符编码 1. Python字符编码简介 1. 1 ASCII Python解释器在加载.py文件的代码时,会对内容进行编码,一般默认为ASCII码.ASCII(American St ...
随机推荐
- Linux Shell常用技巧
转载自http://www.cnblogs.com/stephen-liu74/ 一. 特殊文件: /dev/null和/dev/tty Linux系统提供了两个对Shell编程非常有用的特殊文 ...
- 通过脚本发送zabbix微信报警
实现zabbix通过微信报警的方式也是通过脚本来实现,与邮件报警不同的是,脚本调用的微信的相关接口的获取相对复杂一点 1.申请一个微信公众号(企业号) 申请方法不多说,如果已申请请忽略 2.在微信企业 ...
- 不删除记录的表CRUD的常见处置
为什么不删除记录,因为这些记录只是暂时不用了,以后还是有可能会用到的,比如说统计:另外一些主键外键依赖级联删除的场合也不好真删的,容易批量删除.真删了就不容易恢复回来了. 一般做法是,增加一个avai ...
- JAVA Eclipse Incorrect line ending found carriage return 怎么办
点击项目-清理即可
- 状态机工作流,顺序工作流和Flowchart
什么是工作流,工作流可以说是对业务处理过程的建模,当我们设计工作流的时候,我们首先要分析业务处理过程中要经历的步骤.然后,我们就可以利用WF创建工作流模型来模拟业务的处理过程. WF工作流包含两种类型 ...
- Linux IO模式及 select、poll、epoll详解(转)
同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案是不同的.所以先限定一下本文的上下文. 本文讨论的背景是Linux环境下的network IO. ...
- linux系统下实时监控进程以及定位杀死挂起的进程
一.实时监测进程 [root@instance-3lm099to ~]# top top - :: up days, min, users, load average: 0.01, 0.05, 0.0 ...
- 二分Kmeans的java实现
刚刚研究了Kmeans.Kmeans是一种十分简单的聚类算法.可是他十分依赖于用户最初给定的k值.它无法发现随意形状和大小的簇.最适合于发现球状簇.他的时间复杂度为O(tkn).kmeans算法有两个 ...
- OpenCV 3.1
http://www.tuicool.com/articles/FRfMni2 http://docs.opencv.org/3.1.0/d7/d9f/tutorial_linux_install.h ...
- 【数据结构】29、hashmap=》tableSizeFor 中求大于等于当前数的最小2的幂
最近面试被问到hashmap的实现,因为前段时间刚好看过源码,显得有点信心满满,但是一顿操作下来的结论是基础不够扎实... 好吧,因为我开始看hashmap是想了解这到底是一个什么样的机制,具体有啥作 ...