python 模块

模块(module)

一个文件里,代码太长不易维护。所以要对不同功能的代码分组,保存在不同的文件。

在python中一个.py文件就可以称为一个模块。

  • 包含相应功能的函数以及变量。
  • 模块可以被其他程序引用,以使用该模块所对应的函数或者变量。

使用模块的优点:

  • 提高代码的可维护性
  • 提高代码的复用性
  • 可以导入很多功能的模块
    • 标准库模块
    • 第三方模块
    • 自定义模块
  • 避免变量名重复(作用域)

导入模块的常用方式:

import 模块名称 #A

import 模块名称 as 新名称 #B

from 模块名称 import 函数名称 #C

区别:

  • A 和 B
    • 会导入整个模块
    • 如果我们需要使用某个函数,必须以“模块名称.函数名()”的形式来调用相应的函数。(这种方法有利于代码可读性)[推荐]
    • B 重新命名导入的模块(使名称简洁),方便实用。
  • C(模块太多时不推荐)
    • 只导入了某模块的某一函数
    • 可以直接用函数名称去调用函数
    • 缺点:可能与其他模块的函数名重复,发生错误

注意:

import 语句对应模块顺序(PEP)(程序的最上方)

  • Python标准模块
  • 第三方
  • 自定义模块

自定义模块

os模块

python标准库中用于访问操作系统功能的模块。

使用os模块提供的接口,能够实现跨平台访问

最常见的操作:

  • 目录的操作
  • 判断

1.系统操作

  • os.sep:用于查看系统路径的分隔符;
    • windows --> “\\”
    • ubuntu --> "/ "
  • os.name:显示我们正在使用的平台
    • windows -->“nt”
    • Linux/unix -->“posix”
  • os.getenv -->读取环境变量(environment)
  • os.getcwd() -->获取当前路径2
>>> import os
>>> os.sep
'\\'
>>> os.name
'nt'
>>> os.getenv
<function getenv at 0x0000026A48B04EA0>
>>> os.getcwd()
'C:\\Users\\HP\\AppData\\Local\\Programs\\Python\\Python37'

2.目录操作 —增删改查(direction)

  • os.listdir():返回指定目录下的所有文件和目录名
>>> os.chdir("C:\\Users\\HP\\Desktop\\Python实习\\2.1")   #更改目录
>>> os.listdir()   #返回当前目录
['city.txt', 'data', '新建 Microsoft Excel 工作表.xlsx', '新建文本文档.md']
>>> os.listdir("C:/Users/HP/Desktop/one_week")  #返回指定目录
['one_1.py', 'one_2.py', 'one_3.py', 'one_4.py', 'one_5.py', 'sub5.py']
  • 目录的创建

    • os.mkdir(path):创建目录,仅限创建一级目录;
    • os.makedirs(path):创建目录,创建多级目录
    >>> os.mkdir("os_test")
    >>> os.makedirs("main_file/sub_file")
    
  • 目录/文件删除

    • os.rmdir(path):删除空目录一级
    • os.removedirs(path):删除空目录多级
    • os.remove(path):删除文件,必须是文件
>>> os.rmdir("os_test")
>>> os.rmdir("data")   #必须是空的
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OSError: [WinError 145] 目录不是空的。: 'data'
>>> os.remove("main_file/sub_file")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
PermissionError: [WinError 5] 拒绝访问。: 'main_file/sub_file'
  • 更改路径

    • chdir(path):change direction #将当前工作目录更改到指定的工作目录
    • os.rename(old_name,new_name)
    >>> os.chdir("C:\\Users\\HP\\Desktop\\Python实习\\2.1")   #更改目录
    >>> os.rename('main_file','main') #目录重命名
    

判断文件:

  • os.path.exists(path):判断文件或者目录是否存在,存在,True;否则,False.
  • os.path.isfile(path):判断是否为文件,是 True
  • os.path.isdir(path):判断是否为目录,是 True
>>> os.path.exists("data")
True
>>> os.path.isfile("data")
False
>>> os.path.isdir("data")
True
>>> os.path.isfile("city.txt")
True

