1.常用内置函数

print(max([1,2,3,4])) #获取最大值
print(sum([1,2,3,4])) #求和
print(math.pi) #圆周率的值
print(chr(65)) #把数字转成ascii码表里对应的值
print(ord('A')) #把字母转为ascii码表里对应的数字
print(dir(bool)) #查看某个对象里有哪些方法
bool() #转bool类型,返回True或False
sorted(s,reverse=True) #排序,返回排序后的值,用list存储,reverse=True则降序排序,字母用ascii码来判断
print(sorted({'b':1,'a':2})) #传入字典,用key来排序,返回key排序后组成的list
print(list(reversed('1345dd'))) #反转,可以转成list
for n,m in zip(name,money): #zip把多个list揉到一起,变成一个二维数组,可以用这种形式来循环获取元素
print(list(zip(name,money))) #输出[('nhy', 100), ('lyl', 22), ('qlm', 45)]
eval('') #执行一些简单的python代码:运算,定义变量,传入字符串
exec("print('ss')") #执行复杂的python代码
map帮你循环调用函数,传入函数名称和存放变量的列表
filter帮你循环调用函数,如果函数返回false,则过滤掉(传入的list里过滤,返回剩下的)

#map用法示例  
def intToStr(num):
    return str(num).zfill(2)
l=range(1,34)
res=map(intToStr,l)     #循环调用    #如果调用的函数有多个参数,则给map传入多个参数,例如map(f,list1,list2)
print(list(res))

#lambda #匿名函数,功能很简单的一个函数,用完一次就释放

#lambda示例
a=lambda num:str(num).zfill(2) #冒号前面是入参,后面是返回值
print(a(1))
l=[2,34,5]
print(list(map(lambda num:str(num).zfill(2),l)))

一个小例子,输出结果如下,可以看出map和filter的区别

[False, True, False, True, False, True, False, True, False]
[2, 4, 6, 8]

print(list(map(lambda num:num%2==0,range(1,10))))
print(list(filter(lambda num:num%2==0,range(1,10))))

2.os.walk

os模块的walk函数可以用来循环遍历指定路径下的所有文件和文件夹

代码小示例,遍历e盘,并打印所有路径下的文件和文件夹

