一句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》(第二版)
一句python,一句R︱python中的字符串操作、中文乱码的更多相关文章
- 一句python,一句R︱python中的字符串操作、中文乱码、NaN情况
一句python,一句R︱python中的字符串操作.中文乱码.NaN情况 先学了R,最近刚刚上手Python,所以想着将python和R结合起来互相对比来更好理解python.最好就是一句pytho ...
- Python中的字符串操作总结(Python3.6.1版本)
Python中的字符串操作(Python3.6.1版本) (1)切片操作: str1="hello world!" str1[1:3] <=> 'el'(左闭右开:即是 ...
- Oracle中有关字符串操作的语法
Oracle中有关字符串操作的语法 Oracle提供了丰富的字符串函数 lpad()函数 lpad()函数用于左补全字符串.在某些情况下,预期的字符串为固定长度,而且格式统一,此时可以考虑使用lpad ...
- 处理SecureCRT中使用vim出现中文乱码问题
处理SecureCRT中使用vim出现中文乱码问题 引用原文:http://blog.chinaunix.net/uid-20639775-id-3475608.html因为cat没有问题,定位是vi ...
- 在Servlet中出现一个输出中文乱码的问题(已经解)。
在Servlet中出现一个输出中文乱码的问题,已经解. @Override public void doPost(HttpServletRequest reqeust, HttpServletResp ...
- PHP连接sqlserver的两种方法,向sqlserver2000中写入数据,中文乱码
项目环境是php5.3.28 项目用的ThinkPHP3.2.3 已经mysql5.5数据库,要和另一个项目对接,需要连接sqlsever2000数据库进行一些操作. 第一种用php自带扩展连接数据 ...
- SQL点滴33—SQL中的字符串操作
原文:SQL点滴33-SQL中的字符串操作 计算字符串长度len()用来计算字符串的长度 select sname ,len(sname) from student 字符串转换为大.小写lower() ...
- Windows下Git Bash中VIM打开文件中文乱码
Windows下Git Bash中VIM打开文件中文乱码,解决方法是: 步骤一 admin@DESKTOP-O99620V MINGW64 /d/项目GGE/Hard_for_GGE (master) ...
- oracle中imp导入数据中文乱码问题(转)
(转自 http://blog.chinaunix.net/uid-186064-id-2823338.html) oracle中imp导入数据中文乱码问题 用imp命令向oracle中导入数据后, ...
- 解决docker容器中Centos7系统的中文乱码
解决docker容器中Centos7系统的中文乱码问题有如下两种方案: 第一种只能临时解决中文乱码: 在命令行中执行如下命令: # localedef -i zh_CN -f UTF-8 zh_CN. ...
随机推荐
- MyCat 入门:漫谈 MyCat 配置系统
文章首发于[博客园-陈树义],点击跳转到原文<MyCat 入门:漫谈 MyCat 配置系统> 上篇文章<MyCat 启蒙:分布式系统的数据库架构演变>中,我们通过一个项目从零到 ...
- 面试中的Java链表
链表作为常考的面试题,并且本身比较灵活,对指针的应用较多.本文对常见的链表面试题Java实现做了整理. 链表节点定义如下: static class Node { int num; Node next ...
- 【Java】泛型学习笔记
参考书籍 <Java核心技术:卷1> 泛型, 先睹为快 先通过一个简单的例子说明下Java中泛型的用法: 泛型的基本形式类似于模板, 通过一个类型参数T, 你可以"私人定制&qu ...
- tensorflow.python.framework.errors_impl.OutOfRangeError: FIFOQueue
tensorflow.python.framework.errors_impl.OutOfRangeError: FIFOQueue 原创文章,请勿转载哦~!! 觉得有用的话,欢迎一起讨论相互学习~F ...
- 关于C#连接Oracle数据库 尝试加载Oracle客户端时引发BadImageFormatException 如果在安装32位Oracle客户端组件的情况下以64位模式运行,将出现此问题
这个问题已经困扰了我快一个月了,各种百度,各种博客,可是,一个个都试过了,什么下载32位客户端,配置环境变量什么的,纯属扯犊子,开发环境win10 64位 oracle 11g r2 64位,这 ...
- Jsonp 原理简述
浏览器因为安全问题而有一个同源策略,不允许跨域请求数据.但是 js 脚本资源和图片资源还是被允许跨域请求的.在 web 开发中,遇到要跨域请求 json 数据时,可以用 jsonp 的方式来绕过浏览器 ...
- java多线程之内存可见性-synchronized、volatile
1.JMM:Java Memory Model(Java内存模型) 关于synchronized的两条规定: 1.线程解锁前,必须把共享变量的最新值刷新到主内存中 2.线程加锁时,将清空工作内存中共享 ...
- HDU 3689 Infinite monkey theorem [KMP DP]
Infinite monkey theorem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- S5PV210中断处理
_start: 1.设置栈空间:防止之前的UBOOT代码被覆盖,应为c中需要栈空间 ldr sp, =0x40010000 2.设置CPSR的I,F位,A8打开IRQ,FIQ中断: mov r0, # ...
- nodejs开启服务器端口
var http = require('http'); var server = http.createServer(function(req, res) { res.writeHead(200, { ...