一句python,一句R︱python中的字符串操作、中文乱码

先学了R,最近刚刚上手python,所以想着将python和R结合起来互相对比来更好理解python。最好就是一句python,对应写一句R。

pandas可谓如雷贯耳,数据处理神器。

以下符号:

=R=

代表着在R中代码是怎么样的。

————————————————————————————————————————————

字符编码

encode 和 decode

Python2 默认的编码是 ascii,通过 encode 可以将对象的编码转换为指定编码格式(称作“编码”),而 decode 是这个过程的逆过程(称作“解码”)。

decode,将字节串转变为字符串,并且这个字符串是按照
unicode 编码的。在 unicode 编码中,一个汉字对应一个字符,这时候度量它的长度就是 1.

encode,一个 unicode 编码的字符串,也可以转换为字节串。

>>> a = "中"
>>> a
'\xe4\xb8\xad'

>>> b = a.decode()
>>> b
u'\u4e2d'

其中,a就是ASCII格式的编码,字节串;b就是unicode编码的字符串。当然有一个问题就是最后出来的还不是汉字。。。(醉!)

————————————————————————————————————————————

一、字符形成、展示、拼接、切片

1、字符形成=R=paste

双引号包裹单引号

>>> "What's your name?"
"What's your name?"

单引号使用转义符

>>> 'What\'s your name?'
"What's your name?"

2、字符串展示print /raw_input

>>> name = raw_input("input your name:")
input your name:python
>>> name
'python'

其中raw_input有点交互关系,具体看案例,直接键入name就可以获得你输入的内容。

>>> print("hello, world")
hello, world

3、字符切片、选择、截取 =R=无

字符可以像一般的数据格式一样进行切片选择,有点像series:

>>> lang = "study Python"
>>> lang[0]
's'
>>> lang[2:9]
'udy pyt'

当然也包括lang[:]可以选中所有的。

其中index代表着某个字符的索引值。

lang.index("p")

4、内存编号 =R= 无

这个与R中不一样,当数据存入python之后,机器会自动给存入内存的数据编号,这个编号可以用id来查看。

>>> id(c)
3071934536L
>>> id(lang)
3071934536L

5、ASCII 值(是十进制的)

ord("a")   代表输入字符返回ASCII值

cha(97)  代表输入ASCII值返回字符

>>> cmp("a","b")    #a-->97, b-->98, 97 小于 98,所以 a 小于 b
-1

其中cmp()代表比较 a  b 两个字符的ASCII值的大小,返回值为1,0,-1

>>> max(str1)
'd'
>>> max(str2)
'e'
>>> min(str1)
'a'

返回字符的ASCII值的最大值。

————————————————————————————————————————————

二、字符串基本操作

1、字符串重复 =R=rep

>>> str1*3
'abcdabcdabcd'

其中变成字符串有两种方式:一种是str()或者是用单引号来表示。

2、字符串拼接

(1)+ 号 =R= paste

>>> "Py" + "thon"
'Python'

>>> a = 1989
>>> b = "free"

>>> print b+“a”
>>> print b+str(a)

其中变成字符串有两种方式:一种是str()或者是用单引号来表示。

乘法,就是重复那个字符串的含义。

(2)join =R= paste

['www', 'itdiffer', 'com']
>>> ".".join(c)
'www.itdiffer.com'

用 .  来填补间隔中的内容。

3、语句分割split =R= split

这个函数的作用是将字符串根据某个分割符进行分割。

>>> a = "I LOVE PYTHON"
>>> a.split(" ")
['I', 'LOVE', 'PYTHON']

其中split(“ ”)括号中,代表着依据什么样式来进行分割。

4、字符串去掉空格 = R=grep

方法是:

  • S.strip() 去掉字符串的左右空格
  • S.lstrip() 去掉字符串的左边空格
  • S.rstrip() 去掉字符串的右边空格
>>> b=" hello "    # 两边有空格
>>> b.strip()
'hello'

