day05

一、笔记:
1、函数
def func(a,b=None,*args,**kwargs):
name = 'ybq'
return name
提高代码的复用性,减少重复的代码。
2、修改文件
1、第一种 简单粗暴的
1、先把所有的内容读出来
2、再把文件内容清空
3、再把新的内容写进去
2、两个文件
循环第一个文件,逐行处理,处理完一行写到新文件里面。
f1 = open(f1)
f2 = open(f2)
for line in f1:
new_line = line.replace('xxx','xx')
f2.write(new_line)
删掉旧的文件,新的文件改名。

3、集合
天生去重
t = set()
t = {'',''}
4、模块
1、标准模块
2、第三方模块
pip install xxx
下载安装包 解压 python setup.py install
3、自己写的模块,也就是一个python文件

import 一个模块的实质
把这个python文件从头到尾运行一次
import 模块寻找模块的路径:
1、先从当前目录下找
2、再从环境变量里面找。

1、写代码的时候少用全局变量。
1、不安全
2、会一直占着内存不释放。
2、函数如果有多个return值,那么会把这几个return的值都放到一个元组里面,然后返回
3、列表推导式
4、一个函数尽量只实现一个功能
5、实现同样的功能,代码越少越牛逼。
6、常量
常量就是一个不会变的变量。
常量名全部用大写字母来定义。

#测试开发
开发工具、平台

#自动化测试
通过写代码来做测试,提供测试效率。
{'car':{'name':'xxx'}}

#print(os.getcwd())#取当前工作目录
# print(os.mkdir("test1")) # 创建文件夹
# print(os.remove("../day4/5.png")) # 删除文件,不能删文件夹。
# print(os.listdir('c://')) # 列出一个目录下的所有文件
# os.rename("test", "test1") # 重命名
# print(os.path.abspath(__file__)) # 获取绝对路径
# print(os.path.split("c:\\usr\\hehe\\hehe.txt")) # 分割路径和文件名
# print(os.path.dirname("c:\\usr\\hehe\\hehe.txt")) # 获取父目录
# print(os.path.exists("c://test2")) # 目录/文件是否存在
# print(os.path.isfile(r"E:\txz\day2.zip"))#判断是否是一个文件
# print(os.path.isdir(r"E:\txz\day2"))#是否是一个文件夹
# print(os.path.join("e",name))#拼接成一个路径
os.popen('xx')执行操作系统命令
os.system('xxx')
二、函数retrun多个值
def hello(a,b,c,d):
return a,b,c,d

# res = hello('ybq','mpp','zhx','lby')
# print(res)
# nums = [0,1,3,4,5,6,7]
# new_nums = [x-1 for x in nums]
# print(new_nums)

a = 2
b = 1
# b = 1 a = 2
# b,a = a,b #交换两个变量的值
# print(a,b)
a = a + b #3
b = a - b #2
a = a - b #3-2
三、map和filter
def func(a): #0 1 2
if a%2==0:
return True
else:
return False
nums = [x for x in range(11)]
res = filter(func,nums)
print(list(res))
#filter也是帮你循环调用函数的,filter只保存结果返回真的。

#map
# all_res = []
# for num in nums:
# res = func(num)
# all_res.append(res)
#
# res = map(func,nums) #
#
# print(list(res))
#循环调用函数,然后把每次函数处理的结果,放到一个list里面返回
四、双色球
#-*-coding:utf-8-*-
import random,time
def process_int(x):
'''这个函数用来把int类型转成字符串'''
x = str(x)
if len(x)==1:
#如果是个位数前面加
x = '0'+x
return x
def tickets(num):
red_nums = list(map(process_int,range(1,34)))
blue_nums = list(map(process_int,range(1,17)))
res_list = []
for i in range(1,num+1):
red_num = random.sample(red_nums,6)
blue_num = random.sample(blue_nums,1)
res = red_num+blue_num
format_str = '第%s个:红球:%s篮球 %s'%(i,','.join(res[:7]),res[-1])
res_list.append(format_str+'\n')
print(format_str)
cur_time = time.strftime('%Y.%m.%d %H_%M_%S')
with open('%s.txt'%cur_time,'w',encoding='utf-8') as fw:
fw.writelines(res_list)
if __name__ =='__main__':
nums = input('请输入你要产生多少条双色球号码:').strip()
tickets(int(nums))
五、函数即变量
# def say(name):
# print(name)
#
# ybq = say
# ybq('原宝青')