import os
for cur_path, cur_dir, cur_files in os.walk(r'e:\'):
  print('当前路径', cur_path)
  print('当前目录下有哪些文件夹:', cur_dir)
  print('当前目录下有哪些文件:', cur_files)

找出e盘下所有.mp4文件

#找出e盘下所有以.MP4结尾的的文件

def find_movie(keyWord,path='e:\\'):
    for cur_path, cur_dir, cur_files in os.walk(path):
        for file in cur_files:
            if file.endswith(keyWord):
                print('当前路径:',cur_path)
                print('文件:',file)

find_movie('mp4',r'E:\1.个人资料')

 3.md5加密

hashlib模块下的md5方法可以对传入的字符串进行md5加密,必须传入一个encode后的字符串

md5加密不可逆,无法解密,破解只能用撞库的方式,因此,md5加密时,可以采用加盐的方式来加密,多传入一个自定义的字符串,和待加密的字符串拼接在一起再进行加密,这样可以减少被撞库成功的风险

重点方法:hashlib.md5(s).hexdigest

代码示例:

def my_md5(s,salt=''):
    s_new=(str(s)+salt).encode()   #必须传入encode后的字符串
    m=hashlib.md5(s_new).hexdigest()#获取加密后的字符串
    return m
s='123456Aaaa'
print(my_md5(s,'abc'))
print(my_md5(123))

输出:

5b701ee50c069926c768466035117c76
202cb962ac59075b964b07152d234b70

4.操作数据库

Mysql:

1.获取数据库连接,使用pymysql.connect方法,传入参数要使用key=value形式,例如:

conn=pymysql.connect(host='xx.xx.xx.xx',user='xxx',password='xxx',port=3306,db='jxz',charset='utf8',autocommit='True' )

2.建立游标,相当于仓库管理员,cur=conn.cursor()

3.执行sql语句,cur.execute(sql),只是执行sql,不会返回数据

4.insert和update语句提交后需要commit ,连接数据库时加上autocommit='True'就可以不写这句:conn.commit()

4.获取提交sql后的返回数据,cur.fetchall()#获取到所有返回的数据,二维数组;cur.fetchone() #只获取一条数据,一维数组

5.操作完毕后,要关闭游标和连接,cur.close() db.close()

6.代码示例,一个操作数据库的函数,传入sql和连接信息

def my_db(sql,host, user, password, db,port=3306,charset='utf8',autocommit='True'):
    conn = pymysql.connect(host=host, user=user, password=password,db=db, port=port, charset=charset,autocommit=autocommit)
    cur = conn.cursor()  # 建立游标,相当于仓库管理员
    cur.execute(sql)
    res=cur.fetchall()
    cur.close()
    conn.close()
    return res

7.代码示例,使用fetchone循环打印select的每一个结果

import pymysql
conn=pymysql.connect(host='192.168.4.78',user='jxz',password='123456',port=3306,db='jxz',charset='utf8',autocommit='True' )
cur=conn.cursor()   #建立游标,相当于仓库管理员
sql='select * from app_myuser;'
cur.execute(sql)#只是执行sql,不会返回数据
# print(cur.fetchall())#获取到所有返回的数据,二维数组
a=cur.fetchone()
while a:   #只获取一条数据,一维数组
    print(a)
    a=cur.fetchone()
cur.close()
conn.close()

Oracle(和mysql方法大致相同):

1.获取数据库连接,使用cx_Oracle.connect方法,传入参数可以是直接一个字符串形式,例如:

db=cx_Oracle.connect("ipra/ipra@10.1.11.111:1521/nprat1")
             用户名/密码@主机ip地址:端口号/Service Name(SID)
也可以是如下形式:

# tns = cx_Oracle.makedsn('10.1.11.111', '1521', 'ORASTEST')
# db = cx_Oracle.connect('orastest', 'acca1234', tns)

ps:设置编码:os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'

2.建立游标,相当于仓库管理员,cur=conn.cursor()

3.执行sql语句,cur.execute(sql),只是执行sql,不会返回数据

4.insert和update语句提交后需要commit ,conn.commit()

4.获取提交sql后的返回数据,cur.fetchall()#获取到所有返回的数据,二维数组;cur.fetchone() #只获取一条数据,一维数组

5.操作完毕后,要关闭游标和连接,cur.close() db.close()

 

5.pip安装外部模块

1、pip install xxx
  pip问题
    1、提示没有pip命令的,
      把python的安装目录、
      安装目录下面的scripts目录加入到环境变量里面
    2、Unknown or unsupported command 'install'
      1、先执行 where pip
      2、找到不是python目录下叫pip的文件,改成其他的名字就ok了
      3、电脑里面装了多个python
  python2 python3
    1、先去python2安装目录里面把python.exe的名字改成python2.exe
    2、再把python3安装目录里面的python.exe名字改成python3.exe,然后通过以下形式的命令去安装
      python2 -m pip install xxx
      python3 -m pip install xxx

2、手动安装
  1、.whl文件
    pip install /Users/nhy/Downloads/PyMySQL-0.9.2-py2.py3-none-any.whl
  2、.tar.gz文件
    先解压
    然后在命令行里面进入到这个目录下,再执行以下命令:python setup.py install

6.练习

1.写一个函数,传入一个路径和一个关键字(关键字是文件内容),找到文件内容里面有这个关键字的文件

Python级数展开series python级数求和求pi_python

Python级数展开series python级数求和求pi_Python级数展开series_02

# 需求:
# 1、写一个函数,传入一个路径和一个关键字(关键字是文件内容),找到文件内容里面有这个关键字的文件
import os
import chardet
def find_file(keyWord,path='e:\\'):
    files=[]        #定义一个数组,来存放包含关键字的文件
    for cur_path, cur_dir, cur_files in os.walk(path):      #遍历指定的路径下的所有文件和文件夹
        for file in cur_files:
            if file.endswith('txt'):
                with open(os.path.join(cur_path,file))as fr:
                    content=fr.read()
                    if content.upper().find(keyWord.upper()) != -1:  # 文件内容是否包含关键字,忽略大小写
                        files.append('path=%s  filename=%s' % (cur_path, file))  # 包含,加入到files中
    return files

res=find_file('文件',r'D:\工作文档\个人')
print(res)

查找指定路径包含关键字的txt文件

2.写一个清理日志的程序,把三天前的日志删掉,保留今天的、昨天和前天的。文件格式:ios_2018-11-21.log

Python级数展开series python级数求和求pi_python

Python级数展开series python级数求和求pi_Python级数展开series_02

# 2、写一个清理日志的程序,把三天前的日志删掉,
# 保留今天的、昨天和前天的。
# 文件格式:ios_2018-11-21.log
import os
import time


#日志时间是否过期
def is_outTime(s):
    if s.endswith('.log'):  #传入的是一个日志文件
        log_time= s.split('.')[0].split('_')[1]
        res = time.strptime(log_time, '%Y-%m-%d')  # 格式化时间先转成时间元组
        log_timestamp = time.mktime(res)            #获取日志时间当天的时间戳
        today_date=time.strftime('%Y-%m-%d')        #获取今天格式化的时间
        res=time.strptime(today_date,'%Y-%m-%d')
        today_timstamp=time.mktime(res)         #获取今天的时间戳
        if today_timstamp-log_timestamp>=3600*24*3: #日志时间在三天内
            return True
#删除符合条件的日志文件
def delLogs(path='..'): #默认操作路径是当前文件的上层路径
    files=[]
    for cur_path,cur_dir,cur_files in os.walk(path):    #遍历传入的文件路径
        for file in cur_files:
            if is_outTime(file):
               os.remove(os.path.join(cur_path,file))   #删除文件
               files.append({"path": cur_path, "filename": file})
    return files        #返回所有已删除的文件名称和所在路径

print(delLogs())

日志清理

3.写一个注册的功能,要求数据存在数据库里面名字为空、已经存在都要校验,校验通过之后,密码要存成md5加密的。

Python级数展开series python级数求和求pi_python

Python级数展开series python级数求和求pi_Python级数展开series_02

# 需求:
# 写一个注册的功能,要求数据存在数据库里面
#         1、名字为空、已经存在都要校验
#         2、校验通过之后,密码要存成密文的。
import pymysql
import hashlib
HOST='xx.xx.xx.xx'
DB='jxz'

def my_db(sql,host,user,passwd,db,port=3306,charset='utf8',autocommit='True'):
    conn=pymysql.connect(host=host,user=user,passwd=passwd,db=db,port=port,charset=charset,autocommit=autocommit)
    cur=conn.cursor()
    cur.execute(sql)
    res=cur.fetchone()
    cur.close()
    conn.close()
    return res

def my_md5(s,salt=''):  #对密码进行md5加密
    s_new=(str(s)+salt).encode()
    m=hashlib.md5(s_new).hexdigest()
    return m

def register():
    count=0
    while count<3:
        name_input = input("欢迎注册,请输入用户名:").upper()
        password_input = input("请输入密码:")
        cpassword_input = input("请确认密码,请与上次输入密码保持一致:")
        sql = "select * from lyc_user where username='%s'" %name_input
        if name_input.strip() == "" or password_input.strip() == "" or cpassword_input.strip() == "":
            print("用户名或密码为空,请重新输入")  # 判断用户名和密码是否输入为空
            count+=1
            continue
        elif password_input != cpassword_input:
            print("两次输入的密码不一致,请重新输入")
            count+=1
            continue
        elif my_db(sql,host=HOST,user='jxz',passwd='123456',db=DB):
            print("用户名已存在,请重新输入")
            count+=1
            continue
        else:
            # 将注册结果写入数据库
            password_input=my_md5(password_input,'lyc')
            sql = "insert into lyc_user(username,password)VALUES ('%s','%s')" % (name_input, password_input)
            my_db(sql, host=HOST, user='jxz', passwd='123456', db=DB)
            print("注册成功")
            break
register()

注册

4.登录,登录的账号密码从数据库里面取,如果输入用户不存在要提示

Python级数展开series python级数求和求pi_python

Python级数展开series python级数求和求pi_Python级数展开series_02

# 需求:
# 登录的账号密码从数据库里面取,
#         如果输入用户不存在要提示

import pymysql
import hashlib
import datetime
HOST='xx.xx.xx.xx'
DB='jxz'
def my_db(sql,host,user,passwd,db,port=3306,charset='utf8',autocommit='True'):
    conn=pymysql.connect(host=host,user=user,passwd=passwd,db=db,port=port,charset=charset,autocommit=autocommit)
    cur=conn.cursor()
    cur.execute(sql)
    res=cur.fetchone()
    cur.close()
    conn.close()
    return res

def my_md5(s,salt=''):  #对密码进行md5加密
    s_new=(str(s)+salt).encode()
    m=hashlib.md5(s_new).hexdigest()
    return m

def login():
    count=0
    while count<3:
        name_input = input("欢迎登陆,请输入用户名:").upper()
        password_input = input("请输入密码:")
        user_input = (name_input,my_md5(password_input,'lyc'))
        sql="select username,password from lyc_user where username='%s'"%name_input
        res = my_db(sql,host=HOST,user='jxz',passwd='123456',db=DB)  # 查询数据库是否有这个用户,取出用户名和密码
        if name_input.strip() == "" or password_input.strip() == "":
            print("用户名或密码为空,请重新输入")  # 判断用户名和密码是否输入为空
            count+=1
            continue
        elif not res:
            print("用户不存在,请重新输入")
            count+=1
            continue
        elif user_input==res:
            print("登陆成功,欢迎%s,当前时间:%s"%(name_input,datetime.datetime.today().strftime('%Y-%m-%d %H:%M:%S')))
            break
        else:
            print("密码错误,登陆失败")
login()

登录