5、字符串大小写

在 Python 中有下面一堆内建函数,用来实现各种类型的大小写转化

  • S.upper() #S 中的字母大写
  • S.lower() #S 中的字母小写
  • S.capitalize() # 首字母大写
  • S.isupper() #S 中的字母是否全是大写
  • S.islower() #S 中的字母是否全是小写
  • S.istitle()

S.title()  #把所有的单词的第一个字母转化为大写

S.istitle()  #判断每个单词的第一个字母是否为大写

6、in 包含关系 =R=%in%

类似集合计算,a in b代表a是否包含在b中,返回的是布尔值。

>>> "a" in str1
True
>>> "de" in str1
False
>>> "de" in str2
True

7、字符长度len  =R= length

>>> a="hello"
>>> len(a)
5

————————————————————————————————————————————

三、转义符、占用符列表

1、转义符列表

在字符串中,有时需要输入一些特殊的符号,但是,某些符号不能直接输出,就需要用转义符。所谓转义,就是不采用符号本来的含义,而采用另外一含义了。下面表格中列出常用的转义符:

转义字符 描述
\ (在行尾时) 续行符
\ 反斜杠符号
\' 单引号
\" 双引号
\a 响铃
\b 退格(Backspace)
\e 转义
\000
\n 换行
\v 纵向制表符
\t 横向制表符
\r 回车
\f 换页
\oyy 八进制数,yy 代表的字符,例如:\o12 代表换行
\xyy 十六进制数,yy 代表的字符,例如:\x0a 代表换行
\other 其它的字符以普通格式输出

以上所有转义符,都可以通过交互模式下 print 来测试一下,感受实际上是什么样子的。

2、占位符

占位符在自动生成字符内容方面有很好的应用:

>>> print "我%s喜欢NLP" % "非常"
我非常喜欢NLP

(1)老式占位符%s

另外,不同的占位符,会表示那个位置应该被不同类型的对象填充。下面列出许多,供参考。不过,不用记忆,常用的只有 %s 和 %d,或者再加上 %f,其它的如果需要了,到这里来查即可。

占位符 说明
%s 字符串(采用 str()的显示)
%r 字符串(采用 repr()的显示)
%c 单个字符
%b 二进制整数
%d 十进制整数
%i 十进制整数
%o 八进制整数
%x 十六进制整数
%e 指数 (基底写为 e)
%E 指数 (基底写为 E)
%f 浮点数
%F 浮点数,与上相同
%g 指数(e) 或浮点数 (根据显示长度)
%G 指数(E)或浮点数 (根据显示长度)

(2)新式{}

>>> print "我{}喜欢NLP" .format("非常")
我非常喜欢NLP

Python 非常提倡的 string.format()的格式化方法,其中 {} 作为占位符。

这种方法真的是非常好,而且非常简单,只需要将对应的东西,按照顺序在 format 后面的括号中排列好,分别对应占位符 {} 即可。我喜欢的方法。

————————————————————————————————————————————

四、Python 中如何避免中文是乱码

这个问题是一个具有很强操作性的问题。我这里有一个经验总结,分享一下,供参考:

首先,提倡使用 utf-8 编码方案,因为它跨平台不错。

经验一:在开头声明:

# -*- coding: utf-8 -*-

有朋友问我-*-有什么作用,那个就是为了好看,爱美之心人皆有,更何况程序员?当然,也可以写成:

# coding:utf-8

经验二:遇到字符(节)串,立刻转化为 unicode,不要用 str(),直接使用 unicode()

unicode_str = unicode('中文', encoding='utf-8')
print unicode_str.encode('utf-8')

经验三:如果对文件操作,打开文件的时候,最好用 codecs.open,替代 open(这个后面会讲到,先放在这里)

import codecs
codecs.open('filename', encoding='utf8')

大多来源于:极客学院的《从零开始学
Python》(第二版)

上一篇:YII数据库操作(CURD操作)


下一篇:c++ 读取一行的2个数