def add():
print('添加商品')
def view():
print('查看商品')
def delete():
print('删除商品')

choice = input('请输入选择 1、2、3、').strip()

menu = {
'1':add,
'2':view,
'3':delete
}
if choice in menu:
menu[choice]() #适合用于函数没有参数,或者参数是一样的情况下。
else:
print('输入错误')
六、处理json
import json

#json串就是字符串。

d = {
'car':{'color':'red','price':100,'count':50},
'挨粪叉':{'color':'red','price':100,'count':50},
'挨粪叉1':{'color':'red','price':100,'count':50},
'挨粪叉2':{'color':'red','price':100,'count':50},
'挨粪叉3':{'color':'red','price':100,'count':50},
'挨粪叉4':{'color':'red','price':100,'count':50},
}

# res = json.dumps(d,indent=8,ensure_ascii=False) #把list、字典转成json,indent多少缩进,ensure_ascii可以显示中文
# f1 = open('f1','w',encoding='utf-8')
# f1.write(res)

# f1 = open('f1',encoding='utf-8')
# res = f1.read()
# dict_res = json.loads(res) #把json串变成python的数据类型
# print(dict_res)

# f1 = open('f1','w',encoding='utf-8')
# json.dump(d,f1,ensure_ascii=False,indent=4)
#自动帮你写入文件,第一个参数是数据,第二个是文件对象

f1 = open('f1',encoding='utf-8')
print(json.load(f1))
#自动帮你读文件。
七、内置函数
#函数即变量
# http://www.nnzhp.cn/archives/152
# len type print input str
# print(all([1, 2, 3, 4])) # 判断可迭代的对象里面的值是否都为真
# print(any([0, 1, 2, 3, 4])) # 判断可迭代的对象里面的值是否有一个为真
# print(bin(100)) # 十进制转二进制
# ejz = bin(100)
# print(ejz.replace('0b',''))
# print(chr(65)) # 打印数字对应的ascii
# print(ord('A')) # 打印字符串对应的ascii码
# print(dir(1)) # 打印传入对象的可调用方法
# print(eval('[]')) # 执行python代码,只能执行简单的,定义数据类型和运算
# code = 'def func(a):pass'
# print(eval(code))
# code = '''def a():print('aa')'''
# print(exec(code)) # 执行python代码
# 函数--调用函数 -在线运行代码
# https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014316784721058975e02b46cc45cb836bb0827607738d000

#zip
# print(filter(lambda x: x > 5, [12, 3, 12, 2, 1, 2, 35])) # 把后面的迭代对象根据前面的方法筛选
# print(map(lambda x: x > 5, [1, 2, 3, 4, 5, 6]))

ids= [1,2,3,4,7,8,0,-1]
names=['小黑','小白','小黄','小绿']
names1=['小黑','小白','小黄','小绿']

# for id,name,s in zip(ids,names,names1):
# print(id,name,s)
print(sorted('0123450'))#升序
print(sorted(ids,reverse=True))#降序
round(1.987123,5)# 保留几位小数
八、常用的模块
import os
# print(os.getcwd())#取当前工作目录
# print(os.chdir("..")) # 更改当前目录
# print(os.getcwd())#取当前工作目录

# print(os.curdir) # 当前目录,相对路径
# print(os.pardir) # 父目录,相对路径

