1.20 Python基础知识 - python常用模块-1

 

一、time和datetime

  1、time模块

    1)time.process_time()

>>> import time
>>> time.process_time()
0.171875

# 返回当前进程处理器运行时间。一般使用两处的差值计算程序花费的时间

     2)time.altzone()

>>> import time
>>> time.altzone
-32400

#函数返回格林威治西部的夏令时地区的偏移秒数。如果该地区在格林威治东部会返回负值(如西欧,包括英国)。对夏令时启用地区才能使用。

    3)time.asctime()

>>> time.asctime()
'Wed Mar 15 15:17:45 2017'

# 把struct_time对象转换为日期时间字符串。默认当前时间

    4)time.localtime()

>>> time.localtime()
time.struct_time(tm_year=2017, tm_mon=3, tm_mday=15, tm_hour=15, tm_min=24, tm_sec=8, tm_wday=2, tm_yday=74, tm_isdst=0)

# 把秒数转换为struct_time对象(本地)。默认当前时间

    5)time.gmtime()

>>> time.gmtime()
time.struct_time(tm_year=2017, tm_mon=3, tm_mday=15, tm_hour=7, tm_min=31, tm_sec=41, tm_wday=2, tm_yday=74, tm_isdst=0)


# 把秒数转换为struct_time对象(UTC)。默认当前时间

     6)time.time()

>>> time.time()
1489668843.5339007

# 返回当前时间的时间戳(1970纪元后经过的浮点秒数)。

    7)time.ctime()

>>> time.ctime()
'Thu Mar 16 21:03:08 2017'

# 把秒数转换为日期时间字符串。默认当前时间

    8)time.strftime()

 >>> time.strftime("%Y-%m-%d",time.gmtime())
 '2017-03-16'

# 把struct_time对象转换为字符串。默认当前时间

    9)time.mktime()

>>> time.mktime(time.gmtime())
1489641192.0
 
# 把struct_time对象转换为本地时间(秒)

    10)time.strptime()

>>> time.strptime("2016-11-23","%Y-%m-%d")
time.struct_time(tm_year=2016, tm_mon=11, tm_mday=23, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=328, tm_isdst=-1)
# 把字符串转换为struct_time对象(本地)

 

 


 

 

 

