第20天 内置模块一

2018-10-19 06:17:42来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

人生三问

1. 内置模块是什么
  内置模块就是python编译器里面自带的一些模块,我们没有必要去写,但是可以直接使用!
2. 为什么要使用内置模块
  在日常工作中,我们需要去写一些模块去解决一些特定的功能,但是对于一些比较常用的功能,python解释器已经帮我们写好了,你说你是想直接拿来就用呢?还是再自己去写一个模块,当然是直接用啊。
3. 内置模块怎么使用
  内置模块和我们自定义的模块是一样的,通过import和from导入进行使用

 

介绍的模块:

time
datetime
sys
shutil
random
os

 

模块一: time

1. 时间戳

>>> time.time()  # 代表的是从1970年开始到现在经过的秒数
1539593357.4160235   

2. 结构化时间

>>> time.localtime()  # 通过localtime方法获得当前系统的结构化时间
time.struct_time(tm_year=2018, tm_mon=10, tm_mday=15, tm_hour=16, tm_min=49, tm_sec=56, tm_wday=0, tm_yday=288, tm_isdst=0)
>>> a = time.localtime()
>>> a.tm_year   # 可以通过.后面跟上属性查看相应的值
2018

3. 格式化字符串时间

>>> time.strftime('%Y-%m-%d %X')  # 通过输入%多少来获得对应的值
'2018-10-15 16:57:24'
>>>

 格式化的标准:

%a    Locale’s abbreviated weekday name.     
%A    Locale’s full weekday name.     
%b    Locale’s abbreviated month name.     
%B    Locale’s full month name.     
%c    Locale’s appropriate date and time representation.     
%d    Day of the month as a decimal number [01,31].     
%H    Hour (24-hour clock) as a decimal number [00,23].     
%I    Hour (12-hour clock) as a decimal number [01,12].     
%j    Day of the year as a decimal number [001,366].     
%m    Month as a decimal number [01,12].     
%M    Minute as a decimal number [00,59].     
%p    Locale’s equivalent of either AM or PM.    (1)
%S    Second as a decimal number [00,61].    (2)
%U    Week number of the year (Sunday as the first day of the week) as a decimal number [00,53]. All days in a new year preceding the first Sunday are considered to be in week 0.    (3)
%w    Weekday as a decimal number [0(Sunday),6].     
%W    Week number of the year (Monday as the first day of the week) as a decimal number [00,53]. All days in a new year preceding the first Monday are considered to be in week 0.    (3)
%x    Locale’s appropriate date representation.     
%X    Locale’s appropriate time representation.     
%y    Year without century as a decimal number [00,99].     
%Y    Year with century as a decimal number.     
%z    Time zone offset indicating a positive or negative time difference from UTC/GMT of the form +HHMM or -HHMM, where H represents decimal hour digits and M represents decimal minute digits [-23:59, +23:59].     
%Z    Time zone name (no characters if no time zone exists).     
%%    A literal '%' character.
格式化字符串的时间格式

 4. 三种时间格式之间的转换

因为计算机认识的时间格式只有时间戳的格式,但是对于我们人类而言,时间戳的格式又太难懂,因此我们把时间戳的格式转换成【结构化的时间】或者是【格式化字符串的时间】类型,转换关系如下。

5. 时间的转换

#------------------------------------------------按照图1中的关系进行时间的转换
#
时间之间的转换操作 # 定义三个类型的时间 a = time.time() # 得到时间戳 b = time.localtime() # 结构化时间 c = time.strftime('%Y-%m-%d %H-%M-%S') # 格式化字符串时间 # 结构化时间转为时间戳和格式化字符串时间的两种方式 d = time.mktime(b) e = time.strftime('%Y-%m-%d', b) # 时间戳转换成结构化时间 f = time.localtime(a) g = time.gmtime(a) # 格式化字符串时间转化为结构化时间 h = time.strptime(c, '%Y-%m-%d %H-%M-%S') # c是什么样格式的后面的格式就要写成什么样格式的

 

 6. 图二的两种方式其实就是把时间转换成外国人能够接受的时间

