Fork me on GitHub

包与常用模块:time,sys。

一  包的初识:

首先包在pycharm中的表现形式为packa文件夹:在python3种那么我们创建一个packa时会发现下边会自动跟一个—init—.py文件

包的定义:包就是一个包含有——init——.py文件的文件夹,所以其实我们创建包的目的就是为了用文件夹将文件/模块组织起来。

注意:

       1)在python3种,即使包下面没有——init——.py文件,import包仍然不会报错,而且还可以自己创建该文件,在python2种一定要有这个个文件。

       2)创建包的目的不是为了运行,而是供被导入使用,包只是一种形式而已,它的本质还是一种模快。

2  包的使用:

在使用包之前我们先说下为什么要用包,包的本质就是一个文件夹,准确来说是一个自带有——init——.py文件的文件夹,那么随着我们功能越来越多,我们不可能将所有的功能都放到一个文件里面去,所以我们创建文件夹来将文件组织起来,来提高程序的结构性,更便于维护。

导入注意事项:

      1)对于包的导入也可以用import和from。。。import。。。但是包的导入时凡是导入时带点的点的左边必须是一个包,这是导入包特有的语法,而且import后面必须跟一个明确的名字不能带点(...)。

      2)导入后使用的过程就没有这种规定了。

      3)对于包内部模块的直接导入应该使用from。。。import。。。

      4)import导入文件时,产生名称空间中的名字来源于import包,产生的名称空间的名字来源于文件,即包下的——init——.py文件,导入包的本质就是导入该文件。

 

from aaa import bbb#在同一个包下相互调用,
print(bbb.func2)
res=bbb.func2
res()
print(bbb.x)
import aaa
from aaa import ccc#调用ccc实际上就是调用ccc下的——init--
res=aaa.ccc.f
res1=aaa.ccc.ccc
res()
print(res)
print(res1)
print(ccc)#我们可以看出输出的结果为ccc下的__init__.py文件的路径,也就是说我们调用ccc其实就是在调用ccc下的init

from aaa import bbb
bbb.func2()
print(bbb.x)
执行文件
文件bbb

def func2():
    print('from aaa.bbb.func2')


x=1

文件init

# import bbb


def func():
    print('aaa.init')

 

二:模块

 

1  time与datetime模块

2  python中三种时间表示:

         1)时间戳(timestamp):通常来说,时间戳表示的是1970年1月1日00:00:00开始计算的时间偏移量。我们运行type(time.time())返回的是float类型。  2)格式化的时间字符串(format string)

         3)结构化的时间(struct—time):元素共含有九个元素:(年,月 ,日 ,时, 分, 秒,一年中的第几周,一年中的第几天,夏令时)

 

3  格式化字符串时间格式:

格式化字符串时间格式

4 三种格式之间的转换:

那么我们为什么要那么复杂的将时间分格式呢,因为计算机只能识别时间戳,而程序员只能识别结构化的时间或格式化的字符串时间。

那么根据上图一些转换关系:

1 #--------------------------按图1转换时间
 2 # localtime([secs])
 3 # 将一个时间戳转换为当前时区的struct_time。secs参数未提供,则以当前时间为准。
 4 time.localtime()
 5 time.localtime(1473525444.037215)
 6 
 7 # gmtime([secs]) 和localtime()方法类似,gmtime()方法是将一个时间戳转换为UTC时区(0时区)的struct_time。
 8 
 9 # mktime(t) : 将一个struct_time转化为时间戳。
10 print(time.mktime(time.localtime()))#1473525749.0
11 
12 
13 # strftime(format[, t]) : 把一个代表时间的元组或者struct_time(如由time.localtime()和
14 # time.gmtime()返回)转化为格式化的时间字符串。如果t未指定,将传入time.localtime()。如果元组中任何一个
15 # 元素越界,ValueError的错误将会被抛出。
16 print(time.strftime("%Y-%m-%d %X", time.localtime()))#2016-09-11 00:49:56
17 
18 # time.strptime(string[, format])
19 # 把一个格式化时间字符串转化为struct_time。实际上它和strftime()是逆操作。
20 print(time.strptime('2011-05-05 16:37:06', '%Y-%m-%d %X'))
21 #time.struct_time(tm_year=2011, tm_mon=5, tm_mday=5, tm_hour=16, tm_min=37, tm_sec=6,
22 #  tm_wday=3, tm_yday=125, tm_isdst=-1)
23 #在这个函数中,format默认为:"%a %b %d %H:%M:%S %Y"。
复制代码
时间格式转化关系

 

5  datetime模块主要的应用:

#时间加减
import datetime

