python常见库函数:time模块,DBUtils管理数据库连接池 ,ftplib模块,os模块,datetime模块,tqdm模块,控制台带颜色输出

1.time模块

Unix时间戳转与时间的转换

将时间戳转换成时间,首先需要将时间戳转换成localtime,再转换成时间的具体格式:

利用localtime()函数将时间戳转化成localtime的格式
利用strftime()函数重新格式化时间


# -*- coding:utf-8 -*-
import time
# 将时间戳转化为目标时间格式
def timestamp_datatime(value):
    format = '%Y-%m-%d %H:%M'
    # format = '%Y-%m-%d %H:%M:%S'
    # value 为时间戳值,如:1460073600.0
    value = time.localtime(value)
    dt = time.strftime(format, value)
    return dt

# 将目标时间格式转化为时间戳
def datetime_timestamp(dt):
    newTime = time.strptime(dt, '%Y-%m-%d %H:%M')
    s = time.mktime(newTime)
    return s


if __name__ == '__main__':
    s = timestamp_datatime(1460073600.0)
    print(s)  # 2016-04-08 08:00
    d = datetime_timestamp('2019-06-05 08:00')
    print(d)  # 1559692800.0

按指定的格式获取当前时间

利用time()获取当前时间,再利用localtime()函数转换为localtime,最后利用strftime()函数重新格式化时间。

#coding:UTF-8
import time

#获取当前时间
time_now = int(time.time())
#转换成localtime
time_local = time.localtime(time_now)
#转换成新的时间格式(2016-05-09 18:59:20),时间连接符号可改变
dt = time.strftime("%Y-%m-%d %H:%M:%S",time_local)

print(dt)

2.DBUtils管理数据库连接池

当使用多线程,多进程将海量数据存入数据库时,每次执行一个sql的时候都单独建立一个mysql连接,执行完就close掉,很明显这样的问题在于,频繁连接,断开mysql,这样是相当消耗系统资源的,而且增加了mysql连接失败的几率,所以万一哪个线程没有连接成功 这个线程也over了。

2.1 连接池原理


1.在程序创建连接的时候,可以从一个空闲的连接中获取,不需要重新初始化连接,提升获取连接的速度
2.关闭连接的时候,把连接放回连接池,而不是真正的关闭,所以可以减少频繁地打开和关闭连接

安装DBUtils库

pip install DBUtils

参数解释

参数详解
creator,# 使用链接数据库的模块(必须:pymssql,pymysql,cx_oralce,…)
mincached=0,# 初始化时,链接池中至少创建的空闲的链接,0表示不创建
maxcached=0,# 链接池中最多闲置的链接,0和None不限制
maxshared=0,# 链接池中最多共享的链接数量,0和None表示全部共享。PS: 无用
maxconnections=0,# 连接池允许的最大连接数,0和None表示不限制连接数
blocking=False,# 连接池中如果没有可用连接后,是否阻塞等待。True,等待;False,不等待然后报错
maxusage=None,# 一个链接最多被重复使用的次数,None表示无限制
setsession=None,# 开始会话前执行的命令列表。如:[“set datestyle to …”, “set time zone …”]
reset=True,
failures=None,
ping=1,# ping MySQL服务端,检查是否服务可用

数据库设置(数据库连接模块不一样,其参数名也不同)

如creator=pymysql:
host=‘localhost’, port=3306,db=‘mydata’,user=“root”,passwd=“123456”,charset=‘utf8’

数据库通用连接函数(连接模块视实际数据库决定)

from DBUtils import PooledDB
import pymssql

class sqlserverManager(object):
    # 构造函数,初始化连接
    def __init__(self, server, user, password, database, table):
        self.server = server
        self.user = user
        self.password = password
        self.database = database
        self.table = table
        self.conn = None
        self.cursor = None
        self.maxconnections = 15 # 设置最大连接数

    # 保存数据到SQL server
    def connect_database(self):
        try:
            self.conn = PooledDB(creator=pymssql,
                                 maxconnections=self.maxconnections,
                                 server=self.server,
                                 user=self.user,
                                 password=self.password,
                                 database=self.database,
                                 charset='utf8').connection()
            # 创建游标
            self.cursor = self.conn.cursor()
            print("sql server had connected")
        except Exception as e:
            print("the connect failed:", e)
            return None

    def dbclose(self):
        self.cursor.close()
        self.conn.close()

    def dbcommit(self):
        self.conn.commit()

    def execute(self, sql):
        print("-----插入数据-----")
        try:
            self.cursor.execute(sql)
            
        except Exception as e:
            print('\033[1;31;0m\t4---插入更新失败,msg:\033[0m', e, sql.replace("\n", ""))
            self.conn.rollback()
            return False
        return True

2.2 多线程(连接池)操作MySQL插入数据

启动线程任务

每调用一次插入函数就从连接池中取出一个链接操作,完成后关闭链接;
executemany 批量操作,减少 commit 次数,提升效率;

3.ftplib操作ftp实现上传和下载的

ftplib模块是系统默认安装的,实现文件的上传与下载

3.1 ftp登陆连接


from ftplib import FTP            #加载ftp模块
ftp=FTP()                         #设置变量
ftp.set_debuglevel(2)             #打开调试级别2,显示详细信息
ftp.connect("IP","port")          #连接的ftp sever和端口
ftp.login("user","password")      #连接的用户名,密码
print(ftp.getwelcome())            #打印出欢迎信息