# ---------------------------按照图二的方式进行时间的转换
# 如果不进行传参,ctime和asctime得到得是一样的效果,都是转换成【week month day time year】

>>> time.asctime()   
'Mon Oct 15 18:23:37 2018'
>>> time.ctime()
'Mon Oct 15 18:23:44 2018'
>>>

# 如果进行传参
>>> a = time.time()  # 先得到时间戳
>>> b = time.localtime()   # 得到结构化时间
>>> time.asctime(b)   # 通过asctime把结构化时间转换成固定的外国人接受的时间
'Mon Oct 15 18:28:12 2018'
>>> time.ctime(a)  # 通过ctime将时间戳转换成外国人能够接受的时间
'Mon Oct 15 18:28:06 2018'
>>>

 

模块二:datatime

>>> print(datetime.datetime.now())   # 通过datetime的now方法获取当前时间格式
2018-10-15 18:40:17.028194
>>> datetime.datetime.fromtimestamp(time.time())
datetime.datetime(2018, 10, 15, 18, 40, 34, 551056)
>>> print(datetime.datetime.fromtimestamp(time.time()))  # 通过fromtimestamp转换成相应的时间格式
2018-10-15 18:40:57.722764
>>>

datetime重要的作用,用来做时间的加减

print(datetime.datetime.now())  # 展示现在的时间 格式为   【year:month:day hour:minute:second 】
print(datetime.datetime.fromtimestamp(time.time()))   # 将时间戳转换成datetime的形式



#  当前时间加减三天
print(datetime.datetime.now() + datetime.timedelta(3))
print(datetime.datetime.now() + datetime.timedelta(-3))

# 当前时间加减三个小时
print(datetime.datetime.now() + datetime.timedelta(hours=3))
print(datetime.datetime.now() + datetime.timedelta(hours=-3))

# 当前时间加减三十分钟
print(datetime.datetime.now() + datetime.timedelta(minutes=30))
print(datetime.datetime.now() + datetime.timedelta(minutes=-30))

替换:

c_time = datetime.datetime.now()
print(c_time, type(c_time))
print(c_time.replace(month=11, year=2020, minute=10))
print(c_time)

 

模块三: sys模块