拓展:

  • os.path.dirname(path):返回文件路径 ‘ ’

  • os.path.basename(path): 名称 ‘ ’

  • os.path.getsize(path): 大小

  • os.path.abspath(path): 绝对路径

  • os.path.join(path):

  • os.path.split(path):

>>> os.path.dirname('C:\\Users\\HP\Desktop\\Python实习\\2.1\\新建文本文档')
'C:\\Users\\HP\\Desktop\\Python实习\\2.1'
>>> os.path.basename('C:\\Users\\HP\Desktop\\Python实习\\2.1\\新建文本文档')
'新建文本文档'
>>> os.path.getsize('新建文本文档.md')
6447
>>> os.path.abspath('新建文本文档.md')
'C:\\Users\\HP\\Desktop\\Python实习\\2.1\\新建文本文档.md'

查看文件的时间:

  • os.path.getmtime(path):返回文件或目录最后修改时间,结果为秒数–>modify
  • os.path.getatime(path): 访问时间,结果为秒数
  • os.path.getctime(path): 创建时间,结果为秒数
>>> file='C:/Users/HP/Desktop/Python实习/2.1/week2_1.md'
>>> os.path.getmtime(file)
1563787230.664672
>>> os.path.getatime(file)
1563756164.1531272
>>> os.path.getctime(file)
1563756164.1531272

time 模块

>>> import time
>>> time.sleep([n])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'n' is not defined
>>> time.time()
1564101828.8700202

时间三种表示方式:

  • 时间戳(timetamp):表示的是从1970.01.01 00:00:00开始按秒计算的偏移量。
  • 格式化的时间字符串(format string)
  • 结构化的时间(struct_time) --> 元组, 9个元素 (年月日时分秒,一年的第几周,第几天,夏令时)

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 当前时区的名称
%% %号本身

>>> dir(time)
['_STRUCT_TM_ITEMS', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'altzone', 'asctime', 'clock', 'ctime', 'daylight', 'get_clock_info', 'gmtime', 'localtime', 'mktime', 'monotonic', 'monotonic_ns', 'perf_counter', 'perf_counter_ns', 'process_time', 'process_time_ns', 'sleep', 'strftime', 'strptime', 'struct_time', 'thread_time', 'thread_time_ns', 'time', 'time_ns', 'timezone', 'tzname']

>>> [i for i in dir(time) if not i.startswith("_")]
['altzone', 'asctime', 'clock', 'ctime', 'daylight', 'get_clock_info', 'gmtime', 'localtime', 'mktime', 'monotonic', 'monotonic_ns', 'perf_counter', 'perf_counter_ns', 'process_time', 'process_time_ns', 'sleep', 'strftime', 'strptime', 'struct_time', 'thread_time', 'thread_time_ns', 'time', 'time_ns', 'timezone', 'tzname']

>>> time.strftime("%Y-%m-%d %X")  #人看的
'2019-07-26 08:57:05'
>>> time.strftime("%x %X")
'07/26/19 08:59:21'

>>> time.localtime() #电脑看的
time.struct_time(tm_year=2019, tm_mon=7, tm_mday=26, tm_hour=9, tm_min=0, tm_sec=13, tm_wday=4, tm_yday=207, tm_isdst=0)

time模块的常用方法:

方法描述
time.localtime([sec])将一个时间戳转化为当前时区的struct_time(为提供参数,当前时间)
time.gmtime([sec])与上类似,不同处:他将一个时间戳转化为UTC时区(0时区)的struct_time
time.time()返回当前时间戳
time.mktime(t)将time.struct_time转化为时间戳
time.sleep(set)线程推迟指定的时间运行,单位(s)
time.asctime([t])把表时间的元组或struct_time表示为:“Sun July 26 09:06:35 2019”;未传参数,默认为time.localtime()
time.ctime([t])将一个时间戳转化为上.asctime形式,默认.time
time.strftime(format[,t])将一个代表时间的元组转化为格式化的字符串,未传参time,localtime()
time.strptime()将结构化字符串转化为struct_time形式
  • 时间戳 和 结构化时间 之间的转化:

time.gmtime() 戳 到 结构化

time.mktime() 结构化 到 戳

