列表推导
示例:生成0-9中能被2整除的序列
z = [i for i in range(10) if i % 2 == 0]
# 运行结果
[0, 2, 4, 6, 8]
使用json模块存储数据 使用json.dump()和json.load()
函数json.dump()接受两个实参:要存储的数据以及可用于存储数据的文件对象。
文件中数据的存储格式与Python中一样 为:[2,3,5,7,11,13]
import json
numbers = [2,3,5,7,11,13]
filename = 'numbers.json'
with open(filename,'w') as f_obj:
json.dump(numbers,f_obj)
函数json.load()读取文件
import json
filename = 'numbers.json'
with open(filename) as f_obj:
numbers = json.load(f_obj)
print(numbers)
循环使用技巧
循环字典时 键和值可以使用 items() 同时读取
knights = {'name':'cen','age':20,'sex':'男'}
for k,v in knights.items():
print(k,v)
# 运行结果
name cen
age 20
sex 男
循环序列时 索引位置和值可以使用 enumerate() 同时得到
for i,j in enumerate(['name','age']):
print(i,j)
# 运行结果
0 name
1 age
同时循环两个或更多的序列,可以使用 zip() 整体打包
numbers1 = [1,2,3]
numbers2 = [4,5,6]
for i,j in zip(numbers1,numbers2):
print(i,j)
# 运行结果
1 4
2 5
3 6
内置数值运算函数
abs()、divmod()、pow()、round()、max()、min()
字符串操作
1.format()方法的格式控制
format()方法中模板字符串的槽除了包括参数序号,还 可以包括格式控制信息。
{<参数序号>: <格式控制标记>}
其中,格式控制标记用来控制参数显示时的格式 。格式 控制标记包括:<填充><对齐><宽度>,<.精度><类型>6个 字段,这些字段都是可选的,可以组合使用。
<填充>、<对齐>和<宽度>主要用于对显示格式的规范。
>>> s = "世界你好"
>>> "{:25}".format(s) # 左对齐
'世界你好 '
>>> "{:^25}".format(s) # 居中对齐
' 世界你好 '
>>> "{:>25}".format(s) # 右对齐
' 世界你好'
>>> "{:*^25}".format(s) #居中对齐且填充*号
'**********世界你好***********'
>>> "{:+^25}".format(s) # 居中对齐且填充+号
'++++++++++世界你好+++++++++++'
>>> "{:十^25}".format(s) # 居中对齐且填充汉字十
'十十十十十十十十十十世界你好十十十十十十十十十十十'
>>> "{:^1}".format(s) # 指定宽度为1,不足变量s的宽度
'世界你好'
<.精度><类型>主要用于对数值本身的规范
<.精度>由小数点(.)开头。对于浮点数,精度表示小 数部分输出的有效位数。对于字符串,精度表示输出的 最大长度。小数点可以理解为对数值的有效截断。
>>> "{:.2f}".format(12345.67890) # 保留两位小数
'12345.68'
>>> "{:>25.3f}".format(12345.67890) # 右对齐、25个字符、保留三位小数
' 12345.679'
>>> "{:.5}".format('Hello world!') # 保留5个字符
'Hello'
<类型>表示输出整数和浮点数类型的格式规则。
对于整数类型,输出格式包括6种:
• b: 输出整数的二进制方式;
• c: 输出整数对应的Unicode字符;
• d: 输出整数的十进制方式;
• o: 输出整数的八进制方式;
• x: 输出整数的小写十六进制方式;
• X: 输出整数的大写十六进制方式;
>>> "{0:b},{0:c},{0:d},{0:o},{0:x},{0:X}".format(425)
’110101001,Ʃ,425,651,1a9,1A9‘
对于浮点数类型,输出格式包括4种:
• e: 输出浮点数对应的小写字母e的指数形式;
• E: 输出浮点数对应的大写字母E的指数形式;
• f: 输出浮点数的标准浮点形式;
• %: 输出浮点数的百分形式。
>>> "{0:e},{0:E},{0:f},{0:%}".format(3.14)
'3.140000e+00,3.140000E+00,3.140000,314.000000%'
>>> "{0:.2e},{0:.2E},{0:.2f},{0:.2%}".format(3.14) # 对比输出
'3.14e+00,3.14E+00,3.14,314.00%'
常用的方法格式控制信息
>>>"{:.2f}".format(3.1415926) # 输出小数点后两位
'3.14'
>>>"{:x}".format(1010) # 输出整数的十六机制形式
'3f2'
>>>"{:.5}".format("这是一个很长的字符串") # 输出字符串的前5位
'这是一个很'
>>>"{:-^10}".format("PYTHON") # 居中并填充
'--PYTHON--'
2.字符串操作符
+、*、in
3.字符串处理函数
len()、str()、chr()、ord()、hex()、oct()
4.字符串处理方法
lower()、upper()、split()、count()、replace()、center()、strip()、join()
>>>"Python".center(20, "=")
'=======Python======='
>>>" ==Python== ".strip(' ')
'==Python=='
>>>" ==Python== ".strip(' =')
'Python'
基本数据类型
复数类型
复数类型中实部和虚部都是浮点类型,对于复数z,可以用 z.real和z.imag分别获得它的实数部分和虚数部分 。
>>>(1.23e4+5.67e4j).real
12300.0
>>>(1.23e4+5.67e4j).imag
56700.0
>>>1.23e4+5.67e4j.imag # 先获得5.67e4j的虚部,再与1.23e4进行求和计算
69000.0
complex() 函数用于创建一个值为 real + imag * j 的复数或者转化一个字符串或数为复数。如果第一个参数为字符串,则不需要指定第二个参数。
>>>complex(1, 2)
(1 + 2j)
>>> complex(1) # 数字
(1 + 0j)
>>> complex("1") # 当做字符串处理
(1 + 0j)
>>> complex("1+2j")
(1 + 2j)
文件的打开和关闭
Python通过open()函数打开一个文件,并返回一 个操作这个文件的变量,语法形式如下: <变量名> = open(<文件路径及文件名>, <打开模式>)
打开模式使用字符串方式表示,根据字符串定义, 单引号或者双引号均可。上述打开模式中, ‘r’ 、 ‘ w ‘ 、 ‘x’ 、 ‘b’可以和’b’ 、 ‘t’ 、 ‘+’组合使用,形成既 表达读写又表达文件模式的方式。
文件使用结束后要用close()方法关闭,释放文件 的使用授权,语法形式如下: <变量名>.close()
文件的读写
文件打开后,对文件的读写有一个读取指针,当从文件 中读入内容后,读取指针将向前进,再次读取的内容将 从指针的新位置开始。
>>>f = open("D://b.txt", "r")
>>>s = f.read()
>>>print(s)
新年都未有芳华,二月初惊见草芽。
白雪却嫌春色晚,故穿庭树作飞花。
>>>ls = f.readlines()
>>>print(ls)
[]
# 结合读取指针理解,上述代码中ls返回值为空, 因为之前f.read()方法已经读取了文件全部内容, 读取指针在文件末尾,再次调用
# f.readlines()方 法已经无法从当前读取指针读入内容,因此返回 结果为空。
>>>f.close()
f.seek()方法能够移动读取指针的位置,f.seek(0)将读取 指针移动到文件开头,f.seek(2)将读取指针移动到文件 结尾。
从文本文件中逐行读入内容并进行处理是一个基本的文 件操作需求。文本文件可以看成是由行组成的组合类型, 因此,可以使用遍历循环逐行遍历文件,使用方法如下:
f = open(<文件路径及名称>,
"r")
for line in f:
# 处理一行数据
f.close()
f.write(s)向文件写入字符串s,每次写入后,将会记录一个写入指 针。该方法可以反复调用,将在写入指针后分批写入内容,直至文 件被关闭。
f.writelines(lines)直接将列表类型的各元素连 接起来写入文件f 。
>>>ls = ['新年都未有芳华\n','二月初惊见草芽\n','白雪却嫌春色晚\n','故穿庭树作飞花\n']
>>>f = open("D://c.txt", "w")
>>>f.writelines(ls)
>>>f.close()
组合数据类型
集合
Python语言中的集合类型与数学中的集合概念一致,即包含0个或多个数据项的无序组合。n 集合是无序组合,用大括号({})表示,它没有索引和位置的概念,集合中元素可以动态增加或删除。
集合中元素不可重复,元素类型只能是固定数据类型,例如:整数、浮点数、字符串、元组等,列表、字典和集合类型本身都是可变数据类型,不能作为集合的元素出现。
需要注意,由于集合元素是无序的,集合的打印效果与定义顺序可以不一致。由于集合元素独一无二,使用集合类型能够过滤掉重复元素。
>>> s = {1010,"1010",78.9,1010}
>>> type(s)
<class 'set'>
>>> print(s)
{'1010', 1010, 78.9}
集合类型概述
集合类型有4个操作符,交集(&)、并集(|)、差集(-)、补集(^),操作逻辑与数学定义相同。
>>>S = {1010, "1010", 78.9}
>>>T = {1010, "1010", 12.3, 1010, 1010}
>>>S - T
{78.9}
>>>T – S
{12.3}
>>>S & T
{1010,
'1010'}
>>>T & S
{1010,
'1010'}
>>>S ^ T
{78.9, 12.3}
>>>T ^ S
{78.9, 12.3}
>>>S | T
{78.9, 1010, 12.3,
'1010'}
>>>T | S
{1010, 12.3, 78.9,
'1010'}
集合类型常用的操作函数或方法
序列类型通用的操作符和函数
列表操作方法
字典操作方法
一维数据的存储
列表对象输出为CSV格式文件方法如下,采用字 符串的join()方法最为方便。
ls = ['北京','上海','天津','重庆']
f = open("city.csv","w")
f.write(",".join(ls)+ "\n")
f.close()
运行结果
一维数据的读取
对一维数据进行处理首先需要从CSV格式文件读 入一维数据,并将其表示为列表对象。
f = open("city.csv","r")
ls = f.read().strip('\n').split(",")
f.close()
print(ls)
运行结果
二维数据的存储
ls = [['指标', '2014年', '2015年', '2016年'], ['居民消费价格指数', '102', '101.4', '102'], ['食品', '103.1', '102.3', '104.6'],['烟酒及用品', '994', '102.1', '101.5'], ['衣着', '102.4', '102.7', '101.4'], ['家庭设备用品', '101.2', '101', '100.5'],['医疗保健和个人用品', '101.3', '102', '101.1'], ['交通和通信', '99.9', '98.3', '98.7'],['娱乐教育文化', '101.9', '101.4', '101.6'], ['居住', '102', '100.7', '101.6'], ]
f = open('二维数据.csv','w')
for line in ls:
f.write(','.join(line)+'\n')
f.close()
二维数据的读取
f = open('二维数据.csv', 'r')
ls = []
for line in f:
ls.append(line.strip('\n').split(','))
print(ls)
二维数据格式化输出
'''二维数据格式化输出'''
for row in ls:
line = ""
for item in row:
line += "{:20}\t".format(item)
print(line)