'''
sys模块(python解释器相关的)
    1. sys.argv    # 这个是传入的参数,返回的是列表的形式,第一个是当前执行文件的名称
    2. sys.path   # 系统的环境变量,可以通过append方法进行更改
    3. sys.modules  # 内存已经加载的模块,以字典的形式存在
    4. sys.version  # 解释器的版本
    5. sys.platform   # 当前执行的平台
    6. sys.exit()    # 退出当前执行的python解释器

    # 了解
    7. sys.api_version   # api版本号
    8. sys.maxsize  # 最大值得整数32位为 2 ** 32 - 1 64位为2 ** 64 -1 
    9. sys.maxunicode   # 最大的unicode  0x10FFFF 
'''
>>> import sys
>>> sys.version
'3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:04:45) [MSC v.1900 32 bit (Intel)]'
>>> sys.api_version
1013
>>> sys.platform
'win32'
>>> sys.path
['', 'E:\\software\\python3\\python36.zip', 'E:\\software\\python3\\DLLs', 'E:\\software\\python3\\lib', 'E:\\software\\python3', 'E:\\software\\python3\\lib\\site-packages']
>>> ays.maxunicode
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'ays' is not defined
>>> sys.maxunicode
1114111
>>> sys.maxsize
2147483647
>>> sys.modules
{'builtins': <module 'builtins' (built-in)>, 'sys': <module 'sys' (built-in)>, '_frozen_importlib': <module '_frozen_importlib' (frozen)>, '_imp': <module '_imp' (built-in)>, '_warnings': <module '_warnings' (built-in)>, '_thread': <module '_thread' (built-in)>, '_weakref': <module '_weakref' (built-in)>, '_frozen_importlib_external': <module '_frozen_importlib_external' (frozen)>, '_io': <module 'io' (built-in)>, 'marshal': <module 'marshal' (built-in)>, 'nt': <module 'nt' (built-in)>, 'winreg': <module 'winreg' (built-in)>, 'zipimport': <module 'zipimport' (built-in)>, 'encodings': <module 'encodings' from 'E:\\software\\python3\\lib\\encodings\\__init__.py'>, 'codecs': <module 'codecs' from 'E:\\software\\python3\\lib\\codecs.py'>, '_codecs': <module '_codecs' (built-in)>, 'encodings.aliases': <module 'encodings.aliases' from 'E:\\software\\python3\\lib\\encodings\\aliases.py'>, 'encodings.utf_8': <module 'encodings.utf_8' from 'E:\\software\\python3\\lib\\encodings\\utf_8.py'>, '_signal': <module '_signal' (built-in)>, '__main__': <module '__main__' (built-in)>, 'encodings.latin_1': <module 'encodings.latin_1' from 'E:\\software\\python3\\lib\\encodings\\latin_1.py'>, 'io': <module 'io' from 'E:\\software\\python3\\lib\\io.py'>, 'abc': <module 'abc' from 'E:\\software\\python3\\lib\\abc.py'>, '_weakrefset': <module '_weakrefset' from 'E:\\software\\python3\\lib\\_weakrefset.py'>, 'site': <module 'site' from 'E:\\software\\python3\\lib\\site.py'>, 'os': <module 'os' from 'E:\\software\\python3\\lib\\os.py'>, 'errno': <module 'errno' (built-in)>, 'stat': <module 'stat' from 'E:\\software\\python3\\lib\\stat.py'>, '_stat': <module '_stat' (built-in)>, 'ntpath': <module 'ntpath' from 'E:\\software\\python3\\lib\\ntpath.py'>, 'genericpath': <module 'genericpath' from 'E:\\software\\python3\\lib\\genericpath.py'>, 'os.path': <module 'ntpath' from 'E:\\software\\python3\\lib\\ntpath.py'>, '_collections_abc': <module '_collections_abc' from 'E:\\software\\python3\\lib\\_collections_abc.py'>, '_sitebuiltins': <module '_sitebuiltins' from 'E:\\software\\python3\\lib\\_sitebuiltins.py'>, 'sysconfig': <module 'sysconfig' from 'E:\\software\\python3\\lib\\sysconfig.py'>, 'atexit': <module 'atexit' (built-in)>}
>>> sys.exit()
sys模块常见的使用方法

 argv的应用:

import sys
# 源文件为python解释器第二个参数
src_file = sys.argv[1]
# 目的文件问传入的第三个参数
dst_file = sys.argv[2]

with open(src_file, 'rb') as read_f, open(dst_file, 'wb') as write_f:
    for line in read_f:
        write_f.write(line)

# 在终端中 执行当前文件
# C:\Users\Administrator>python H:\python_study\day20\内容回顾.py H:\python_study\day20\test2.py H:\python_study\day20\test22.py
copy文件时当做参数使用

sys的应用(进度条)

import sys
import time

def progress(percent, width=50):
    # 当百分比大于1的时候都按照1来显示
    if percent >= 1:
        percent = 1
    # '[%%-%ds]' % width  ====> %-50s
    # 然后通过格式化得到我们想要的值
    show_str = ('[%%-%ds]' % width) % ('#' * int((width * percent)))
    # 最后打印的时候加上百分比
    print('{show_str} {percent}%'.format(
        show_str=show_str,
        percent=int(percent * 100)
    ))


# 模拟下载数据数据大小为1024567
data_size = 1024567
recv_size = 0
while recv_size < data_size:
    # 模拟数据延迟0.1秒
    time.sleep(0.1)
    # 每次下载1024
    recv_size += 1024
    # 得到百分比打印
    percent = recv_size / data_size
    progress(percent)
模拟下载数据显示打印条

 

 模块四:random

import random

random.random()   # 得到一个(0-1)之间的浮点数
random.uniform(1, 3)  # 得到一个(1, 3)之间的一个小数

random.randint(1, 3)  # 得到一个[1, 3]之间的整数
random.randrange(1, 3)   # 得到一个[1, 3)之间的一个整数