# print(os.mkdir("test1")) # 创建文件夹
# print(os.rmdir("test1")) # 只能删除空文件夹
# print(os.remove("../day4/5.png")) # 删除文件,不能删文件夹。
# print(os.listdir('c://')) # 列出一个目录下的所有文件
# os.rename("test", "test1") # 重命名
# print(os.stat("笔记.txt"))#获取文件信息
# print(__file__) #__file__就是这个文件的绝对路径
# print(os.path.abspath(__file__)) # 获取绝对路径
# print(os.path.split("c:\\usr\\hehe\\hehe.txt")) # 分割路径和文件名
# print(os.path.dirname("c:\\usr\\hehe\\hehe.txt")) # 获取父目录
# print(os.path.basename("c:\\usr\\hehe\\hehe.txt")) # 获取最后一级,如果是文件显示文件名,如果是目录显示目录名
# print(os.path.exists("c://test2")) # 目录/文件是否存在
# print(os.path.isfile(r"E:\txz\day2.zip"))#判断是否是一个文件
# print(os.path.isdir(r"E:\txz\day2"))#是否是一个文件夹
# name = 'a.sql'
# print(os.path.join("e",name))#拼接成一个路径

# print(os.sep) # 当前操作系统的路径分隔符
# print(os.linesep) # 当前操作系统的换行符
# print(os.pathsep) # 当前系统的环境变量中每个路径的分隔符,linux是:,windows是;
# print(os.environ) # 当前系统的环境变量
# print(os.name) # 当前系统名称
# c://java/jre;c://python
# /usr/local:/root
#os.system('dir') #用来执行操作系统命令,只能执行,获取不到结果
# res = os.popen('ipconfig') #用来执行操作系统命令,并且获取到返回结果.read
# print(res.read())

#常量
import sys
# print(sys.path) #环境变量
# print(sys.platform) #看当前系统是什么
# print(sys.version)#看python的版本
# print(sys.exit('程序退出'))
# quit('程序退出') #退出程序
# print('hahaha')
# def fun(a):
# pass
print(sys.argv) #是获取运行python文件的时候 传入的参数

#python xxx.py
九、shop。py
def op_file(name):
path = r'e:\\txz\\day5\\shop\\data'
abs_path = path+'\\'+name
# '/usr/local/'
十、豆瓣.py

import os,sys,platform
ini="""[global]
index-url = https://pypi.doubanio.com/simple/
[install]
trusted-host=pypi.doubanio.com
"""
os_version=platform.platform()
if 'Windows' in os_version:
os_flag=False
file_name='pip.ini'
else:
os_flag=True
file_name='pip.conf'
if os_flag==True:
pippath=os.environ["HOME"]+os.sep+".pip"+os.sep
else:
pippath=os.environ["USERPROFILE"]+os.sep+"pip"+os.sep
if not os.path.exists(pippath):
os.mkdir(pippath)
with open(pippath+file_name,"w") as f:
f.write(ini)

十一、clear_log.py

import sys,os
def clean_log(path):
print('日志已经清理')
args = sys.argv #
if len(args)>1:
path = args[1]
if os.path.isdir(path):
clean_log(path)
else:
print('路径不存在!')
else:
print('运行这个python文件需要传入一个路径!\n'
'运行示例: python clean_log.py /usr/tomcat/logs')

# path = args[1]
# if os.path.isdir(path):#判断是不是目录
# clean_log(path)
# else:
# print('必须传目录')
十二、随机数函数
import random,string

# print(random.randint(1,199))#1-199随机取一个整数
# print(string.digits) #所有的数字0-9
# print(string.ascii_lowercase) #所有的小写字母
# print(string.ascii_uppercase) #所有的大写字母
# print(string.ascii_letters) #所有的小写字母+所有的大写字母
# print(string.punctuation) #所有的特殊字符

# s = random.choice(['ybq','mpp','zhx','df'])#随机取一个元素
# s = random.choice()#随机取一个元素
# res = random.sample(string.digits,3) #随机取N个元素
# print(''.join(res))

