数据运算
数据类型
不可变类型:整型,字符串,元组
可变类型:列表,字典
- 数字–>整数 int(integer)
整型/长整型:
在 python3中 已经不区分整型与长整型,统一都叫整型
在C中区分,分别是: int age 22 , long age
布尔:
只有2种状态,分别是:真 True; 假 False。
字符串:
salary.isdigit()
计算机中, 一切皆为对象。
世界万物,皆为对象,一切对象皆可分类
列表,元组
列表创建:
a=[1,2,3]#第一种
a=list(((1,2,3),))#第二种,也可以写成a=list([[1,2,3],])
元组创建:
tup1=()#空元组
tup2=(20,)#创建一个元组,第一个元素是20(还有多个元素可在‘逗号’后面追加)
a=tuple([1,2,3])
元组切片查询
a=(1,2,3,4,5)
print(a[1:2])
#打印结果
(2,)
- 查
索引(下标) ,都是从0开始
#切片
.count 查某个元素的出现次数
.index 根据内容找其对应的位置
"haidilao ge" in a
- 增加
a.append() 追加
a.insert(index, "内容")
a.extend 扩展
- 修改
a[index] = "新的值"
a[start:end] = [a,b,c]
- 删除
remove("内容")
pop(index)
del a, del a[index]
a.clear() 清空
- 排序
sort ()
reverse()
- 身份判断
>>> type(a) is list
True
>>>
循环loop
for
while
break , continue
for i in range(int(len(data) * rate)):
out_file_1.write(data[i][1])
有限循环 ,次数限制
无限循环=死循环
continue 结束本次循环,继续下一次循环
break 跳出整个当前的循环
字符格式化输出
占位符
- %s s = string
- %d d = digit 整数
- %f f = float 浮点数,约等于小数
#举个栗子
print ("the classifier came back with: %s,the real answer is: %s" %(classifierResult, datingLabels[i]))
print ("the total error rate is: %f" %(errorCount/float(numTestVecs)))
# % 格式字符串
print('alex is a good teacher')
print('%s is a good teacher'%'alex')
#关键字 in
print(123 in [23,45,123])
print('e2l' in 'hello')
字典(key-value)
以key-value形式存储,通过键(key)来存取
- 特点:无序;键唯一
- 创建形式:(2种)
dic1={'name':'alex','age':36,'sex':'male'}
dic2=dict((('name','alex'),))
字典操作
修改
dic1={'name':'alex'}
dic1['name']='limei'#中括号中的键值存在,改变key的value值,否则新增一个键值对。
"""
该方法根据参数增加对象,
key的值存在,无法改变value的内容,key的内容不存在时,新增该对象。
该方法具有返回值,
key存在是返回值=之前定义好的值,key不存在时,先增加该对象并将定义的值返回给ret1
"""
ret1=dic1.setdefault('name','wangwu')
其他操作
#查 通过键去查找
dic3={'age': 18, 'name': 'alex', 'hobby': 'girl'}
print(dic3['name'])
print(list(dic3.keys()))
print(list(dic3.values()))
print(list(dic3.items()))
dic1.clear() # 清空字典
del dic1['name'] #删除字典中指定键值对
ret=dic5.pop('age')#删除字典中指定键值对,并返回该键值对的值
a = dic5.popitem() #随机删除某组键值对,并以元组方式返回值
del dic5 #删除整个字典
String 操作
a="Let's go "
print(a)
# 1 * 重复输出字符串
print('hello'*20)
#2 [] ,[:] 通过索引获取字符串中字符,这里和列表的切片操作是相同的,具体内容见列表
print('helloworld'[2:])
#3.关键字 in
print(123 in [23,45,123])
print('e2l' in 'hello')
# 4 % 格式字符串
print('alex is a good teacher')
print('%s is a good teacher'%'alex')
#5 拼接
a='123'
b='abc'
d='44'
c=a+b
print(c)
c= ''.join([a,b,d])
print(c)
String的内置方法
st='hello kitty {name} is {age}'
print(st.count('l')) # 统计元素个数
print(st.capitalize()) # 首字母大写
print(st.center(50,'#')) # (常用)居中
print(st.endswith('tty3')) # 判断是否以某个内容结尾
print(st.startswith('he')) # (常用)判断是否以某个内容开头
print(st.expandtabs(tabsize=20))
print(st.find('t')) # 查找到第一个元素,并将索引值返回
print(st.format(name='alex',age=37)) # (常用)格式化输出的另一种方式 待定:?:{}
print(st.format_map({'name':'alex','age':22}))
print(st.index('t'))
print('asd'.isalnum())
print('12632178'.isdecimal())
print('1269999.uuuu'.isnumeric())
print('abc'.isidentifier())
print('Abc'.islower())
print('ABC'.isupper())
print(' e'.isspace())
print('My title'.istitle())
print('My tLtle'.lower())
print('My tLtle'.upper())
print('My tLtle'.swapcase())
print('My tLtle'.ljust(50,'*'))
print('My tLtle'.rjust(50,'*'))
print('\tMy tLtle\n'.strip())
print('\tMy tLtle\n'.lstrip())
print('\tMy tLtle\n'.rstrip())
print('ok')
print('My title title'.replace('itle','lesson',1))
print('My title title'.rfind('t'))
print('My title title'.split('i',1))
print('My title title'.title())
文件操作
三种基本的操作模式 r(只可读) w(只可写) a(追加)
基本流程
1 创建文件对象
2 调用文件方法进行操作
3 关闭文件
f=open('小重山2','r',encoding='utf8')
f.write()#报错
data=f.read(5)
print(data)
f.write('\nhello world \n')
f.write('alex')
#注意:if not close,数据会缓存,而不是磁盘!
time.sleep(30)
f.close()
具体操作方法
f=open('小重山','a',encoding='utf8')
print(f.read(5))
print(f.read(5))# 注意 :汉字在这里占一个单位(in Py3)
a=f.readline()
print(a)
print(f.readline())
print(f.readline())#无论是read()还是readline(),光标会发生位置变化
print(f.readlines())#['昨夜寒蛩不住鸣。\n', '惊回千里梦,已三更。\n', '起来独自绕阶行。\n', '人悄悄,帘外月胧明。\n', '白首为功名,旧山松竹老,阻归程。\n', '欲将心事付瑶琴。\n', '知音少,弦断有谁听。']
实例打印文件
data=f.readlines()#注意及时关闭文件
f.close()
number = 0
for i in data:
number += 1
if number == 6:
i = ''.join([i.strip(), 'iiiii']) # 取代万恶的+
print(i.strip())
f.close()
对于大数据文件,要用以下方式(the best way):
number=0
for i in f:#这是for内部将f对象做成一个迭代器,用一行去一行。
number+=1
if number == 6:
i = ''.join([i.strip(), 'iiiii']) # 取代万恶的+
print(i.strip())
print(i.strip())
print(f.tell())# 取出光标位置
print(f.read(2))
print(f.tell())
f.seek(0)# 移动光标到指定的位置
print(f.read(4))
flush():同步吧将数据从缓存转移到磁盘上去
进度条实例
import sys,time
for i in range(30):
sys.stdout.write("*")
sys.stdout.flush()
time.sleep(0.1)
print的flush
import sys,time
for i in range(30):
print('*',end='',flush=True)
time.sleep(0.1)
f=open('小重山','r',encoding='utf8')
truncate():截断数据(不能在r模式下)
在w模式下:先清空,再写,再截断
在a模式下:直接将指定位置后的内容截断
f.truncate(5)
f.write('hello world')
f.truncate(5)
f.close()
r+, w+, a+
r+:光标默认在0位置,最后位置开始写
w+:先清空,再写读
a+:光标默认在最后位置
f=open('小重山','r+',encoding='utf8')
print(f.tell())
print(f.readline())
f.write('岳飞')
print(f.tell())
f.seek(0)
print(f.readline())
f.close()
终极问题 如何在磁盘修改文件
常规思路,由于磁盘存储机制不能完成
number=0
for line in f:
number+=1
if number==3:
f.write('alex')
#只能采取重新创建一个文件的思路
f_read=open('小重山','r',encoding='utf8')
f_write = open('小重山2','w',encoding='utf8')
number=0
for line in f_read:
number+=1
if number==5:
line=''.join([line.strip(),'alex\n'])
line='hello 岳飞\n'
f_write.write(line)
f_read.close()
f_write.close()