random.choice([1, '23', [4, 5]])  # 获得列表中的一个值
random.choices([1, '23', [4, 5]], k=2)   # 获得列表中的两个值返回一个列表
random.sample([1, '23', [4, 5]], k=2)  # 列表元素任意2个组合

# 打乱顺序
l = [1,2,3,4,5]
random.shuffle(l) # 传递的必须是一个列表
print(l)

生成一个随机验证码:

# 验证码包含数字和字母
def get_auth_code(num):
    temp_list = []
    while num:
        num -= 1
        # 首先获得数字
        a = str(random.randint(0, 10))
        # 其次获得字符
        b = chr(random.randint(0, 120))
        # 添加到列表中
        temp_list.append(random.choice([a, b]))
    return temp_list

print(' '.join(get_auth_code(4)))
随机验证码的生成

 

模块五: shutil

'''
shutil 高级的文件,文件夹,压缩包处理模块

文件处理:
    shutil.copyfileobj  传入的是两个对象,源文件,目的文件
    shutil.copyfile     传入的是两个路径,原路径,目的路径
    shutil.copymode     只复制文件的权限,目的恩瑾可定是要存在
    shutil.copystat     只复制文件的状态信息,修改时间,查看时间,更改时间,flag是
    shutil.copy         拷贝文件和权限
    shutil.copy2        拷贝文件和状态信息
    shutil.move()       更改文件名称
文件夹处理
    shutil.copytree     拷贝目录
    shutil.ignore_patterns  根据这个模块去设置是否不拷贝某个类型的文件
    shutil.rmtree       删除目录
压缩包处理
    shutil.make_archive()    压缩后的目录名称,格式,源目录
    shutile.unpack_archive() 压缩后的目录名称, 格式,解压后的目录
    
    tarfile.open().add() 
    zipfile.ZipFile().write()
'''

文件的操作:

方法1: copyfileobj:

# 方法copyfileobj
# 我们要首先得到两个打开的文件对象
# src就是源文件对象
# dst目标文件对象
src = open('sys模块.py', 'rb')
dst = open('sys模块2.py', 'wb')
shutil.copyfileobj(src, dst)
src.close()
dst.close()

方法2: copyfile 

# 和方法1类似,只不过它传递的是路径,而方法1传递的是对象
#
拷贝一个文件,而不是一个对象,目标文件可以不存在 shutil.copyfile('sys模块.py', 'sys模块3.py')

方法3:copymode

# 拷贝源文件的权限,在linux下面就是xrw之类的
# 但是它的内容,用户,组都是不变的
shutil.copymode('sys模块.py', 'sys模块2.py')  # 目标文件必须要存在

方法4: copystat

# 拷贝源文件的状态信息
# 包括权限,查看时间,修改时间,flags等
shutil.copystat('sys模块.py', 'sys模块2.py')

方法5: copy2和copy

# 拷贝的是文件的内容和权限
shutil.copy('sys模块.py', 'sys模块4.py')


# 拷贝的是文件的内容和状态
shutil.copy2('sys模块.py', 'sys模块5.py')

文件夹操作:

方法1:copytree

# 拷贝一个目录,目标目录不能存在,而且还要对其父目录可以有写权限
# symlinks 代表的是软连接,就相当于是一个快捷方式
# shutil.ignore_patterns拷贝的时候把符合模式的给删除掉就是了
shutil.ignore_patterns()
shutil.copytree(r'..\day20', 'forlder3',
                ignore=shutil.ignore_patterns('*pyc','tmp*'),
                symlinks=True
                )

方法2:rmtree

# 递归的删除一个文件夹
shutil.rmtree('forlder2')

方法3:move

# 就像是linux下面的重命名mv命令
# 参数一为源文件名,参数二为目标文件名
shutil.move('forlder3', 'forlder2')

压缩文件夹

方法1: make_archive

# 参数一:压缩之后的名字
# 参数二: 以什么样的格式压缩,可以是zip,tar,bztar, gztar
# 参数三: 要压缩的目录
'''
owner:    用户,默认当前用户
group:    组,默认当前组
logger:    用于记录日志,通常是logging.Logger对象
'''
shutil.make_archive('forlder2', 'zip', root_dir='../day20')

