代码改变世界

python笔记六之模块&操作数据库&写入excel

2018-05-15 15:35  等待燃亮  阅读(593)  评论(0编辑  收藏  举报

一、模块、包

什么是模块?

模块实质上就是一个python文件,它是用来组织代码的,意思就是说把python代码写到里面,文件名就是模块的名称,test.py test就是模块名称。

什么是包?

包,package本质就是一个文件夹,和文件夹不一样的是它有一个__init__.py文件,包是从逻辑上来组织模块的,也就是说它是用来存放模块的,如果你想导入其他目录下的模块,那么这个目录必须是一个包才可以导入。

导入模块

   import module #导入模块
   from module import *  #导入该模块中的所有方法,慎用
   from module import fun as xx_fun #导入指定的方法,然后起别名
   from module import fun1,fun2,fun3 #导入模块下的多个方法
   import module,实际上就是把该模块的代码赋值给模块名,也就是module.py里面所有的代码,赋值给了module这个变量,如果是from module import fun,就是把module打开,把module里面的fun方法拿过来使用

导入模块的本质,就是把python文件拿过来从头到尾执行一次。

使用包中的模块需要在__init__.py文件中from . import xxx

模块分类:

标准库:python内置的
开源模块:第三方
自定义模块:自己写的

二、模块的安装

Python第三方模块非常多,当需要实现某个功能时先百度一下,看是否能找到相应模块
方法1: 单文件模块
直接把文件拷贝到 $python_dir/Lib

方法2: 多文件模块,带setup.py

下载模块包(压缩文件zip或tar.gz),进行解压,CMD->cd进入模块文件夹(或者直接在模块文件夹下,shift+鼠标右键,选择“在此处打开命令窗口”),执行:
python setup.py install

方法3:easy_install 方式

 先下载ez_setup.py,运行python ez_setup 进行easy_install工具的安装,之后就可以使用easy_install进行安装package(文件名称、资源的URL、.egg文件(python egg文件)来下载安装文件)
  easy_install packageName
  easy_install package.egg

方法4:pip 网络搜索自动安装

先进行pip工具的安裝:easy_install pip(pip 可以通过easy_install 安裝,而且也会装到 Scripts 文件夹下D:\Python2.7\Lib\site-packages)

安裝:pip install PackageName

pip常用命令
列出安装的packages:pip freeze
安装特定版本的package:通过使用==, >=, <=, >, <来指定一个版本号
$ pip install 'Markdown<2.0'
$ pip install 'Markdown>2.0,<2.0.3'
升级包到当前最新的版本,可以使用-U或者--upgrade:
升级包pip install -U Markdown
卸载包:pip uninstall Markdown
查询包:pip search "Markdown"

方法5:.whl文件pip 方式

下载对应模块.whl文件,在CMD->cd命令下进入到.whl文件所在目录,如果pip目录未添加到环境变量,最好把.whl文件放置到pip.exe所在目录(D:\Python2.7\Scripts\)。

安装: pip install 包名.whl

方法6:.exe文件自定义安装

下载对应版本的exe安装文件,如numpy-1.9.2-win32-superpack-python2.7.exe和mlpy-3.5.0.win32-py2.7.exe

安装:打开自动安装即可

三、常用的标准模块(os,sys,time,datetime、hashlib

1、OS模块

import os
#对操作系统的一些操作
print(os.getcwd())#取当前工作目录
os.chmod("x.py",2)#给文件/目录加权限,对Windows的下面不好使
# 1  执行
# 2 写
# 4 读
# #chmod
print(os.chdir("../day5"))#更改当前目录
print(os.getcwd())
#
print(os.makedirs("nhy/python"))#递归创建文件夹,父目录不存在时创建父目录
#makedirs 创建文件夹的时候,如果父目录不存在会自动帮你创建父目录
print(os.mkdir("zll/huangrong"))#创建文件夹  
print(os.removedirs("nhy/python"))#递归删除空目录
print(os.rmdir("test2"))#删除指定的文件夹
#只能删除空目录
os.remove("test2")#只能删除文件
os.rmdir('test2') #只能删文件夹


print(os.listdir('e:\\'))#列出一个目录下的所有文件

os.rename("test","test1")#重命名
print(os.stat("x.py"))#获取文件信息

print(os.sep)#当前操作系统的路径分隔符 #

day5+os.sep+x.py
print(os.linesep)#当前操作系统的换行符  \n  \r\n
print(os.pathsep)#当前系统的环境变量中每个路径的分隔符,linux是:,windows是;
print(os.environ)#当前系统的环境变量
print(os.name)#当前系统名称  Windows系统都是nt linux都是posix
res = os.system('ipconfig')  #执行操作系统命令的,但是获取不到结果
res = os.popen('ipconfig').read()  #可以获取到命令执行的结果
__file__ #获取到当前文件的绝对路径
print(os.path.abspath(__file__))#获取绝对路径
print(os.path.split("/usr/hehe/hehe.txt"))#分割路径和文件名

print(os.path.dirname("e:\\syz\\ly-code"))#获取父目录,获取它的上一级目录
print(os.path.basename("G:\\syz-code\\day6\\x.py"))# 运行结果:x.py;  获取最后一级,如果是文件显示文件名,如果是目录显示目录名
print(os.path.exists(r"G:\syz-code\day6"))#目录/文件是否存在
print(os.path.isabs("../day5"))#判断是否是绝对路径
print(os.path.isfile("xiaohei.py"))
# 判断是否是一个文件,1、文件要存在2、必须是一个文件
print(os.path.isdir("e:\\syz1"))#是否是一个路径,目录是否存在
size = os.path.getsize('x.py') #获取文件的大小
#不能超过2m
print(size)

print(os.path.join("root",'hehe','mysql','a.sql'))#运行结果: root\hehe\mysql\a.sql   拼接成一个路径

for abs_path,dir,file in os.walk(r'G:\syz-code\day6\logs'): #获取目录下内容  os.listdir()
   print(abs_path,dir,file)
    
#  abs_path 当前循环的绝对路径
#  dir 目录下面所有的文件夹 并保存到一个list[ ]
#  file 目录下面的所有文件 并保存到一个list []

2、sys模块

import sys
# print(sys.platform)  #判断操作系统
print(sys.path)
#python的环境变量
# sys.path.append(r'E:\syz\ly-code\day5')#将day5这个文件夹加入python的环境变量
# sys.path.insert(0,r'E:\syz\ly-code\day5')#将day5这个文件夹加入python的环境变量的第一个位置上,可加快执行效率
# print(sys.path)# 输出python的环境变量、python的安装路径,第一个字符串是脚本当前的路径;
                #  程序向sys.path添加的目录只会在此程序的生命周期之内有效,其他所有的对sys.path的动态操作也是如此。

print(sys.argv)  #用来获取命令行里面运行python文件的时候传入的参数,返回List,第一个元素是程序本身路径 

3、时间模块

import time

#1、时间戳  从unix元年到现在过了多少秒
#2、格式化好的时间

#先转成时间元组

# print(time.time())  #获取当前时间戳
# time.sleep(10)
# today = time.strftime('%Y%m%d%H%M%S')#不传入时间元组时,将当前时间的时间戳转化为格式化时间
# print(today)

print(time.gmtime()) #默认取的是标准时区的时间元组
s=time.localtime(1514198608)  #不传入时间戳时,将当前时区的时间戳转换为时间元组
print(time.strftime('%Y-%m-%d %H:%M:%S',s))#将时间元组S按照'%Y-%m-%d %H:%M:%S'的格式转换为格式化时间,若不传入s,
                                              # 则默认取当前时间元组转换为格式化时间
#时间戳转换时间元组
# 1、时间戳转成时间元组  time.localtime()
# 2、再把时间元组转成格式化的时间time.strftime()
def timestamp_to_fomat(timestamp=None,format='%Y-%m-%d %H:%M:%S'):
    #1、默认返回当前格式化好的时间
    #2、传入时间戳的话,把时间戳转换成格式化好的时间,返回
    if timestamp:
        time_tuple = time.localtime(timestamp)
        res = time.strftime(format,time_tuple)
    else:
        res = time.strftime(format)  #默认取当前时间
    return res

# 2018-4-21
# tp = time.strptime('2018-4-21','%Y-%m-%d')  #把格式化好的时间转成时间元组的
# print(time.mktime(tp))  #把时间元组转成时间戳
def strToTimestamp(str=None,format='%Y%m%d%H%M%S'):
    # 20180421165643
    #默认返回当前时间戳
    if str: #如果传了时间的话
        tp = time.strptime(str,format) #格式化好的时间,转成时间元组
        res = time.mktime(tp)#再转成时间戳
    else:
        res = time.time()  #默认取当前的时间戳
    return int(res)

import datetime
print(datetime.datetime.today()) #获取当前时间,精确到秒
print(datetime.date.today()) #精确到天
res = datetime.datetime.today()+datetime.timedelta(days=1,minutes=5,seconds=5,weeks=5)#获取1天5分钟5秒5周后的日期
print(res.strftime('%Y-%m-%d'))

运行结果:

time.struct_time(tm_year=2018, tm_mon=5, tm_mday=14, tm_hour=4, tm_min=15, tm_sec=27, tm_wday=0, tm_yday=134, tm_isdst=0)
2017-12-25 18:43:28
2018-05-14 12:15:27.381012
2018-05-14
2018-06-19

4、hashlib加密模块

import hashlib
m = hashlib.md5()
# bytes
passwd = 'NHY_*&^_1982343532'
# passwd.encode() #把字符串转成bytes类型
m.update(passwd.encode())   #不能直接对字符串加密,要先把字符串转成bytes类型
print(m.hexdigest())
#md5加密是不可逆,网上解密的方法是通过撞库实现
#撞库
# befor       after
   # nhy123  81fb61ce98e508df8dbe8da07ad9acfc

def my_md5(str):
    import hashlib
    new_str = str.encode() #把字符串转成bytes类型
    # new_str = b'%s'%str  #把字符串转成bytes类型
    m = hashlib.md5()  #实例化md5对象
    m.update(new_str)  #加密
    return m.hexdigest()  #获取结果返回

print(my_md5('joanzhang'))

运行结果:

9a50a5b071095b915b0497544f841a5f
49929b73bfff23dfc8c8422333e2ee6a

 四、操作MySQL

import pymysql
# 1、连上数据库  账号、密码 ip 端口号 数据库
#2、建立游标
#3、执行sql
#4 、获取结果
# 5、关闭游标
#6、连接关闭
coon = pymysql.connect(
    host='118.24.3.40',user='jxz',passwd='123456',
    port=3306,db='jxz',charset='utf8'
    #port必须写int类型,
    #charset这里必须写utf8
)
cur = coon.cursor() #建立游标
# cur.execute('select * from stu;')#执行sql语句
cur.execute('insert into stu (id,name,sex) VALUE (1,"牛寒阳","女");')
# delete update insert
coon.commit()  #必须得commit
res = cur.fetchall()  #获取所有返回的结果
print(res)
cur.close()#关闭游标
coon.close()#关闭连接

五、写Excel

python写入Excel 需安装xlwt模块,直接在命令行下pip安装即可

 import xlwt
        title = [
            '姓名','年龄','性别','分数'
        ]
        stus = [['mary',20,'',89.9],['mary',20,'',89.9],['mary',20,'',89.9],['mary',20,'',89.9]]
        #新建一个excel对象
        wbk = xlwt.Workbook()
        #添加一个名为'stu'的sheet页
        sheet = wbk.add_sheet('stu')
        for i in  range(len(title)):#写入表头
            sheet.write(0,i,title[i])#写入每行,第一个值是行,第二个值是列,第三个是写入的值
        row = 1 #
        for i in stus:
            col = 0#
            for j in i:
                sheet.write(row,col,j)#循环写入每行数据
                col+=1
            row+=1
        #保存数据到‘test.xls’文件中
        wbk.save('test.xls')#保存excel必须使用后缀名是.xls的,不是能是.xlsx的