# print(datetime.datetime.now()) #返回 2016-08-19 12:47:03.941925
#print(datetime.date.fromtimestamp(time.time()) )  # 时间戳直接转成日期格式 2016-08-19
# print(datetime.datetime.now() )
# print(datetime.datetime.now() + datetime.timedelta(3)) #当前时间+3天
# print(datetime.datetime.now() + datetime.timedelta(-3)) #当前时间-3天
# print(datetime.datetime.now() + datetime.timedelta(hours=3)) #当前时间+3小时
# print(datetime.datetime.now() + datetime.timedelta(minutes=30)) #当前时间+30分


#
# c_time  = datetime.datetime.now()
# print(c_time.replace(minute=3,hour=2)) #时间替换
复制代码
datetime

其实我们一般应用datetime模块更多,因为他更方便实用。

我们可以直接导入datetime模块输出我们想要的时间格式:2018-04-08 15:17:27.377304

import datetime
print(datetime.datetime.now())

 

6 random模块

random一些常用功能:

 1 import random
 2  
 3 print(random.random())#(0,1)----float    大于0且小于1之间的小数
 4  
 5 print(random.randint(1,3))  #[1,3]    大于等于1且小于等于3之间的整数
 6  
 7 print(random.randrange(1,3)) #[1,3)    大于等于1且小于3之间的整数
 8  
 9 print(random.choice([1,'23',[4,5]]))#1或者23或者[4,5]
10  
11 print(random.sample([1,'23',[4,5]],2))#列表元素任意2个组合
12  
13 print(random.uniform(1,3))#大于1小于3的小数,如1.927109612082716 
14  
15  
16 item=[1,3,5,7,9]
17 random.shuffle(item) #打乱item的顺序,相当于"洗牌"
18 print(item)

随机生成验证码:实际应用小模块。

import random
def make_code(n):
    res=''
    for i in range(n):
        s1=chr(random.randint(65,90))
        s2=str(random.randint(0,9))
        res+=random.choice([s1,s2])
    return res

print(make_code(9))

 

7  sys模块

sys模块常用功能:

1 sys.argv           命令行参数List,第一个元素是程序本身路径
2 sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值

使用sys与time模块实现打印进度条:

打印进度条

 

8 shutil模块

主要对文件和文件夹进行copy,压缩等操作。

     1)文件copy:

shutil.copyfileobj(fsrc(源文件),fdst[,length])


将文件内容拷贝到另一个文件中

1 import shutil
2 shutil.copyfileobj(open('old.xml','r'), open('new.xml', 'w'))

拷贝文件

1 shutil.copyfile('f1.log', 'f2.log') #目标文件无需存在

 

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

1 shutil.copymode('f1.log', 'f2.log') #目标文件必须存在

 

shutil.copystat(src, dst)
仅拷贝状态的信息,包括:mode bits, atime, mtime, flags

1 shutil.copystat('f1.log', 'f2.log') #目标文件必须存在

关于使用shutil来进行文件的压缩与解压:

shutil.make_archive(base_name, format,...)

创建压缩包并返回文件路径,例如:zip、tar

创建压缩包并返回文件路径,例如:zip、tar

base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径,
如 data_bak                       =>保存至当前路径
如:/tmp/data_bak =>保存至/tmp/
format:    压缩包种类,“zip”, “tar”, “bztar”,“gztar”
root_dir:    要压缩的文件夹路径(默认当前目录)
owner:    用户,默认当前用户
group:    组,默认当前组
logger:    用于记录日志,通常是logging.Logger对象


1 #将 /data 下的文件打包放置当前程序目录
2 import shutil
3 ret = shutil.make_archive("data_bak", 'gztar', root_dir='/data')
4   
5   
6 #将 /data下的文件打包放置 /tmp/目录
7 import shutil
8 ret = shutil.make_archive("/tmp/data_bak", 'gztar', root_dir='/data') 

shutil 对压缩包的处理是调用 ZipFile 和 TarFile 两个模块来进行的,详细:




import zipfile

# 压缩
z = zipfile.ZipFile('laxi.zip', 'w')
z.write('a.log')
z.write('data.data')
z.close()

# 解压
z = zipfile.ZipFile('laxi.zip', 'r')
z.extractall(path='.')
z.close()



import tarfile

# 压缩
>>> t=tarfile.open('/tmp/egon.tar','w')
>>> t.add('/test1/a.py',arcname='a.bak')
>>> t.add('/test1/b.py',arcname='b.bak')
>>> t.close()


# 解压
>>> t=tarfile.open('/tmp/egon.tar','r')
>>> t.extractall('/egon')
>>> t.close()
复制代码
V文件压缩与解压

 


















posted @ 2018-04-08 15:41  道阻切长  阅读(193)  评论(0编辑  收藏  举报