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()

浙公网安备 33010602011771号