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

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

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

以下符号:

=R=

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

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

字符编码

encode 和 decode

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

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

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

[html] view plain copy

print?



   
>>> a = "中"
 

   
>>> a
 

   
'\xe4\xb8\xad'  

    
 

   
>>> b = a.decode()
 

   
>>> b
 

    u'\u4e2d'
 



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

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

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

1、字符形成=R=paste

双引号包裹单引号

[html] view plain copy

print?



   
>>> "What's your
name?"  

    "What's your
name?" 

单引号使用转义符



[html] view plain copy

print?



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

    "What's your
name?" 

2、字符串展示print /raw_input

[html] view plain copy

print?



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

    input your
name:python  

   
>>> name
 

    'python'
 



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

[html] view plain copy

print?



   
>>> print("hello,
world")  

    hello,
world 

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

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



[html] view plain copy

print?



   
>>> lang = "study
Python"  

   
>>> lang[0]
 

    's'
 

   
>>> lang[2:9]
 

    'udy pyt'
 



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

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

[html] view plain copy

print?



   
lang.index("p") 

4、内存编号 =R= 无

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

[html] view plain copy

print?



   
>>> id(c)
 

    3071934536L
 

   
>>> id(lang)
 

   
3071934536L 

5、ASCII 值(是十进制的)

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



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



[html] view plain copy

print?



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

    -1
 



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



[html] view plain copy

print?



   
>>> max(str1)
 

    'd'
 

   
>>> max(str2)
 

    'e'
 

   
>>> min(str1)
 

    'a'
 



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

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

二、字符串基本操作

1、字符串重复 =R=rep



[html] view plain copy

print?



   
>>> str1*3
 

   
'abcdabcdabcd' 

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

2、字符串拼接

(1) 号 =R= paste



[html] view plain copy

print?



   
>>> "Py" "thon"
 

    'Python'
 

    
 

   
>>> a = 1989
 

   
>>> b = "free"
 

    
 

   
>>> print b “a”
 

   
>>> print b
str(a) 

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

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

(2)join =R= paste



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





3、语句分割split =R= split



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



[html] view plain copy

print?



   
>>> a = "I LOVE
PYTHON"  

   
>>> a.split(" ")
 

    ['I',
'LOVE', 'PYTHON']  



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

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



方法是:



    S.strip()
去掉字符串的左右空格

    S.lstrip()
去掉字符串的左边空格

    S.rstrip()
去掉字符串的右边空格



[html] view plain copy

print?



   
>>> 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中,返回的是布尔值。



[html] view plain copy

print?



   
>>> "a" in str1
 

    True
 

   
>>> "de" in str1
 

    False
 

   
>>> "de" in str2
 

   
True 

7、字符长度len  =R= length



[html] view plain copy

print?



   
>>> a="hello"
 

   
>>> len(a)
 

   


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

三、转义符、占用符列表

1、转义符列表



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

转义字符    描述

\    (在行尾时)
续行符

\    反斜杠符号

\'    单引号

\"    双引号

\a    响铃

\b  
 退格(Backspace)

\e    转义

\000    空

\n    换行

\v  
 纵向制表符

\t  
 横向制表符

\r    回车

\f    换页

\oyy    八进制数,yy
代表的字符,例如:\o12 代表换行

\xyy    十六进制数,yy
代表的字符,例如:\x0a 代表换行

\other  
 其它的字符以普通格式输出



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



2、占位符



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



[html] view plain copy

print?



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

   
我非常喜欢NLP 

(1)老式占位符%s



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



(2)新式{}

[html] view plain copy

print?



   
>>> 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正则表达式:re的match方法(来源公众号人人可以学python)



Python 从1.5版本起添加了模块re ,提供 Perl 风格的正则表达式模式



我们经常用的有re.match( ), re.search( ),re.sub( ), 下面我们一个一个来讲一下。



其中注意它们各自的区别



re.match( )



    match(
)从要匹配的字符串的起始位置开始匹配一个正则表达式。如果起始位置匹配失败,则返回None



re.match(pattern, string, flags=0)



参数:



pattern: 正则表达式



string:要匹配的字符串



flags:标志位,用来控制匹配模式





    [html] view
plain copy

    print?

       
举例:  

       
#!/usr/bin/python  

       
# -*- coding: UTF-8 -*-   

       
import re  

       
str1 = "Allen is renren python"  

       
print re.match('Bllen', str1)  

       
print re.match('Allen', str1)  

       
print re.match('.*renren.*', str1)  

       
allenwoo@~/renren$ python
test.py  

第一个由于一开始匹配不成功,所以结果是None

第二个在字符串开始就找到了“Allen”所以匹配成功,返回结果

第三个," . "表示任何字符,“ * ”表示前面一个修饰符有任何个(包括0个)

所以" .* "就是匹配任何个数的任何字符的意思。

[html] view plain copy

print?



   
#!/usr/bin/python  

    # -*-
coding: UTF-8 -*-   

    import re
 

    str1 =
"Allen is renren python"  

    r =
re.match('Allen', str1)  

    #
span是返回我们匹配到的字符串的开始和结束的下标  

    print
r.span()  

    #
group返回我们匹配到的字符串  

    print
r.group()  

    print "\n"
 

    r =
re.match('.*renren.*', str1)  

    print
r.span()  

    print
r.group()  



   
数字匹配可以使用\w或者[0-9]



比如要匹配字符串"Jack age:18,sex:m"中的数字

[html] view plain copy

 print?



   
#!/usr/bin/python  

    # -*-
coding: UTF-8 -*-   

    import re
 

    str1 = "Jack
age:18,sex:m"  

    r =
re.match('.*\w .*', str1)  

    if r:
 

       
print r.group()  

    print "\n"
 

     
 

    r =
re.match('.*[0-9] .*', str1)  

    if r:
 

       
print r.group()  

     
 

   
print("分组匹配输出")  

    r =
re.match(r'(.*):([0-9] ).*', str1)  

    if r:
 

       
print r.group()  

       
print r.group(1)  

       
print r.group(2) 

你会发现我们在正则表达式中使用()就能分组匹配,然后可以使用group返回每个括号中匹配的字符串。



注意: 在re.match(r'(.*):([0-9] ).*', str1)的表达式前面我们使用了一个 r,
r是防止字符串转意,因为我们使用了(),我们不希望它被当作要匹配的字符。



   
附:那这就先讲一下转意:



[html] view plain copy

print?



   
#!/usr/bin/python  

    # -*-
coding: UTF-8 -*-   

    #
大家都知道\n是换行符,  

    # 而\t
是tab空格,相当于我们键盘的tab键  

   
print("We\tare\trenrenpython")  

     
 

    # 加上r防止转意后
 

   
print(r"We\tare\trenrenpython") 



 \是一个特殊符符号,用来转意一些字符,如\n换行符



使用了 r 后"\t"就是字符串"\t", 而不是tab

   
然后又有新的问题来了,想"\w"," . ", " *
"都被用作了正则表达式的修饰符,如果我们需要把它们当原本的字符匹配怎么办呢?使用" \"

[html] view plain copy

print?



   
#!/usr/bin/python  

    # -*-
coding: UTF-8 -*-   

    import re
 

    str1 =
"python . renren"  

    str2 =
"python : renren"  

    # 由于"."
是代表任何字符,所以下面表达式str1,str2都能匹配到  

    r =
re.match('.* . .*', str1)  

    if r:
 

       
print r.group()  

    else:
 

       
print "未匹配"   

     
 

    r =
re.match('.* . .*', str2)  

    if r:
 

       
print r.group()  

    else:
 

       
print "未匹配"   

    print "\n"
 

     
 

    #
如果我们要匹配的是"."这个字符呢?   

    r =
re.match('.* \. .*', str1)  

    if r:
 

       
print r.group()  

    else:
 

       
print "未匹配"   

     
 

    r =
re.match('.* \. .*', str2)  

    if r:
 

       
print r.group()  

    else:
 

       
print "未匹配" 

延伸一:Nan

[python] view plain copy

print?



    def
isnotNaN(num):  

       
return num == num

一句python,一句R︱python中的字符串操作、中文乱码、NaN情况的更多相关文章

  1. Python中的字符串操作总结(Python3.6.1版本)

    Python中的字符串操作(Python3.6.1版本) (1)切片操作: str1="hello world!" str1[1:3] <=> 'el'(左闭右开:即是 ...

  2. sublime text3 中 python3编译出现中文乱码解决方法

    转 https://blog.csdn.net/Bin_bin_bingo/article/details/80531582 一.乱码现象 利用sublime自带编译快捷方式ctrl+B会出现中文乱码 ...

  3. Oracle中有关字符串操作的语法

    Oracle中有关字符串操作的语法 Oracle提供了丰富的字符串函数 lpad()函数 lpad()函数用于左补全字符串.在某些情况下,预期的字符串为固定长度,而且格式统一,此时可以考虑使用lpad ...

  4. 处理SecureCRT中使用vim出现中文乱码问题

    处理SecureCRT中使用vim出现中文乱码问题 引用原文:http://blog.chinaunix.net/uid-20639775-id-3475608.html因为cat没有问题,定位是vi ...

  5. 在Servlet中出现一个输出中文乱码的问题(已经解)。

    在Servlet中出现一个输出中文乱码的问题,已经解. @Override public void doPost(HttpServletRequest reqeust, HttpServletResp ...

  6. PHP连接sqlserver的两种方法,向sqlserver2000中写入数据,中文乱码

    项目环境是php5.3.28 项目用的ThinkPHP3.2.3  已经mysql5.5数据库,要和另一个项目对接,需要连接sqlsever2000数据库进行一些操作. 第一种用php自带扩展连接数据 ...

  7. SQL点滴33—SQL中的字符串操作

    原文:SQL点滴33-SQL中的字符串操作 计算字符串长度len()用来计算字符串的长度 select sname ,len(sname) from student 字符串转换为大.小写lower() ...

  8. Windows下Git Bash中VIM打开文件中文乱码

    Windows下Git Bash中VIM打开文件中文乱码,解决方法是: 步骤一 admin@DESKTOP-O99620V MINGW64 /d/项目GGE/Hard_for_GGE (master) ...

  9. oracle中imp导入数据中文乱码问题(转)

    (转自  http://blog.chinaunix.net/uid-186064-id-2823338.html) oracle中imp导入数据中文乱码问题 用imp命令向oracle中导入数据后, ...

随机推荐

  1. Python-爬虫实战 简单爬取豆瓣top250电影保存到本地

    爬虫原理 发送数据 获取数据 解析数据 保存数据 requests请求库 res = requests.get(url="目标网站地址") 获取二进制流方法:res.content ...

  2. Ionic跳转到外网地址

    1.安装插件 https://github.com/apache/cordova-plugin-inappbrowser 执行命令:cordova plugin add org.apache.cord ...

  3. sas单变量的特征分析

    sas单变量的特征分析 大炮,我有个烦恼,我领导最近老叫我单变量结合因变量分析,但是都是分段分析,我总是写proc sql然后group by ,但是这个过程好无聊啊,有木有什么新的代码,让我可以分析 ...

  4. GULP入门(一)

    1.首先要先装node.然后在命令行里安装全局的gulp: npm install --global gulp 这是gulp在的生成的位置 2.接下来,我们需要将gulp安装到项目本地 npm ins ...

  5. HDFS命名空间管理

  6. Redis源码解析:11RDB持久化

    Redis的RDB持久化的相关功能主要是在src/rdb.c中实现的.RDB文件是具有一定编码格式的数据文件,因此src/rdb.c中大部分代码都是处理数据格式的问题. 一:RDB文件格式 上图就是一 ...

  7. [Array]122. Best Time to Buy and Sell Stock II(obscure)

    Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...

  8. AC自动机(模板) LUOGU P3808

    传送门 解题思路 AC自动机,是解决多模匹配问题的算法,是字典树与kmp结合的算法,可以解决许多子串在文本串中出现的次数等信息.关键是实现一个fail指针,是指向更靠上的前缀相同字母,从而可以实现在文 ...

  9. log4j2----JAVA日志打印

    注意:本篇文章是以log4j2.x 为例的,并不是log4j 1.x log4j 就是log for java  , log4j已经被移植到了C,C++,C#,Perl,Python和Ruby等语言中 ...

  10. go语言:获取字符串长度

    go语言字符串底层由字节数组实现,使用UTF-8编码,初始化以后不能被修改 获取字符串长度 一.当字符串中所有字符都是单字节字符时,使用 len 函数获取字符串的长度 package main imp ...