python中时间日期格式化符号:
%y 两位数的年份表示(00-99%Y 四位数的年份表示(000-9999%m 月份(01-12%d 月内中的一天(0-31%H 24小时制小时数(0-23%I 12小时制小时数(01-12%M 分钟数(00=59%S 秒(00-59%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身

 

  2、datetime

    datetime模块包括两个常量:datetime.MINYEAR和datetime.MAXYEAR,表示最小年份和最大年份,分别是1和9999

    datetime模块包含:

      • 表示日期对象的date对象
      • 表示时间的time对象
      • 表示日期和时间的datetime对象
      • timedelta对象表示日期或时间的差值,可用于日期或时间的运算
      • tzinfo对象和timezone对象表示时区信息

      1)datetime对象

      

import time
import datetime

# 获得datetime对象(本地当前时间)
print(datetime.datetime.today())

# 获得datetime对象(当前时间,可指定时区)
print(datetime.datetime.now(tz=None))

# 获得datetime对象(UTC当前时间)
print(datetime.datetime.utcnow())

# 获得datetime对象(指定时间戳,可指定时区)
print(datetime.datetime.fromtimestamp(time.time()))

      2)timedelta对象

 

import datetime

td1 = datetime.timedelta(hours=2)
td2 = datetime.timedelta(hours=3)

# 时间差相加
print(td1+td2)

# 时间差相减
print(td2-td1)

# 返回时间差
print(td1*10)

# 比较,返回布尔值
print(td1<td2)

 

 

 

     

 

二、random

  1、random.random()

>>> random.random()
0.7813343339917366

# 随机小数

  2、random.randint()

>>> random.randint(1,5)
2

# 在指定范围内整形数值随机取值,取值范围1≤x≤5。

  3、random.randrange()

>>> random.randrange(1,5)
4

# 在指定范围内进行整形数值随机取值,取值范围1≤x<5

  4、random.sample()

>>> random.sample(range(100),10)
[59, 56, 20, 7, 15, 83, 37, 60, 62, 4]

# 在指定的数组中取值相应数量的数值列表

 

  随机验证码:

import random

checkcode = ''
for i in range(4):
    current = random.randrange(0,4)
    if current != i:
        temp = chr(random.randint(65,90))
    else:
        temp = random.randint(0,9)
    checkcode += str(temp)

print(checkcode)

# 输出结果

R5P0

 

 

三、string

 

>>> string.ascii_letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

 

>>> string.digits
'0123456789'

 

>>> string.punctuation
'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'

 

>>> string.printable
'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \t\n\r\x0b\x0c'

 

  随机验证码:

>>> import random
>>> import strind

>>> str_source = string.ascii_letters + string.digits
>>> ''.join(random.sample(str_source,6))
'Alvf8J'

 

四、os

os.getcwd()
# 获取当前工作目录,即当前python脚本工作的目录路径

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.sep    
# 输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"

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

os.pathsep   
# 输出用于分割文件路径的字符串

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

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

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)  
# 如果path存在,返回True;如果path不存在,返回False

os.path.isabs(path) 
# 如果path是绝对路径,返回True

os.path.isfile(path) 
# 如果path是一个存在的文件,返回True。否则返回False

os.path.isdir(path) 
# 如果path是一个存在的目录,则返回True。否则返回False

os.path.join(path1[, path2[, ...]]) 
# 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略

os.path.getatime(path)  
# 返回path所指向的文件或者目录的最后存取时间

os.path.getmtime(path) 
# 返回path所指向的文件或者目录的最后修改时间

 

五、sys

sys.argv         
#  命令行参数List,第一个元素是程序本身路径

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]

 

六、shutil

  文件和目录复制、重命名和移动

  1、shutil.copyfileobj()

import shutil

f1 = open('info.txt')
f2 = open('info.txt_bak','w')

shutil.copyfileobj(f1,f2)

# 复制一份文件对象f1,命名为文件对象f2

  2、shutil.copy()

shutil.copy('info.txt','info.txt_new')

# 拷贝文件src到dst,如果dst为目录,则拷贝到dst目录下

  3、shutil.copyfile()

  4、shutil.copymode()

  5、shutil.copystat()

  6、shutil.copy2()

shutil.copy2(src,dst)

# 拷贝文件src到dst,如果dst为目录,则拷贝到dst目录下

 

  7、shutil.ignore_patterns()

  8、shutil.copytree()

shutil.copytree(src,dst,symlinks=False,ignore=None)

# 拷贝目录树src到dst

 

  9、shutil.rmtree()

  10、shutil.move()

shutil.move(src,dst)

# 将文件/目录src移动到dst

  11、shutil.disk_usage()

shutil.disk_usage(r'c:/')

# 输出结果,返回指定path上的磁盘的空间使用情况(总数,已用,可用)
usage(total=107651411968, used=76381868032, free=31269543936)

  

  文件压缩和解压缩

  python支持常用压缩格式(.tar、.tarz和zip)文件的压缩和解压缩功能

  使用shutil模块的make_archive和unpack_archive等函数,可以实现文件的压缩和解压缩功能。shutil模块实现高级别的操作,依赖于zipfile和tarfile模块模块。

>>>  shutil.get_archive_formats()

# 返回函数支持的压缩格式
[('bztar', "bzip2'ed tar-file"), ('gztar', "gzip'ed tar-file"), ('tar', 'uncompressed tar file'), ('xztar', "xz'ed tar-file"), ('zip', 'ZIP file')]

>>>  shutil.get_unpack_formats()

# 返回函数支持的解压缩格式
[('bztar', ['.tar.bz2', '.tbz2'], "bzip2'ed tar-file"), ('gztar', ['.tar.gz', '.tgz'], "gzip'ed tar-file"), ('tar', ['.tar'], 'uncompressed tar file'), ('xztar', ['.tar.xz', '.txz'], "xz'ed tar-file"), ('zip', ['.zip'], 'ZIP file')]

 

  12、shutil.make_archive()

shutil.make_archive(base_name, format, root_dir=None, base_dir=None, verbose=0,dry_run=0, owner=None, group=None, logger=None)

# base_name:目标文件的路径,不包括文件后缀
# format:是文件格式,‘zip’,‘tar’,‘bztar’或‘gztar’
# root_dir:是压缩文件的根目录
# base_dir:是压缩文件的起始目录,默认为当前目录

# 示例代码:
>>> import shutil

>>> shutil.make_archive(r'E:\office\tomcat',format='zip',root_dir=r'F:\SoftWare')
'E:\\office\\tomcat.zip'

  13、shutil.unpack_archive()

shutil.unpack_archive(filename=,extract_dir=None,format=None)

# filename是压缩文件的名称
# extract_dir是解压缩到的目录,默认为当前目录
# format是压缩文件的格式,如果没有指定,则使用file_name的扩展名

# 示例代码:
>>> shutil.unpack_archive(r'E:\office\tomcat.zip',r'F:\111')
>>> import os
>>> os.listdir(r'F:\111')
['dxyy.doc', 'll_com_Advaned.pdf', 'll_com_Basic.pdf', 'll_com_Web.pdf', 'Nessus-6.6.2-x64.msi']

 

七、json 和 pickle对象系列化

  json

  json 模块提供了一种很简单的方式来编码和解码JSON数据。 其中两个主要的函数是 json.dumps() 和 json.loads() , 要比其他序列化函数库如pickle的接口少得多。 下面演示如何将一个Python数据结构转换为JSON:

import json

data = {
'name' : 'ACME',
'shares' : 100,
'price' : 542.23
}

json_str = json.dumps(data)

 

  下面演示如何将一个JSON编码的字符串转换回一个Python数据结构:

data = json.loads(json_str)

  如果你要处理的是文件而不是字符串,你可以使用 json.dump() 和 json.load() 来编码和解码JSON数据。例如:

# Writing JSON data
with open('data.json', 'w') as f:
    json.dump(data, f)

# Reading data back
with open('data.json', 'r') as f:
    data = json.load(f)

  JSON编码支持的基本数据类型为 None , bool , int , float 和 str , 以及包含这些类型数据的lists,tuples和dictionaries。 对于dictionaries,keys需要是字符串类型(字典中任何非字符串类型的key在编码时会先转换为字符串)。 为了遵循JSON规范,你应该只编码Python的lists和dictionaries。

 

  pickle

  使用 pickle 模块。为了将一个对象保存到一个文件中,可以这样做:

import pickle

data = ... # Some Python object
f = open('somefile', 'wb')
pickle.dump(data, f)

 

  为了将一个对象转储为一个字符串,可以使用 pickle.dumps() :

  s = pickle.dumps(data)
  为了从字节流中恢复一个对象,使用 picle.load() 或 pickle.loads() 函数。比如:

# Restore from a file
f = open('somefile', 'rb')
data = pickle.load(f)

# Restore from a string
data = pickle.loads(s)

 

  对于大多数应用程序来讲,dump() 和 load() 函数的使用就是你有效使用 pickle 模块所需的全部了。 它可适用于绝大部分Python数据类型和用户自定义类的对象实例。 如果你碰到某个库可以让你在数据库中保存/恢复Python对象或者是通过网络传输对象的话, 那么很有可能这个库的底层就使用了 pickle 模块。

  pickle 是一种Python特有的自描述的数据编码。 通过自描述,被序列化后的数据包含每个对象开始和结束以及它的类型信息。 因此,你无需担心对象记录的定义,它总是能工作。 举个例子,如果要处理多个对象,你可以这样做:

>>> import pickle
>>> f = open('somedata', 'wb')
>>> pickle.dump([1, 2, 3, 4], f)
>>> pickle.dump('hello', f)
>>> pickle.dump({'Apple', 'Pear', 'Banana'}, f)
>>> f.close()
>>> f = open('somedata', 'rb')
>>> pickle.load(f)
[1, 2, 3, 4]
>>> pickle.load(f)
'hello'
>>> pickle.load(f)
{'Apple', 'Pear', 'Banana'}

 

 

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

import shelve
 
d = shelve.open('shelve_test') #打开一个文件
 
class Test(object):
    def __init__(self,n):
        self.n = n
 
 
t = Test(123) 
t2 = Test(123334)
 
name = ["alex","rain","test"]
d["test"] = name #持久化列表
d["t1"] = t      #持久化类
d["t2"] = t2
 
d.close()

 

posted @ 2017-03-15 17:48  毛葱  阅读(206)  评论(0)    收藏  举报