Python的类型与运算-文件(三)
• 读取特定编码文本数据
• 打印输出至文件
• 文件不存在时写入
• 读写压缩文件
• 获取文件夹中的文件列表
Python在使用open读取数据的时候,是使用系统默认的编码。
在Windows平台下,进入DOS窗口,输入:chcp可以得到操作系统的代码页信息,你可以从控制面板的语言选项中查看代码页对应的详细的字符集信息。
Python的类型与运算-文件(三)
• 读取特定编码文本数据
• 打印输出至文件
• 文件不存在时写入
• 读写压缩文件
• 获取文件夹中的文件列表
Python在使用open读取数据的时候,是使用系统默认的编码。
在Windows平台下,进入DOS窗口,输入:chcp可以得到操作系统的代码页信息,你可以从控制面板的语言选项中查看代码页对应的详细的字符集信息。
Python的类型与运算-文件(二)
之前看到的w模式,当文件是已有文件,就会删除里面的所有内容后再写入的。当我们需要在最后添加,而不是删除原有内容时,可以使用a模式。
r+模式,只能打开已有文件,打开时保留原有文件,对文件可读,可写,也可更改原有内容。打开时指针在文件最前面。
w+模式,打开时没有相应文件,会创建;有相应文件,会删除里面所有内容后打开。之后的操作与r+完全相同。
a+模式,可以打开原有文件,也可创建新的文件,打开时指针为文件的最后位置。指针可以放到任何位置来读内容,但写入时,指针默认会移动到最后,然后写入。
Python的类型与运算-文件(一)
• 文件的简介
• 文件的访问
• 文件的使用
• 文件的读写
• 文件与其它类型
• 文件中会使用到的其它类型
文件对象在Python里是可以作为OS(操作系统)上的文件的链接。
文件对象的使用方式与之前的字符串、列表等对象不同,它是对文件的输入、输出进行控制。
在Python里会用open函数(方法)来进行文件的控制。
在Python里使用open函数(方法)可以访问文件。
基本格式是:open(<file_address>[, access_mode])
这里的文件地址是文本形式,在Windows里,由于文件地址是使用反斜杠(\),
所以,可以使用r来对反斜杠不进行转译。
• 迭代器是最好的读行工具 - 比如: 使用for循环
• 内容是字符串,不是对象 - 文件读取完之后,内容是以字符串的形式读取的。
• close是通常选项 - 当你使用完文件之后,使用close()方法来关闭文件关联。
• 文件是缓冲的而且是可查找的 - flush或close()方法可以直接存储缓存里的内容,
seek方法可以转到指定位置。
writelines是把列表里的元素一个一个输入进去。当然,元素里的字符串最后没有换行,最终结果也不是换行的。
Python的类型与运算-元组
• 元组的简介
• 元组的操作
• 元组的方法
元组与列表非常类似,只是不能在原处更改(这个跟字符串类似)。
元组在Python里的特点:
• 任意对象的有序组合
• 通过偏移取数据
• 属于不可变序列类型
• 固定长度,异构,任意嵌套
• 对象引用的数组
元组的创建有下面几种:
>>> Tuple = ()
>>> Tuple = (1,)
只有单个元素的时候,必须加逗号(,)
>>> Tuple = (1,2,'3',(4,5))
>>> Tuple = 1,2,'3',(4,5)
这个和上面的结果是同样的。
>>> Tuple = tuple('1’)
Python的类型与运算-字典操作
Python的类型与运算-字典
• 字典的简介
• 字典的操作
• 字典的方法
字典在Python里是无序集合对象类型。
字典的值都有独立的唯一的键(Key),用相应的键来取值。
Python字典主要特性如下:
• 通过键而不是偏移量来读取
• 任意对象的无序组合
• 可变长,异构,任意嵌套
• 属于可映射类型
• 对象引用表
字典用法注意事项:
• 序列运算无效 - 串联,分片不能使用
• 对新索引(键)赋值会添加项
• 键不一定是字符串 - 只要是不可变的对象(除了列表和字典)
abs()绝对值
math.fabs()结果浮点数
math.sqrt()平方根
结果是浮点数
round 四舍五入
偶数取整
ceil:取最小的大于该值的最大整数
cmp()
前面数值小-1、一样时为0、前面数值大为1
random.random()0-1之间的随机小数
random.choice([2,4,6,8,10])随机取1个数
random.sample((2,4,6,8,10),2)随机取2个数
a = [2,4,6,8,10]
random.shuffle(a)把a打乱
math.modf()把一个数的小数和整数部分分开
使用Decimal模块解决精度问题
a = Decimal('2.1')
b = Decimal('4.2')
Python的类型与运算-列表方法
Python的类型与运算-列表
• 列表的简介
• 列表的操作
• 列表的方法
列表在Python里是有序集合对象类型。
列表里的对象可以是任何对象:数字,字符串,列表或者之后会讲到的字典,元祖等等。与字符串不同,列表是可变对象,支持原处修改的操作。
Python中的列表可以完成大多数集合体数据结构的工作,而这些在稍底层一些的语言中你不得不手工去实现。
Python的列表是:
• 任意对象的有序集合
• 通过偏移读取
• 可变长度、异构以及任意嵌套
• 属于可变序列的分类
• 对象引用数组
之前在字符串里的大部分操作都可以用在列表:
合并/重复:
List1 + List2 : 结果是两个列表按顺序结合。
List1 * 3 : 结果是列表1重复三次。
for i in List1: print i : 按顺序打印列表里的内容
3 in List : 判断列表里有没有一个对象是对象3
List1.index(1) : 查找列表里第一个为1的对象的位置
List1.count(1): 查找列表里对象为1的个数
List1[x:y]: 取第x到y的对象,重新建立一个列表
len(List1): List1里的对象个数
单下划线开头 _foo 的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用 from xxx import * 而导入;
以双下划线开头的 __foo 代表类的私有成员
以双下划线开头和结尾的 __foo__ 代表 Python 里特殊方法专用的标识,如__init__() 代表类的构造函数。
Python讨论-字符串13个场景(二)
1.字符串忽略大小写的搜索替换
2.最短匹配模式
3.多行匹配模式
使用正则表达式去匹配一大块的文本,而文本是跨越多行去匹配。
4.删除字符串中不需要的字符
去掉文本字符串开头,结尾或者中间不想要的字符,比如空白。
>>> s='hello world\n'
>>> s.strip()
'hello world' #去掉开头,中间结尾的空 格,换行符等。
>>> s.lstrip()
'hello world\n' #去掉前边的空格,换行符 等。
>>> s.rstrip()
'hello world' #去掉结尾的空格,换行符等
>>> s='hello world\n'
>>> import re
>>> re.sub(r'\s+','',s)
'helloworld'
>>> re.sub(r'\s+',' ',s)#将多个空格换成 一个空格。
'hello world '
5.字符串对齐
6.合并拼接字符串
创建一个内嵌变量的字符串,变量被它的值所表示的字符串替换掉。
>>> a='hello'
>>> b='world'
>>> a+''+b
'helloworld'
>>> a+' '+b
'hello world'
>>> '{}{}'.format(a,b)
'helloworld'
>>> '{} {}'.format(a,b)
'hello world'
>>> ' '.join([a,b])
'hello world'
>>> a=print(a,b)
hello world
7.字符串中插入变量
几个小的字符串合并为一个大的字符串。
8.以指定列宽格式化字符串
二进制0b开头
八进制0o开头
十六进制0x开头
i是十进制数字
bin(i)转换为二进制
oct(i)转换为八进制
hex(i)转换为十六进制
int(str, base)
str是数字 base是进制
可以把非十进制的数转化为十进制
支持二进制到三十六进制
复数 虚部用j表示
复数函数表示方式complex(3,5)
分数Fraction(4,5)
float('inf')无穷大
float('-inf')无穷小
^ 异或运算两个都是1或0取0,否则取1
~取反,取原来数的相反数,并减1
Python讨论-字符串13个场景(一)
1.使用多个界定符分隔字符串
需要将一个字符串分割为多个字段,但是分隔符(还有周围的空格)并不是固定的。之前是使用split可以分割,但是split只能使用同一字符,这个时候我们需要re模块。
re.split(r'[,.;:\s]\s*',Line)
re模块会使用到正则表达式。
[]表示里面字符里任意匹配。上面[;,\s]意味着;或者,或者空格。
\s表示空格
*表示任意个前面字符(0到无穷多)
结合起来就是;或,或空格加上任意个空格。
2.字符串开头或结尾匹配
需要通过指定的文本模式去检查字符串的开头或者结尾,比如文件名后缀,URL Scheme等等。
这时会使用startswith或者endswith
url="http://mypythonurl.com"
>>> url.startswith(('http://','https://','ftp://'))
看一个文件是不是txt格式,或者log:
>>> logfile="mylogfile.log"
>>> logfile.endswith(('log','txt'))
3.用shell通配符匹配字符串
4.字符串匹配和搜索
5.字符串搜索和替换
Python的类型与运算-字符串格式化表达式
s 字符串(或任何对象)
r 与s一样,但输出方式是repr方式,而不是str
c 字符
d 十进制(整数)
i 整数
u 无号整数
o 八进制整数
x 十六进制整数
X 与x同样,A-F是大写
e 浮点指数
E 与e同样,E是大写
f 浮点数十进制
F 浮点数十进制
g 浮点e或f
G 浮点E或F
#!/usr/bin/env python
使用反斜杠\可以吧一行语句写成多行
Python的类型与运算-字符串方法
• 字符串方法
• 字符串格式化表达式
属性读取:
Object.attribute格式的表达式可以理解为“读取object对象的属性attribute值”
函数调用表达式
具有函数(参数)格式的表达式意味着“调用函数代码,传递零或者更多用逗号隔开的参数对象,最后返回函数的返回值”。
这两者合并可以让我们调用一个对象方法。
大小写相关
S.capitalize() - 第一个字母大写,其余都变成小写字母。
S.title() - 每一词的头字母大写,其余都变成小写字母。
S.upper() - 全改成大写
S.lower() - 全改成小写
S.swapcase() - 大小写转换
S.center(width[, fill])/ S.ljust(width[, fill])/S.rjust(width[, fill])- 原来的字符扩到指定长度,再用fill来填充其余空处,默认空格。
S.expandtabs(tabsize)
- 更改tabs(在字符串里”\t”)转换为空格的数量,默认为8。
S.zfill(width)
- 原来的字符串扩到指定长度,前面使用0来填充。数字计算的时候会用到。
S.strip([chars])/S.lstrip([chars])/S.rstrip([chars])
- 删除两遍/左边/右边的指定字符(默认为空格和换行符)。
Python的类型与运算-字符串(一)
内容:
• 字符串简介
• 字符串常量
• 字符串操作
• 字符串方法(函数)
• 字符串格式化表达式
在Python里字符串是一个有序的字符的集合,用来存储和表现基于文本的信息。字符串可以用来表示能够像文本那样编辑的任何信息:符号和词语、在入道内存中的文本的内容、Internet网址和Python程序等。
在Python里字符串被划分为不可变序列这一类别,这意味着这些字符串所包含的字符存在从左至右的位置顺序,并且他们不可以在原处修改。
在Python里有很多种方法来表示字符串:
• 单引号:'Text"1"'
字符串代码转换: 当我们需要对字符串大小写等操作的时候,需要对字符串转换成相应的代码。这个时候我们就需要两个函数:ord和chr。
ord是把一个字符转换成数字,chr是把数字转换成单个字符。
• 双引号:"Text'1'"
• 三引号:'''...Lines...''',"""...Lines...""".
• 转义字符:"Line1\taddedtab\nLine2"
• Raw字符串:r"C:\My\new\Directory\file.exe"
防止的是转义字符。
• Python 3.x中的Byte字符串:b'Te\x01xt'
• Python 2.x中的Unicode字符串:u'my\u0020text'
在Python 3.x里默认是使用Unicode方式存储字符串。
在Python 2.x里默认是使用Latin-1方式存储字符串,因此不能直接识别中文。
# -*- encoding=utf8 -*-
在Python2.x脚本文件加上上面一句话就能正常使用中文。
Python转义字符:\(反斜杠)
len()是看字符串长度的。这个在使用中文的时候,会有点不同。
Python的类型与运算-动态类型简介
变量、对象、引用、共享引用。
变量:在Python里,不像别的一些语言,需要声明变量类型。因为在Python里变量没有类型。
变量是存放指针的,因此变量没有类型。
对象是存放数据的,所以对象有类型之说。
对象回收:因为对象是独立于变量的,当不再使用的时候是得回收的。
在Python里两个变量可以共享一个对象,这个叫做共享引用。
== 表示测试两个值是否相等。
is 表示两个值是否是同一对象。
在Python里多个变量引用同一整数,字符串的时候,会引用同一对象。但是其他时候,在Python里给两个变量赋予同样值的对象,其对象不是共用的。
需要了解一个对象被引用多少次,可以使用如下函数来查看:
import sys
sys.getrefcount(1)
Python的类型与运算-数字(二)
运算符应用
类型升级
导入分数模块:from fractions import Fraction
整数等级最低
只能应用于整数的运算符:位运算符,逻辑运算符,身份运算符。
基本数学函数
数学函数的应用
• bin,oct,hex
这些函数是需要转换进制的时候使用从10进制转化为其他进制
• float把整数转化为浮点数
• int这个是从别的进制的文本转化为Python里的数值时使用,也支持浮点数转化为整数,是把小数部分扔掉。
• pow:幂函数,功能与运算符**一样。
• sqrt:取当前数的平方根
• max:最大值与min:最小值
• abs与fabs:取绝对值。同样是取绝对值,但是fabs函数取出来的是浮点数,abs可以保持原有的数字类型。
• Decimal模块:在使用浮点数的时候,因为计算机里是使用二进制来表示,所以会出现精度问题,当金融行业等不许出现一丝问题的时候,我们会使用Decimal模块来解决精度问题。
• 格式化输出-format:使用bin(),oct(),hex()的时候会发现前面会加0b,0o,0x。我们不想要前缀的时候可以
使用format函数来解决。
cmp:在Python 2.x里提供了很好的比较函数: cmp(),当前面的数值小,结果是-1;一样的时候结果为0,前面的数值大的时候结果为1。但是Python 3.x里很可惜舍弃了这个函数。
random:在Python 里提供了很好的随机函数使用的模块。
• modf:此函数是把浮点数的整数位和小数位单独取出来。
• log:此函数为指数函数。默认e为底数,结果为浮点数。log10以10为底数。可以自定义底数。
任务2:Python的类型与 运算-数字(一)
一、整数
没有这种区别,它正常显示。在Python3.X里没有这种分别
注意:在老版本中,可以以0开头,新版本不支持。
注意:前三个函数输出的是文本形式。
二、浮点数
注意:Python3.X里的输出跟现实运算是一样的
三、复数
四、其他的数字
五、运算符详解