Python学习笔记-常用模块

1.python模块

如果你退出 Python 解释器并重新进入,你做的任何定义(变量和方法)都会丢失。因此,如果你想要编写一些更大的程序,为准备解释器输入使用一个文本编辑器会更好,并以那个文件替代作为输入执行。这就是传说中的 脚本。随着你的程序变得越来越长,你可能想要将它分割成几个更易于维护的文件。你也可能想在不同的程序中使用顺手的函数,而不是把代码在它们之间中拷来拷去。

为了满足这些需要,Python 提供了一个方法可以从文件中获取定义,在脚本或者解释器的一个交互式实例中使用。这样的文件被称为 模块;模块中的定义可以 导入 到另一个模块或 主模块 中(在脚本执行时可以调用的变量集位于最高级,并且处于计算器模式)。

模块是包括 Python 定义和声明的文件。文件名就是模块名加上 .py 后缀。模块的模块名(做为一个字符串)可以由全局变量 __name__ 得到。例如,你可以用自己惯用的文件编辑器在当前目录下创建一个叫 fibo.py 的文件,录入如下内容:

# Fibonacci numbers module

def fib(n):    # write Fibonacci series up to n
    a, b = 0, 1
    while b < n:
        print(b, end=‘ ‘)
        a, b = b, a+b
    print()

def fib2(n): # return Fibonacci series up to n
    result = []
    a, b = 0, 1
    while b < n:
        result.append(b)
        a, b = b, a+b
    return result

2.python导入模块

为了加快加载模块的速度,Python 会在 __pycache__ 目录下以 module.version.pyc 名字缓存每个模块编译后的版本,这里的版本编制了编译后文件的格式。它通常会包含 Python 的版本号。例如,在 CPython 3.3 版中,spam.py 编译后的版本将缓存为__pycache__/spam.cpython-33.pyc。这种命名约定允许由不同发布和不同版本的 Python 编译的模块同时存在。

Python 会检查源文件与编译版的修改日期以确定它是否过期并需要重新编译。这是完全自动化的过程。同时,编译后的模块是跨平台的,所以同一个库可以在不同架构的系统之间共享。

Python 不检查在两个不同环境中的缓存。首先,它会永远重新编译而且不会存储直接从命令行加载的模块。其次,如果没有源模块它不会检查缓存。若要支持没有源文件(只有编译版)的发布,编译后的模块必须在源目录下,并且必须没有源文件的模块。

方式1:import fibo

方式2:from shutil import copy

方式3:from shutil import *

这样可以导入所有除了以下划线( _ )开头的命名。

需要注意的是在实践中往往不鼓励从一个模块或包中使用 * 导入所有,因为这样会让代码变得很难读。不过,在交互式会话中这样用很方便省力。

出于性能考虑,每个模块在每个解释器会话中只导入一遍。因此,如果你修改了你的模块,需要重启解释器;或者,如果你就是想交互式的测试这么一个模块,可以用 imp.reload() 重新加载,例如 import imp; imp.reload(modulename)。

部分高级技巧:

  • 为了减少一个编译模块的大小,你可以在 Python 命令行中使用 -O 或者 -OO-O 参数删除了断言语句,-OO 参数删除了断言语句和 __doc__ 字符串。

    因为某些程序依赖于这些变量的可用性,你应该只在确定无误的场合使用这一选项。“优化的” 模块有一个 .pyo 后缀而不是 .pyc 后缀。未来的版本可能会改变优化的效果。

  • 来自 .pyc 文件或 .pyo 文件中的程序不会比来自 .py 文件的运行更快;.pyc 或.pyo 文件只是在它们加载的时候更快一些。
  • compileall 模块可以为指定目录中的所有模块创建 .pyc 文件(或者使用 -O 参数创建.pyo 文件)

3.使用python模块

这样做不会直接把 fibo 中的函数导入当前的语义表;它只是引入了模块名 fibo。你可以通过模块名按如下方式访问这个函数:

>>> fibo.fib(1000)
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
>>> fibo.fib2(100)
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
>>> fibo.__name__
‘fibo‘

如果打算频繁使用一个函数,你可以将它赋予一个本地变量:

>>> fib = fibo.fib
>>> fib(500)
1 1 2 3 5 8 13 21 34 55 89 144 233 377

4.python常用模块