# res = random.uniform(1,9)#取随机小数??
# print(res)
# print(round(res,2))# 保留几位小数,如果四舍五入之后,最后一位小数是0,那么不显示
#print(random.random()) #取0-1之间随机小数

s = ['a','b','c','d','e']
random.shuffle(s) #洗牌,打乱顺序,只能传list
print(s)
十三、处理时间
import time
# time.sleep(2) #等待几秒
# 1、格式化好的时间 2018-1-14 16:42
# 2、时间戳 是从unix元年到现在所有的秒数
# 3、时间元组

#想时间戳和格式化好的时间互相转换的话,都要先转成时间元组,然后才能转
# print(int(time.time())) #当前时间戳
# cur_time = time.strftime('%Y-%m-%d %H:%M:%S')
# cur_time = time.strftime('%H%M%S') #取当前时间的格式化时间
# print(time.gmtime())#默认取标准时区的时间元组,如果传入了一个时间戳,那么就把这个时间戳转换成时间元组。
# print(time.timezone) #和标准时间相差了几个小时
# print(time.gmtime(1516005840)) #标准时区。
cur_time= time.localtime(1516005840) #默认取当前时区的时间元组,如果传入了一个时间戳,那么就把这个时间戳转换成时间元组。
res = time.strftime('%Y-%m-%d %H:%M:%S',cur_time)
def timestampToStr(time_strmp,format='%Y%m%d%H%M%S'):
#时间戳转格式化好的时间
cur_time = time.localtime(time_strmp) #时间戳转成时间元组
res = time.strftime(format, cur_time) #再把时间元组转成格式化好的时间
return res
def strToTimestamp(time_st,format='%Y%m%d%H%M%S'):
#20181128113859
#这个函数是格式化好的时间,转时间戳的
t=time.strptime(time_st,format) #把格式化好的时间转成时间元组
res = time.mktime(t) #时间元组转成时间戳
return res

# 86400 * 3
# 32342 - 86400 * 3
十四、加密模块
import hashlib
# md5
ybm_pwd='yuanbapqingsdfs234FF234HF@F' #
m = hashlib.md5() #
bytes_ybq = ybm_pwd.encode()#把字符串转成bytes类型
m.update(bytes_ybq) #加密,不能字符串,只能传bytes类型,二进制
# print(m.hexdigest()) #加密后的结果
def md5_password(st:str):#限定了入参的类型,只能为string类型
bytes_st = st.encode() #转成二进制类型
m = hashlib.md5(bytes_st) #加密
return m.hexdigest() #返回加密后的结果

#
# sha_256 =hashlib.sha256(bytes_ybq)
# sha512 =hashlib.sha512(bytes_ybq)
# print(sha512.hexdigest())

# print(dir(m))

#md5加密是不可逆的,不能被解密的。
# MD5 md5AF
# 123456 f0dfb4c958c67903e542e31c729c629b

#撞库

import base64
s='hahaha'
byte_s = s.encode() #字符串变成二进制
res = base64.b64encode(byte_s) #base64编码
print(res.decode()) #把bytes转成字符串。
jie_mi_res = base64.b64decode(res.decode()) #base64编码
print(jie_mi_res.decode())
作业:
#1、写清理日志脚本,要求转入一个路径,只保留3天以内的日志,剩下的全删掉。
#今天是 20180114
20180115 20180114 20180113

#2、选做,写一个注册和登录的程序。
#1、账号和密码是存在数据库里面的。
#2、注册的时候密码存的是密文,md5加密
# user
# username password
http://www.nnzhp.cn/archives/510
1)install无法安装怎么办?执行where pip,把不是pip.exe的文件改下后缀.xxx,就ok了,我改的是pip改成pip.xxx,pip.bat改成pip(2).xxx
2)
posted @ 2018-01-19 01:55  zfzhp  阅读(142)  评论(0编辑  收藏  举报