解压文件

方法1:unpack_archive

# 先打包一份zip的文件
shutil.make_archive('day19', 'zip', root_dir='..\day19')
# 解压文件,要加上后缀名称
# 参数一: 解压的文件
# format: 解压的格式
# extract_dir: 解压的目录
shutil.unpack_archive('day19.zip', format='zip',extract_dir='hello')

方法2:tarfile模块

import tarfile
# 压缩
t = tarfile.open('day.tar', mode='w')
t.add('sys模块.py')
t.add('sys模块2.py')
t.add('sys模块3.py')
t.close()
# 解压
t = tarfile.open('day.tar', mode='r')
t.extractall('./day')
t.close()

方法3:  zipfile模块

import zipfile
# 压缩
# 首先得到一个zipfile的对象,然后通过write压缩进对象中
z = zipfile.ZipFile('day.zip', mode='w')
z.write('sys模块.py')
z.write('sys模块2.py')
z.write('sys模块3.py')
z.close()
# 解压
# 也是先得到对象,然后通过extractall获得对象
z = zipfile.ZipFile('day.zip', mode='r')
z.extractall(path='./day')
z.close()

 

模块六:os模块

'''
os模块: 指的是和操作系统相关的模块

1. 目录操作
    增
        os.mkdir     创建一个单级目录
        os.makedirs  创建多级目录,递归创建
    删
        os.rmdir     删除一个目录
        os.removedirs  递归删除目录,如果目录为空
    改
        chdir       改变当前目录
        pardir      当前执行目录的父目录
        curdir      当前执行文件的目录
    查
        getcwd()    获得当前解释器执行文件目录
        listdir()   以列表的形式返回当前目录下面有什么内容
2. 文件操作
    删
        os.remove()   删除文件
    改
        os.rename()   修改文件名称
    查
        os.stat        查看当前文件的状态信息
        os.path.getsize()   查看当前文件的大小
        os.path.getatime()   查看当前文件的创建时间
        os.path.getmtime()   查看当前文件的修改时间
3. 变量信息
    os.stat     # 文件的状态信息
    os.name     # win是‘nt’, linux平台是'posix'
    os.sep      # 操作系统特定的路径分隔符
    os.linesep  # 换行符win为'\t\n', linux为'\t'
    os.pathsep  # 分割文件路径的字符串win为;, linux为:
    os.environ  # 系统环境变量
    os.system() # 运行shell命令,直接显示
4. 路径的判断
    os.path.exists()   # 判断路径是否存在
    os.path.isfile()   # 判断是否是个文件
    os.path.isdir()    # 判断是否是个目录
    os.path.join()     # 拼接路径
5. 路径操作
    os.path.split()  # 以列表的形式返回文件名和目录
    os.path.basename # 获得得就是split的文件名
    os.path.dirname  # 获得得就是split的目录
5. 规范化路径
    os.path.normcase()  # 将大写变小写,并将所有斜杠转成反斜杠(返回的是原字符串)
    os.path.normpath()  # 会把反斜杠转换成斜杠,然后可以识别相对路径
    os.path.abspath()   # 返回path规范化的绝对路径

'''
# 一般路径的处理使用这种方式
import os, sys

TOP_DIR = os.path.normpath(os.path.join(
    os.path.abspath(__file__),
    os.pardir,
))
print(TOP_DIR)

# 不建议使用下面这种方式
TOP_DIR = os.path.dirname(os.path.dirname(__file__))
在Linux和Mac平台上,该函数会原样返回path,在windows平台上会将路径中所有字符转换为小写,并将所有斜杠转换为饭斜杠。
>>> os.path.normcase('c:/windows\\system32\\')   
'c:\\windows\\system32\\'   
   

规范化路径,如..和/
>>> os.path.normpath('c://windows\\System32\\../Temp/')   
'c:\\windows\\Temp'   

>>> a='/Users/jieli/test1/\\\a1/\\\\aa.py/../..'
>>> print(os.path.normpath(a))
/Users/jieli/test1

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Python学习1——关于变量

下一篇:scrapy实例:爬取中国天气网