Python 带有一个标准模块库,并发布有独立的文档,名为 Python 库参考手册(此后称其为“库参考手册”)。有一些模块内置于解释器之中,这些操作的访问接口不是语言内核的一部分,但是已经内置于解释器了。这既是为了提高效率,也是为了给系统调用等操作系统原生访问提供接口。这类模块集合是一个依赖于底层平台的配置选项。例如,winreg 模块只提供在 Windows 系统上才有。有一个具体的模块值得注意: sys ,这个模块内置于所有的 Python 解释器。变量 sys.ps1 和 sys.ps2 定义了主提示符和辅助提示符字符串:

>>> import sys
>>> sys.ps1
‘>>> ‘
>>> sys.ps2
‘... ‘
>>> sys.ps1 = ‘C> ‘
C> print(‘Yuck!‘)
Yuck!
C>

4.1time模块

Python 中提供了对时间日期的多种多样的处理方式,主要是在 time 和 datetime 这两个模块里

在 Python 文档里,time是归类在Generic Operating System Services中,换句话说, 它提供的功能是更加接近于操作系统层面的。通读文档可知,time 模块是围绕着 Unix Timestamp 进行的。

该模块主要包括一个类 struct_time,另外其他几个函数及相关常量。 需要注意的是在该模块中的大多数函数是调用了所在平台C library的同名函数, 所以要特别注意有些函数是平台相关的,可能会在不同的平台有不同的效果。另外一点是,由于是基于Unix Timestamp,所以其所能表述的日期范围被限定在 1970 - 2038 之间,如果你写的代码需要处理在前面所述范围之外的日期,那可能需要考虑使用datetime模块更好。文档解释比较费劲,具体看看怎么用:

In [1]: import time

In [2]: time.time()
Out[2]: 1414332433.345712
In [3]: timestamp = time.time()

In [4]: time.gmtime(timestamp)
Out[4]: time.struct_time(tm_year=2014, tm_mon=10, tm_mday=26, tm_hour=14, tm_min=7, tm_sec=13, tm_wday=6, tm_yday=299, tm_isdst=0)

In [5]: time.localtime(timestamp)
Out[5]: time.struct_time(tm_year=2014, tm_mon=10, tm_mday=26, tm_hour=22, tm_min=7, tm_sec=13, tm_wday=6, tm_yday=299, tm_isdst=0)
In [6]: struct_time = time.localtime(timestamp)

In [7]: time.ctime(timestamp)
Out[7]: ‘Sun Oct 26 22:07:13 2014‘

In [8]: time.asctime(struct_time)
Out[8]: ‘Sun Oct 26 22:07:13 2014‘

In [9]: time.mktime(struct_time)
Out[9]: 1414332433.0

In [10]: time.strftime("%a, %d %b %Y %H:%M:%S +0000", struct_time)
Out[10]: ‘Sun, 26 Oct 2014 22:07:13 +0000‘

In [11]: time.strptime("30 Nov 00", "%d %b %y")
Out[11]: time.struct_time(tm_year=2000, tm_mon=11, tm_mday=30, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=335, tm_isdst=-1)
>>> print(time.altzone)#返回与utc时间的时间差,以秒计算

>>> print(time.localtime())#返回本地时间的struct time对象格式

>>> print(time.time())#1970年(UNIX时间诞生日)至今的时间戳(秒)

>>> print(time.gmtime(time.time()))#返回utc时间的struct时间对象格式

>>> print(time.asctime(time.gmtime(time.time())))#返回时间格式"Fri Aug 19 11:14:16 2016",

time.time()获取时间戳

time.gmtime()返回utc时间struct时间对象格式

time.asctime()格式化struct时间对象:"Fri Aug 19 11:14:16 2016"

Python time.ctime()与time.asctime()区别

time.ctime() 函数把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。 如果参数未给或者为None的时候,将会默认time.time()为参数。它的作用相当于 asctime(localtime(secs))

>>> print(time.strptime(‘2016-11-11‘,‘%Y-%m-%d‘))#将日期字符串转成struct时间对象格式第一个参数为时间字符串,第二参数为对应的时间格式

>>> print(time.mktime(time.gmtime(time.time())))#将struct时间对象转成时间戳

time.time()获取当前时间戳

time.gmtime()转换utc时间为struct时间对象