>>> now = time.time()  #时间戳
>>> time.gmtime(now)   #结构化时间    0时区的(localtime是我们当地时区北京东八区)
time.struct_time(tm_year=2019, tm_mon=7, tm_mday=26, tm_hour=1, tm_min=18, tm_sec=50, tm_wday=4, tm_yday=207, tm_isdst=0)

>>> tp_struct = time.localtime()  #结构化时间
>>> time.mktime(tp_struct)        #时间戳
1564104370.0
  • 结构化时间和字符串时间 之间的转化:

time.strftime() 结构 到 字符

time.strptime() 字符 到 结构

>>> time.strftime("%Y-%m-%d %X",time.localtime())
'2019-07-26 09:32:31'

>>> time.strptime("2019-07-26","%Y-%m-%d")
time.struct_time(tm_year=2019, tm_mon=7, tm_mday=26, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=4, tm_yday=207, tm_isdst=-1)
  • 结构化时间和字符串时间的转化(国际化时间字符串)
    time.asctime(结构化时间)
>>> time.asctime(time.localtime())
'Fri Jul 26 09:51:19 2019'
  • 时间戳和字符串的转化(国际化)
>>> time.ctime(time.time())
'Fri Jul 26 09:53:19 2019'
>>> time.ctime(15000000)
'Tue Jun 23 22:40:00 1970'

datatime 模块

相比time来说,datatime模块接口更直观,更容易调用

方法描述
datetime.date表示日期(类),常用属性year,month,day
datetime.time表示时间(类),常用属性hour,minute,second.microsecond
datetime.datetime表示日期
datetime.timedelta表示时间间隔
datetime.tzinfo与时区有关的信息
>>> import datetime
>>> datetime.datetime.now()
datetime.datetime(2019, 7, 26, 10, 6, 8, 463402)
>>> datetime.datetime.now().date()
datetime.date(2019, 7, 26)
>>> datetime.datetime.now().time()
datetime.time(10, 6, 20, 610311)

>>> datetime.datetime.now()+datetime.timedelta(hours=-1)  #当前时间减1小时
datetime.datetime(2019, 7, 26, 9, 47, 15, 403921)


sys模块

sys模块是与python解释器交互的一个接口

处理命令行参数

在解释器启动后,argv列表包含了传递脚本的所有参数

print("Script name is:", sys.argv[0])

if len(sys.argv)>1:
    print("There are ", len(sys.argv)-1, "arguments:")
    for i in sys.argv[1:]:
        print(i)
else:
    print("There are no arguments.")

序列化模块

序列化

概念:将一个对象从内存中转化为可储存(字符串类型)或者可传输(bytes)类型的过程。

python中叫pickling。

使程序更易维护。

json

json格式在各个语言中都可以通过序列化格式。在json中,所有的字符串必须为“ ”。

Json类型Python类型
{}dict
[]list
“string”str
1234.56int/float
true/falseTrue/False
nullNone
  • 优点:所有数据类型是各语言通用的。
  • 缺点:
    • 数据类型比较少
    • 对数据类型的要求比较严
      • 字典中的key必须是字符串
      • json 只支持列表,字典,数值,字符串

四个功能:

  • dumps
  • dump
  • loads
  • load
import json
dic = {"name":"city college","age":20}
sr_dic = json.dumps(dic) #把字典转化为字符串
print(type(sr_dic))
print(sr_dic)
print(dic)

<class ‘dict’>
{‘name’: ‘city college’, ‘age’: 20}

dic_2 =json.loads(sr_dic)  #反序列化
print(type(dic_2))
print(dic_2)

<class ‘dict’>
{‘name’: ‘city college’, ‘age’: 20}

pickle

只用于python

内存中结构化的数据 < — > 格式pickle < — > bytes类型 < — > 保存在文件或基于网络传输。

pickle 优缺点:

  • 优点
    • 支持python中的几乎所有类型
    • 把数据序列化为bytes类型
  • 缺点
    • 仅支持python

模块提供四个功能:

import pickle
dic = {"name":"city college","age":20}
dic_b = pickle.dumps(dic)
print(type(dic_b))
dic_d = pickle.loads(dic_b)
print(type(dic_d))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值