流:简单来说就是建立在面向对象基础上的一种抽象的处理数据的工具。
在流中,定义了一些处理数据的基本操作,如读取数据,写入数据等,
程序员是对流进行所有操作的,而不用关心流的另一头数据的真正流向。
流不但可以处理文件,还可以处理动态内存、网络数据等多种数据形式。
random 模块
import random
item=[1,2,3,4,5]
for i in range(5):
print(random.random()) #产生(0-1)之间的任意1个小数
print(random.randint(1,5)) #产生[1-5]之间任意一个整数
print(random.randrange(1,5)) #产生[1-5)之间任意一个整数
print(random.uniform(1,5)) #产生(1-5)之间任意一个小数
print(random.choice(item)) #单列集合随机选择一个
print(random.sample(item,3)) #单列集合随机选择3个,类型为list
random.shuffle(item) #洗牌单列集合 将之前的集合内元素顺序随机打乱
print(item)
#产生指定位数的验证码,可以满足一定的逻辑需求
def random_code(count):
code=''
for i in range(count):
num=random.choice([1,2,3])
if num==1: #该位是数字
code+=str(random.randint(0,9)) #字符串拼接只能由字符串拼接
elif num==2: #该位为大写字母
code+=chr(random.randint(65,90)) #在Ascii里65-90是大写字母
else: #该位为小写字母
code+=chr(random.randint(97,122)) #在Ascii里97-122是小写字母
return code
print(random_code(10))
shutil模块:可以操作权限的处理文件模块内
import shutil
小点:当所操作的文件夹(文件)对象与自执行的文件不在同一个目录下面时,需要加上绝对路径!!!
# 1、基于路径的文件复制,被复制的文件可以不存在
shutil.copyfile('source_file','targe_file')
#2、基于流的文件复制
with open('source_file','rb')as f,open('targe_file','wb')as w:
shutil.copyfileobj(f,w)
#将文件source_file的内容 复制给文件targe_file
#3、递归删除目标文件夹下面的空目录
shutil.rmtree('targe_folder')
#4、文件移动
shutil.move('old_file','new_file')
#将old_file整体移到同目录下的new_file里,new_file可以不存在,会自动创建
#5、文件夹压缩
shutil.make_archive('file_name','format','archive_path')
# ('压缩后的名称','格式','要压缩的路径')
#6、解压缩
shutil.unpack_archive(r'unpack_file','unpack_name','format')
# ('解压的路径','解压后的位置','解压的格式')
#存在压缩,必然存在解压缩,需要注意压缩包在前,需要加上r,解压缩包在中间,格式最后
shelve模块:可以用字典存取数据到文件的序列化模块
#将序列化的文件操作dump与load进行封装
import shelve
s_dic = shelve.open("text.py",writeback=True)
#writeback允许序列化的可变类型,可以直接修改值
#序列化存:
s_dic['key1']='value1'
s_dic['key2']='value2'
#反序列化:取
print(s_dic['key1']) #value1
#文件的释放
s_dic.close()
三流:系统标准标准输入|输出|错误流
#三者都不会主动换行
import sys
sys.stdout.write('123') #类似于print('msg',end='')
print('123',end='') #123123 两个语句都不会主动换行
sys.stderr.write('错误信息')
sys.stderr.write('错误信息
') #加上换行符可以实现换行
res=sys.stdin.read(3) #空格代表一个字符,参数3代表打印出来的字符数
print(res) #不添加参数,会一直默认输入
res=sys.stdin.readline() #输入一行字符,输出结果同样为一行字符
print(res)
#小点:print默认是对sys.stdout.write('msg')+sys.stdout.write('
')的封装
#格式化结束符 print:print('msg',end='')