time.mktime()将struct时间对象转成时间戳

>>> print(time.strftime(‘%Y-%m-%d‘,time.gmtime()))#将utc struct_time格式转成指定的字符串格式

第一个参数为是时间格式化格式,第二个是struct时间对象



4.1.1 time模块时间字符串与struct时间对象及时间戳转化关系(鸭子图)

4.1.2datetime模块

datetime 比 time 高级了不少,可以理解为 datetime 基于 time 进行了封装,提供了更多实用的函数。在datetime 模块中包含了几个类,具体关系如下:

object
  timedelta  # 主要用于计算时间跨度
    tzinfo  # 时区相关
    time  # 只关注时间
    date  # 只关注日期
    datetime  # 同时有时间和日期

甚至两个 datetime 对象直接相减就能获得一个 timedelta 对象。如果有需要计算工作日的需求,可以使用 business_calendar这个库,不需要装其他依赖就可使用。

>>> print(datetime.datetime.now())#返回当前时间 2016-11-14 12:47:03.941925

>>> print(datetime.date.fromtimestamp(time.time()))#格式化时间戳直接为日期格式2016-11-14

>>> print(datetime.datetime.now()+datetime.timedelta(3))#当前时间+3天datetime.timedelta对象代表两个时间之间的的时间差,两个date或datetime对象相减时可以返回一个timedelta对象

>>>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分

>>> print(datetime.datetime.now())
2016-11-14 23:56:21.528586
>>> print(datetime.datetime.now().replace(minute=3,hour=2))#时间替换

2016-11-14 02:03:50.296517



Directive Meaning Example Notes
%a Weekday as locale’s abbreviated name.

Sun, Mon, ..., Sat (en_US);

So, Mo, ..., Sa (de_DE)

(1)
%A Weekday as locale’s full name.

Sunday, Monday, ..., Saturday (en_US);

Sonntag, Montag, ..., Samstag (de_DE)

(1)
%w Weekday as a decimal number, where 0 is Sunday and 6 is Saturday. 0, 1, ..., 6  
%d Day of the month as a zero-padded decimal number. 01, 02, ..., 31  
%b Month as locale’s abbreviated name.

Jan, Feb, ..., Dec (en_US);

Jan, Feb, ..., Dez (de_DE)

(1)
%B Month as locale’s full name.

January, February, ..., December (en_US);

Januar, Februar, ..., Dezember (de_DE)

(1)
%m Month as a zero-padded decimal number. 01, 02, ..., 12  
%y Year without century as a zero-padded decimal number. 00, 01, ..., 99  
%Y Year with century as a decimal number. 1970, 1988, 2001, 2013  
%H Hour (24-hour clock) as a zero-padded decimal number. 00, 01, ..., 23  
%I Hour (12-hour clock) as a zero-padded decimal number. 01, 02, ..., 12  
%p Locale’s equivalent of either AM or PM.

AM, PM (en_US);

am, pm (de_DE)

(1), (2)
%M Minute as a zero-padded decimal number. 00, 01, ..., 59  
%S Second as a zero-padded decimal number. 00, 01, ..., 59 (3)
%f Microsecond as a decimal number, zero-padded on the left. 000000, 000001, ..., 999999 (4)
%z UTC offset in the form +HHMM or -HHMM (empty string if the the object is naive). (empty), +0000, -0400, +1030 (5)
%Z Time zone name (empty string if the object is naive). (empty), UTC, EST, CST  
%j Day of the year as a zero-padded decimal number. 001, 002, ..., 366  
%U Week number of the year (Sunday as the first day of the week) as a zero padded decimal number. All days in a new year preceding the first Sunday are considered to be in week 0. 00, 01, ..., 53 (6)
%W Week number of the year (Monday as the first day of the week) as a decimal number. All days in a new year preceding the first Monday are considered to be in week 0. 00, 01, ..., 53 (6)
%c Locale’s appropriate date and time representation.

Tue Aug 16 21:30:00 1988 (en_US);

Di 16 Aug 21:30:00 1988 (de_DE)

(1)
%x Locale’s appropriate date representation.

08/16/88 (None);

08/16/1988 (en_US);

16.08.1988 (de_DE)

(1)
%X Locale’s appropriate time representation.

21:30:00 (en_US);

21:30:00 (de_DE)