bufsize=1024                      #设置的缓冲区大小
filename="filename.txt"           #需要下载的文件
file_handle=open(filename,"wb").write #以写模式在本地打开文件
ftp.retrbinaly("RETR filename.txt",file_handle,bufsize) #接收服务器上文件并写入本地文件
ftp.set_debuglevel(0)             #关闭调试模式
ftp.quit()                        #退出ftp
 
# ftp相关命令操作
ftp.cwd(pathname)                 #设置FTP当前操作的路径
ftp.dir()                         #显示目录下所有目录信息
ftp.nlst()                        #获取目录下的文件
ftp.mkd(pathname)                 #新建远程目录
ftp.pwd()                         #返回当前所在位置
ftp.rmd(dirname)                  #删除远程目录
ftp.delete(filename)              #删除远程文件
ftp.rename(fromname, toname)#将fromname修改名称为toname。
ftp.storbinary("STOR filename.txt",file_content,bufsize)  #上传目标文件
ftp.retrbinary("RETR filename.txt",file_content,bufsize)  #下载FTP文件

4.os模块

记下常用的os模块的操作指令

命令含义
os.getcwd()获取当前工作目录,即当前python脚本工作的目录路径,相当于shell的pwd
os.chdir(“dirname”)改变当前脚本工作目录;相当于shell下cd
os.curdir返回当前目录: (’.’)
os.pardir获取当前目录的父目录字符串名:(’…’)
os.makedirs(‘dirname1/dirname2’)可生成多层递归目录
os.removedirs(‘dirname1’)若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.mkdir(‘dirname’)生成单级目录;相当于shell中mkdir dirname
os.rmdir(‘dirname’)删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.listdir(‘dirname’)列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
os.remove()删除一个文件
os.rename(“oldname”,“newname”)重命名文件/目录
os.stat(‘path/filename’)获取文件/目录信息
os.name输出字符串指示当前使用平台。win->‘nt’; Linux->‘posix’
os.system(“执行的命令”)运行shell命令,直接显示,相当于直接在cmd命令中执行
os.environ获取系统环境变量
os.path.abspath(path)返回path规范化的绝对路径
os.path.split(path)将path分割成目录和文件名二元组返回
os.path.dirname(path)返回path的目录。其实就是os.path.split(path)的第一个元素
os.path.basename(path)返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
os.path.exists(path/file)如果路径或文件存在,返回True;如果path不存在,返回False
os.path.isabs(path)如果path是绝对路径,返回True
os.path.isfile(path)如果path是一个存在的文件,返回True。否则返回False
os.path.join(path1,path2,…,pathn)将多个路径组合后返回

简要样例说明:

>>> os.path.split("/Users/hqs/PycharmProjects/startMyPython3.0")             
('/Users/hqs/PycharmProjects', 'startMyPython3.0')

>>> os.path.dirname('/Users/hqs/PycharmProjects/startMyPython3.0')
'/Users/hqs/PycharmProjects'

>>>os.system("ping 127.0.0.1")
正在 Ping 127.0.0.1 具有 32 字节的数据:
来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=64
来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=64
来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=64
来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=64

127.0.0.1 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 0ms,最长 = 0ms,平均 = 0ms
    

>>>os.path.abspath(__file__) 
当前文件的绝对路径

>>>os.path.dirname(os.path.abspath(__file__))
当前文件的上一层目录的绝对路径

os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
当前文件的上上层目录的绝对路径

5 datetime模块

1.datetime.date:表示日期的类
2.datetime.datetime:表示日期时间的类
3.datetime.time:表示时间的类
4.datetime.timedelta:表示时间间隔,即两个时间点的间隔
5.datetime.tzinfo:时区的相关信息

>>>datetime.datetime.now()
当前系统时间:datetime.datetime(2019, 12, 3, 20, 31, 10, 740869)

>>>datetime.datetime.now().year/month/day
分别为:2019,12,3

>>>datetime.datetime.now().weekday()
1 表示在第几周


>>>time1 = datetime.datetime(2016, 10, 20)
>>>time2 = datetime.datetime(2015, 11, 2)
 
"""计算天数差值"""
print(time1-time2).days
 
"""计算两个日期之间相隔的秒数"""
print (time1-time2).total_seconds()

# 获取当前时间,并转化为字符串型
>>>time_new = str(datetime.datetime.now().date())  # '2019-12-4'

# 以当天的09:00为开始时间(时间戳格式)
>>>time_on = time.mktime(time.strptime(time_new+ ' 09:00', '%Y-%m-%d %H:%M'))

# 以当天的18:00为结束时间(时间戳格式)
>>>time_off = time.mktime(time.strptime(time_new+ ' 18:00', '%Y-%m-%d %H:%M'))

# 当前星期几
>>>week_now = datetime.datetime.now().weekday()

# 当前时间
>>>time_now = datetime.datetime.now()  # datetime.datetime(2019, 12, 4, 14, 57, 48, 988520)

# 当前第几小时(24小时制)
>>>hour_now = datetime.datetime.now().hour  # 14

5.tqdm模块(最优雅的进度条)

from tqdm import tqdm
使用方法:

from tqdm import tqdm
import time

if __name__ == '__main__':
    for i in tqdm(range(1000)):
        time.sleep(0.5)

6.控制台输出带颜色文字的方法

设置颜色开始 :\033[显示方式;前景色;背景色m 文本内容 \033[0m(此处为结束语)

print('\033[1;31m我以我血荐轩辕\033[0m')
print('\033[4;35m我以我血荐轩辕\033[0m')
print('\033[5;37;40m我以我血荐轩辕\033[0m')
print('\033[0;32m我以我血荐轩辕\033[0m')
print('\033[1;32m我以我血荐轩辕\033[0m')

未完待续。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值