04: python常用模块

Posted 不做大哥好多年

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了04: python常用模块相关的知识,希望对你有一定的参考价值。

目录:

1.1 时间模块time() 与 datetime()     返回顶部

  1、 time()模块中的重要函数

函数

描述

asctime([tuple])

将时间元组转换为字符串

localtime([secs])

将秒数转换为日期元组(转换成本国时区而不是utc时区)

mktime(tuple)

将时间元组转换为本地时间

sleep(secs)

休眠(不做任何事情)secs

strptime(string[, format])

将字符串解析为时间元组

time()

获取当前时间戳

time.gmtime()

将时间转换成utc格式的元组格式

   2、time()模块时间格式转换

            

  3、time()模块时间转换

    1. 时间戳               1970年1月1日之后的秒,     即:time.time()

    2. 格式化的字符串    2014-11-11 11:11,           即:time.strftime(\'%Y-%m-%d\')

    3. 结构化时间          元组包含了:年、日、星期等... time.struct_time    即:time.localtime()

import time
print(time.time())                              # 时间戳:1511166937.2178104
print(time.strftime(\'%Y-%m-%d\'))                 # 格式化的字符串: 2017-11-20
print(time.localtime())                         # 结构化时间(元组): (tm_year=2017, tm_mon=11...)
print(time.gmtime())                            # 将时间转换成utc格式的元组格式: (tm_year=2017, tm_mon=11...)

#1. 将结构化时间转换成时间戳: 1511167004.0
print(time.mktime(time.localtime()))

#2. 将格字符串时间转换成结构化时间 元组: (tm_year=2017, tm_mon=11...)
print(time.strptime(\'2014-11-11\', \'%Y-%m-%d\'))

#3. 结构化时间(元组) 转换成  字符串时间  :2017-11-20
print(time.strftime(\'%Y-%m-%d\', time.localtime()))  # 默认当前时间

#4. 将结构化时间(元组) 转换成英文字符串时间 : Mon Nov 20 16:51:28 2017
print(time.asctime(time.localtime()))

#5. 将时间戳转成 英文字符串时间 : Mon Nov 20 16:51:28 2017
print(time.ctime(time.time()))
time()模块时间转换

  4、ctime和asctime区别

          1)ctime传入的是以秒计时的时间戳转换成格式化时间

          2)asctime传入的是时间元组转换成格式化时间

import time
t1 = time.time()
print(t1)               #1483495728.4734166
print(time.ctime(t1))   #Wed Jan  4 10:08:48 2017
t2 = time.localtime()
print(t2)               #time.struct_time(tm_year=2017, tm_mon=1, tm_mday=4, tm_hour=10, print(time.asctime(t2)) #Wed Jan  4 10:08:48 2017
ctime和asctime区别

   5、datetime

import datetime
#1、datetime.datetime获取当前时间
print(datetime.datetime.now())
#2、获取三天后的时间
print(datetime.datetime.now()+datetime.timedelta(+3))
#3、获取三天前的时间
print(datetime.datetime.now()+datetime.timedelta(-3))
#4、获取三个小时后的时间
print(datetime.datetime.now()+datetime.timedelta(hours=3))
#5、获取三分钟以前的时间
print(datetime.datetime.now()+datetime.timedelta(minutes = -3))

import datetime
print(datetime.datetime.now())                                   #2017-08-18 11:25:52.618873
print(datetime.datetime.now().date())                            #2017-08-18
print(datetime.datetime.now().strftime("%Y-%m-%d %H-%M-%S"))    #2017-08-18 11-25-52
datetime获取时间
#1、datetime对象与str转化
# datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
\'2018-03-09 10:08:50\'

# datetime.datetime.strptime(\'2016-02-22\',"%Y-%m-%d")
datetime.datetime(2016, 2, 22, 0, 0)

#2、datetime对象转时间元组
# datetime.datetime.now().timetuple()
time.struct_time(tm_year=2018, tm_mon=3, tm_mday=9,

#3、时间戳转换成datetime对象
# datetime.datetime.fromtimestamp(1520561646.8906238)
datetime.datetime(2018, 3, 9, 10, 14, 6, 890624)
datetime时间转换

  6、本地时间与utc时间相互转换

# -*- coding: utf-8 -*-

import time
import datetime

def utc2local(utc_st):
    \'\'\' 作用:将UTC时间装换成本地时间
    :param utc_st: 传入的是utc时间(datatime对象)
    :return:  返回的是本地时间 datetime 对象
    \'\'\'
    now_stamp = time.time()
    local_time = datetime.datetime.fromtimestamp(now_stamp)
    utc_time = datetime.datetime.utcfromtimestamp(now_stamp)
    offset = local_time - utc_time
    local_st = utc_st + offset
    return local_st

def local2utc(local_st):
    \'\'\' 作用:将本地时间转换成UTC时间
    :param local_st: 传入的是本地时间(datatime对象)
    :return: 返回的是utc时间 datetime 对象
    \'\'\'
    time_struct = time.mktime(local_st.timetuple())
    utc_st = datetime.datetime.utcfromtimestamp(time_struct)
    return utc_st

utc_time = datetime.datetime.utcfromtimestamp(time.time())
# utc_time = datetime.datetime(2018, 5, 6, 5, 57, 9, 511870)        # 比北京时间晚了8个小时
local_time = datetime.datetime.now()
# local_time = datetime.datetime(2018, 5, 6, 13, 59, 27, 120771)    # 北京本地时间

utc_to_local = utc2local(utc_time)
local_to_utc = local2utc(local_time)
print utc_to_local       # 2018-05-06 14:02:30.650270     已经转换成了北京本地时间
print local_to_utc       # 2018-05-06 06:02:30            转换成北京当地时间
本地时间与utc时间相互转换
from django.utils import timezone
from datetime import datetime

utc_time = timezone.now()
local_time = datetime.now()

#1、utc时间装换成本地时间
utc_to_local = timezone.localtime(timezone.now())

#2、本地时间装utc时间
local_to_utc = timezone.make_aware(datetime.now(), timezone.get_current_timezone())
django的timezone时间与本地时间转换

  7、Python计算两个日期之间天数

import datetime
d1 = datetime.datetime(2018,10,31)   # 第一个日期
d2 = datetime.datetime(2019,2,2)     # 第二个日期
interval = d2 - d1                   # 两日期差距
print(interval.days)                 # 具体的天数
Python计算两个日期之间天数

1.2 random()模块     返回顶部

   1、random()模块常用函数

函数

描述

random()

返回0<n<=1

getrandbits(n)

以长整形形式返回n个随机位

uniform(a, b)

返回随机实数n,其中a<=n<=b

randrange([start], stop, [step])

返回range(start,stop,step)中的随机数

choice(seq)

从序列seq中返回随意元素

shuffle(seq[, random])

原地指定序列seq(将有序列表变成无序的:洗牌)

sample(sea, n)

从序列seq中选择n个随机且独立的元素

    2、random常用函数举例

import random
#⒈ 随机整数:
print(random.randint(0,99))             # 随机选取0-99之间的整数
print(random.randrange(0, 101, 2))      # 随机选取0-101之间的偶数

#⒉ 随机浮点数:
print(random.random())                   # 0.972654134347
print(random.uniform(1, 10))             # 4.14709813772

#⒊ 随机字符:
print(random.choice(\'abcdefg\'))         # c
print(random.sample(\'abcdefghij\',3))    # [\'j\', \'f\', \'c\']
random()函数使用举例

  3、使用random实现四位验证码

import random
checkcode = \'\'
for i in range(4):
    current = random.randrange(0,4)
    if current == i:
        tmp = chr(random.randint(65,90))    #65,90表示所有大写字母
    else:
        tmp = random.randint(0,9)
    checkcode += str(tmp)
print(checkcode)                            #运行结果: 851K
使用for循环实现
import random
import string
str_source = string.ascii_letters + string.digits
str_list = random.sample(str_source,7)

#[\'i\', \'Q\', \'U\', \'u\', \'A\', \'0\', \'9\']
print(str_list)
str_final = \'\'.join(str_list)

#iQUuA09
print(str_final)            # 运行结果: jkFU2Ed
使用random.sample实现
>>> string.digits
\'0123456789\'
>>> string.ascii_lowercase
\'abcdefghijklmnopqrstuvwxyz\'

1.3 os模块     返回顶部

import os
#1 当前工作目录,即当前python脚本工作的目录路径
print(os.getcwd())    # C:\\Users\\admin\\PycharmProjects\\s14\\Day5\\test4

#2 当前脚本工作目录;相当于shell下cd
os.chdir("C:\\\\Users\\\\admin\\\\PycharmProjects\\\\s14")
os.chdir(r"C:\\Users\\admin\\PycharmProjects\\s14")
print(os.getcwd())    # C:\\Users\\admin\\PycharmProjects\\s14

#3 返回当前目录: (\'.\')
print(os.curdir)        # (\'.\')

#4 获取当前目录的父目录字符串名:(\'..\')
print(os.pardir)        # (\'..\')

#5 可生成多层递归目录
os.makedirs(r\'C:\\aaa\\bbb\')         # 可以发现在C盘创建了文件夹/aaa/bbb

#6 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.removedirs(r\'C:\\aaa\\bbb\')    # 删除所有空目录

#7 生成单级目录;相当于shell中mkdir dirname
os.mkdir(r\'C:\\bbb\')        # 仅能创建单个目录

#8 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.rmdir(r\'C:\\aaa\')        # 仅删除指定的一个空目录

#9 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
print(os.listdir(r"C:\\Users\\admin\\PycharmProjects\\s14"))

#10 删除一个文件
os.remove(r\'C:\\bbb\\test.txt\')        # 指定删除test.txt文件

#11 重命名文件/目录
os.rename(r\'C:\\bbb\\test.txt\',r\'C:\\bbb\\test00.bak\')

#12 获取文件/目录信息
print(os.stat(r\'C:\\bbb\\test.txt\'))

#13 输出操作系统特定的路径分隔符,win下为"\\\\",Linux下为"/"
print(os.sep)                # \\

#14 输出当前平台使用的行终止符,win下为"\\r\\n",Linux下为"\\n"
print(os.linesep)

#15 输出用于分割文件路径的字符串
print(os.pathsep)                # ;  (分号)

#16 输出字符串指示当前使用平台。win->\'nt\'; Linux->\'posix\'
print(os.name)                # nt

#17 运行shell命令,直接显示
os.system("bash command")

#18 获取系统环境变量
print(os.environ)                # environ({\'OS\': \'Windows_NT\', \'PUBLIC\': ………….

#19 返回path规范化的绝对路径
print(os.path.abspath(r\'C:/bbb/test.txt\'))    # C:\\bbb\\test.txt

#20 将path分割成目录和文件名二元组返回
print(os.path.split(r\'C:/bbb/ccc\'))    # (\'C:/bbb\', \'ccc\')

#21 返回path的目录。其实就是os.path.split(path)的第一个元素
print(os.path.dirname(r\'C:/bbb/ccc\'))    # C:/bbb

#22 返回path最后的文件名。如何path以/或\\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
print(os.path.basename(r\'C:/bbb/ccc/ddd\'))    # ddd

#23 如果path存在,返回True;如果path不存在,返回False
print(os.path.exists(r\'C:/bbb/ccc/\'))    # True

#24 如果path是绝对路径,返回True        # True
print(os.path.isabs(r"C:\\Users\\admin\\PycharmProjects\\s14\\Day5\\test4"))

#25 如果path是一个存在的文件,返回True。否则返回False
print(os.path.isfile(r\'C:/bbb/ccc/test2.txt\'))        # True

#26 如果path是一个存在的目录,则返回True。否则返回False
print(os.path.isdir(r\'C:/bbb/ccc\'))            # True

#28 返回path所指向的文件或者目录的最后存取时间
print(os.path.getatime(r\'C:/bbb/ccc/test2.txt\'))        # 1483509254.9647143

#29 返回path所指向的文件或者目录的最后修改时间
print(os.path.getmtime(r\'C:/bbb/ccc/test2.txt\'))        # 1483510068.746478

#30 无论linux还是windows,拼接出文件路径
put_filename = \'%s%s%s\'%(self.home,os. path.sep, filename)
#C:\\Users\\admin\\PycharmProjects\\s14\\day10select版FTP\\home
os模块常用方法
import os

os.makedirs(\'C:/aaa/bbb/ccc/ddd\',exist_ok=True)         # exist_ok=True:如果存在当前文件夹不报错
path = os.path.join(\'C:/aaa/bbb/ccc\',\'ddd\',)
f_path = os.path.join(path,\'file.txt\')

with open(f_path,\'w\',encoding=\'utf8\') as f:
    f.write(\'are you ok!!\')
os命令创建文件夹: C:/aaa/bbb/ccc/ddd并写入文件file1.txt
import os,sys
print(os.path.dirname( os.path.dirname( os.path.abspath(__file__) ) ))
BASE_DIR = os.path.dirname( os.path.dirname( os.path.abspath(__file__) ) )
sys.path.append(BASE_DIR)

# 代码解释:
# 要想导入其他目录中的函数,其实就是将其他目录的绝对路径动态的添加到pyhton的环境变量中,这样python解释器就能够在运行时找到导入的模块而不报错:
# 然后调用sys模块sys.path.append(BASE_DIR)就可以将这条路径添加到python环境变量中
将其他目录的绝对路径动态的添加到pyhton的环境变量中

  1、os.popen获取脚本执行结果

data = {\'name\':\'aaa\'}
import json
print json.dumps(data)
data.py
#! /usr/bin/env python
# -*- coding: utf-8 -*-
import os,json

ret = os.popen(\'python data.py\')
data = ret.read().strip()
ret.close()
data = json.loads(data)
print data  # {\'name\':\'aaa\'}
get_data.py

1.4 sys模块     返回顶部

  1、 sys基本方法

    sys.argv          返回执行脚本传入的参数

    sys.exit(n)                       退出程序,正常退出时exit(0)

    sys.version                           获取Python解释程序的版本信息

    sys.maxint                            最大的Int值

    sys.path                                返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值

    sys.platform                           返回操作系统平台名称

    sys.stdout.write(\'please:\')

    val = sys.stdin.readline()[:-1]

  2、使用sys返回运行脚本参数

import sys
# C:\\Users\\tom\\PycharmProjects\\s14Review\\day01>  python test01.py 1 2 3
print(sys.argv)         # 打印所有参数                 [\'test01.py\', \'1\', \'2\', \'3\']
print(sys.argv[1:])     # 获取索引 1 往后的所有参数     [\'1\', \'2\', \'3\']
sys.argv返回执行脚本传入的参数

1.5 tarfile用于将文件夹归档成 .tar的文件     返回顶部

import tarfile
# 将文件夹Day1和Day2归档成your.rar并且在归档文件夹中Day1和Day2分别变成bbs2.zip和ccdb.zip的压缩文件
tar = tarfile.open(\'your.tar\',\'w\')
tar.add(r\'C:\\Users\\admin\\PycharmProjects\\s14\\Day1\', arcname=\'bbs2.zip\')
tar.add(r\'C:\\Users\\admin\\PycharmProjects\\s14\\Day2\', arcname=\'cmdb.zip\')
tar.close()

# 将刚刚的归档文件your.tar进行解压解压的内容是bbs2.zip和cmdb.zip压缩文件而不是变成原有的文件夹
tar = tarfile.open(\'your.tar\',\'r\')
tar.extractall()  # 可设置解压地址
tar.close()
tarfile使用

1.6 shutil 创建压缩包,复制,移动文件     返回顶部

  注 :   shutil 对压缩包的处理是调用 ZipFile 和 TarFile 两个模块来进行的
    作用: shutil 创建压缩包并返回文件路径(如:zip、tar),并且可以复制文件,移动文件

import shutil
#1 copyfileobj()  将文件test11.txt中的内容复制到test22.txt文件中
f1 = open("test11.txt",encoding="utf-8")
f2 = open("test22.txt",\'w\',encoding="utf-8")
shutil.copyfileobj(f1,f2)

#2  copyfile()  直接指定文件名就可进行复制
shutil.copyfile("test11.txt",\'test33.txt\')

#3  shutil.copymode(src, dst) 仅拷贝权限。内容、组、用户均不变

#4  shutil.copystat(src, dst)  拷贝状态的信息,包括:mode bits, atime, mtime, flags
shutil.copystat(\'test11.txt\',\'test44.txt\')

#5  递归的去拷贝目录中的所有目录和文件,这里的test_dir是一个文件夹,包含多级文件夹和文件
shutil.copytree("test_dir","new_test_dir")

#6  递归的去删除目录中的所有目录和文件,这里的test_dir是一个文件夹,包含多级文件夹和文件
shutil.rmtree("test_dir")

#7 shutil.move(src, dst)  递归的去移动文件
shutil.move(\'os_test.py\',r\'C:\\\\\')

#8  shutil.make_archive(base_name, format,...) 创建压缩包并返回文件路径,例如:zip、tar
\'\'\'
   1. base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径,
        如:www                        =>保存至当前路径
        如:/Users/wupeiqi/www =>保存至/Users/wupeiqi/
   2.  format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar”
   3. root_dir: 要压缩的文件夹路径(默认当前目录)
   4. owner: 用户,默认当前用户
   5. group: 组,默认当前组
   6. logger: 用于记录日志,通常是logging.Logger对象

\'\'\'
#将C:\\Users\\admin\\PycharmProjects\\s14\\Day4 的文件夹压缩成 testaa.zip
shutil.make_archive("testaa","zip",r"C:\\Users\\admin\\PycharmProjects\\s14\\Day4")
shutil使用

1.7 zipfile将文件或文件夹进行压缩     返回顶部

import zipfile
#将文件main.py和test11.py压缩成day5.zip的压缩文件
z = zipfile.ZipFile(\'day5.zip\', \'w\')
z.write(\'main.py\')
z.write("test11.txt")
z.close()

#将刚刚压缩的day5.zip文件进行解压成原文件
z = zipfile.ZipFile(\'day5.zip\', \'r\')
z.extractall()
z.close()
zipfile使用

1.8 shelve 模块     返回顶部

  作用:shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式