(1)
%% A literal ‘%‘ character. %

参考链接:

http://gracece.com/2014/10/the-distinction-between-date-and-datetime-in-python/

http://www.pythondoc.com/pythontutorial3/modules.html

http://www.cnblogs.com/alex3714/articles/5161349.html

http://www.cnblogs.com/wupeiqi/articles/4963027.html

时间: 2024-10-12 12:51:37

Python学习笔记-常用模块的相关文章

Python学习笔记—itertools模块

这篇是看wklken的<Python进阶-Itertools模块小结> 学习itertools模块的学习笔记 在看itertools中各函数的源代码时,刚开始还比较轻松,但后面看起来就比较费劲... 1.itertools.count(start=0,step=1) 此函数用来创建一个迭代器,生成从n开始的连续整数,如果忽略n,则从0开始计算 如果超出了sys.maxint,计数器将溢出并继续行-sys.maxint-1开始计算 定义: def count(start=0, step=1):

python学习笔记(八)-模块

大型python程序以模块和包的形式组织.python标准库中包含大量的模块.一个python文件就是一个模块.1.标准模块 python自带的,不需要你安装的2.第三方模块 需要安装,别人提供的. pip install xxx 自动化安装的 手动安装 首先下载安装包 解压 在命令行里面进入到这个解压之后的目录 执行python setup.py install3.自己写的 自己写的python文件import xx 导入一个文件 ,导入文件的实质是什么,把这个python运行一次import

Python学习 :常用模块(二)

常用模块(二) 四.os模块 os模块是与操作系统交互的一个接口,用于对操作系统进行调用 os.getcwd() # 提供当前工作目录 os.chdir() # 改变当前工作目录 os.curdir() # 返回当前目录('.') os.pardir() # 获取当前目录的父目录字符串名('..') os.makedirs() # 生成多层递归目录('April\\Week1\\Day3') os.removedirs() # 从最里层往外删除空的文件夹,若文件夹为空,将会删除:若文件夹不为空,

Python学习 :常用模块(三)

常用模块(三) 七.logging模块 日志中包含的信息应有正常的程序访问日志,还可能有错误.警告等信息输出 python的 logging 模块提供了标准的日志接口,你可以通过它存储各种格式的日志,logging 的日志可以分为 debug() , info() , warning() , error() , critical() 5个级别 Eg.简单的日志记录 import logging logging.debug('debug message') logging.info('info m

python学习笔记(五) - 模块

一. 使用模块 引入sys模块,使用import #!/usr/bin/env python # -*- coding: utf-8 -*- ' a test module ' __author__ = 'Michael Liao' import sys def test(): args = sys.argv if len(args)==1: print 'Hello, world!' elif len(args)==2: print 'Hello, %s!' % args[1] else: p

Python学习笔记2—模块

模块的使用 引用模块的两种形式 形式一: import module_name 形式二: from module1 import module11   (module11是module的子模块) 例:引用精确除法模块 >>> 5/2 2 >>> from __future__ import division >>> 5/2 2.5 >>> 5//2 2 >>> 如过需要进行开方,乘方,对数等运算就需要用到Python

Python学习 :常用模块(一)

常用模块(一) 一.时间(time)模块 时间戳 (Timestamp):时间戳表示的是从1970年1月1日00:00:00为计时起点,到当前的时间长度 import time print(help(time)) 查看time模块的官方说明 time.time() # 返回当前时间的时间戳 print(time.time()) >>> 1540191340.5649574 time.clock() # 计算CPU执行的时间 print(time.clock()) >>>

python学习笔记glob模块

python有许多的类库,现将学习记录下来,以供以后回顾复习: 1.glob模块 用于文件名操作,匹配指定目录下的文件,常用的有两个函数: glob(pattern),返回匹配的文件的列表. iglob(pattern),返回生成器,可以遍历匹配的文件. 示例代码: glob()bogon:datasets xuguoqiang$ ls matrixA.txt matrixB.txt test words.txt files = glob.glob('*.txt') >>> for fi

Python学习笔记-邮件模块SMTP

smtplib模块: SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式. python的smtplib提供了一种很方便的途径发送电子邮件.它对smtp协议进行了简单的封装. Python创建 SMTP 对象语法如下: import smtplib smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] ) 参数说明: hos