iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >时间、文件、系统、序列化模块
  • 775
分享到

时间、文件、系统、序列化模块

模块文件时间 2023-01-30 23:01:43 775人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

一、在python中,通常有这几种方式来表示时间: 时间戳 格式化的时间字符串 元祖(struct_time)共九个元素。由于Python的time模块实现主要调用C库,所以每个平台可能有所不同。 二、几个定义   UTC

一、在python中,通常有这几种方式来表示时间:

  • 时间戳

  • 格式化的时间字符串

  • 元祖(struct_time)共九个元素。由于Python的time模块实现主要调用C库,所以每个平台可能有所不同。

二、几个定义

  UTC(Coordinated Universal Time,世界协调时)亦即格林威治天文时间,世界标准时间。在中国为UTC+8。DST(Daylight Saving Time)即夏令时。

  时间戳(timestamp)的方式:通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移值。我们运行type(time.time()),返回的是float类型。

  元祖(struct_time)方式:struct_time元祖共有9个元素,返回struct_time的函数主要有gmtime(),localtime(),strptime()。下面列出这种方式元祖中的几个元素:

属性                            值
tm_year(年)                  比如2019 
tm_mon(月)                   1 - 12
tm_mday(日)                  1 - 31
tm_hour(时)                  0 - 23
tm_min(分)                   0 - 59
tm_sec(秒)                   0 - 61
tm_wday(weekday)             0 - 6(0表示周日)
tm_yday(一年中的第几天)        1 - 366
tm_isdst(是否是夏令时)        默认为-1

一、time模块的方法

time.localtime( [secs] )
将一个时间戳转换为当前时区的struct_time,即时间数组格式的时间
参数:

sec – 转换为time.struct_time类型的对象的秒数
如果secs参数未提供,则以当前时间为准(即会默认调用time.time())。

>>> import time
>>> time.localtime()
time.struct_time(tm_year=2019, tm_mon=1, tm_mday=23, tm_hour=10, tm_min=31, tm_sec=21, tm_wday=2, tm_yday=23, tm_isdst=0)

time.gmtime([secs])
将一个时间戳转换为UTC时区的struct_time
time.gmtime() 函数将一个时间戳转换为UTC时区(0时区)的struct_time,可选的参数sec表示从1970-1-1 00:00:00以来的秒数。其默认值为time.time(),函数返回time.struct_time类型的对象。(struct_time是在time模块中定义的表示时间的对象)。
如果secs参数未提供,则以当前时间为准。
参数:

sec – 转换为time.struct_time类型的对象的秒数

>>> time.gmtime()
time.struct_time(tm_year=2019, tm_mon=1, tm_mday=23, tm_hour=2, tm_min=34, tm_sec=6, tm_wday=2, tm_yday=23, tm_isdst=0)
>>>

time.time()

返回当前时间的时间戳

>>> time.time()
1548210925.5266087

time.mktime(t)

将一个struct_time转化为时间戳
time.mktime() 函数执行与gmtime(), localtime()相反的操作,它接收struct_time对象作为参数,返回用秒数表示时间的浮点数。
如果输入的值不是一个合法的时间,将触发 OverflowError 或 ValueError。
参数:

t – 结构化的时间或者完整的9位元组元素

>>> time.mktime(time.localtime())
1548211010.0

time.sleep(secs)

线程推迟指定的时间运行 
线程睡眠指定时间,单位为妙。

>>> time.sleep(2)  # 睡眠2秒

time.asctime( [t] )
把一个表示时间的元组或者struct_time表示为 ‘Sun Aug 23 14:31:59 2015’ 这种形式。如果没有给参数,会将time.localtime()作为参数传入。
参数:

t – 9个元素的元组或者通过函数 gmtime() 或 localtime() 返回的时间值

>>> time.asctime()
'Wed Jan 23 10:39:47 2019'

time.ctime([secs])
把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。如果为指定参数,将会默认使用time.time()作为参数。它的作用相当于time.asctime(time.localtime(secs))
参数:

sec – 要转换为字符串时间的秒数

>>> time.ctime()
'Wed Jan 23 10:41:58 2019'

time.strftime( format [, t] )
返回字符串表示的当地时间。
把一个代表时间的元组或者struct_time(如由time.localtime()和time.gmtime()返回)转化为格式化的时间字符串,格式由参数fORMat决定。如果未指定,将传入time.localtime()。如果元组中任何一个元素越界,就会抛出ValueError的异常。函数返回的是一个可读表示的本地时间的字符串。
参数:

format:格式化字符串
t :可选的参数是一个struct_time对象
时间字符串支持的格式符号:(区分大小写)

%a  本地星期名称的简写(如星期四为Thu)      
%A  本地星期名称的全称(如星期四为Thursday)      
%b  本地月份名称的简写(如八月份为agu)    
%B  本地月份名称的全称(如八月份为august)       
%c  本地相应的日期和时间的字符串表示(如:15/08/27 10:20:06)       
%d  一个月中的第几天(01 - 31)  
%f  微秒(范围0.999999)    
%H  一天中的第几个小时(24小时制,00 - 23)       
%I  第几个小时(12小时制,0 - 11)       
%j  一年中的第几天(001 - 366)     
%m  月份(01 - 12)    
%M  分钟数(00 - 59)       
%p  本地am或者pm的相应符      
%S  秒(00 - 61)    
%U  一年中的星期数。(00 - 53星期天是一个星期的开始。)第一个星期天之    前的所有天数都放在第0周。     
%w  一个星期中的第几天(0 - 6,0是星期天)    
%W  和%U基本相同,不同的是%W以星期一为一个星期的开始。    
%x  本地相应日期字符串(如15/08/01)     
%X  本地相应时间字符串(如08:08:10)     
%y  去掉世纪的年份(00 - 99)两个数字表示的年份       
%Y  完整的年份(4个数字表示年份)
%z  与UTC时间的间隔(如果是本地时间,返回空字符串)
%Z  时区的名字(如果是本地时间,返回空字符串)       
%%  ‘%’字符  

time.strptime(string[,format])
将格式字符串转化成struct_time.
该函数是time.strftime()函数的逆操作。time strptime() 函数根据指定的格式把一个时间字符串解析为时间元组。所以函数返回的是struct_time对象。
参数:

string :时间字符串
format:格式化字符串

注意在使用strptime()函数将一个指定格式的时间字符串转化成元组时,参数format的格式必须和string的格式保持一致,如果string中日期间使用“-”分隔,format中也必须使用“-”分隔,时间中使用冒号“:”分隔,后面也必须使用冒号分隔,否则会报格式不匹配的错误。

时间格式转换图:

 

二、datetime模块

  • datetime模块定义了下面几个类:

  • datetime.date:表示日期的类。常用的属性有year,month,day;

  • datetime.time:表示时间的类。常用的属性有hour,minute,second,microsecond;

  • datetime.datetime:表示日期时间。

  • datetime.timedelta:表示时间间隔,即两个时间点之间的长度;

  • datetime.tzinfo:与时区有关的信息。

需要记住的方法:

  1. d = datetime.datetime.now() 返回当前的datetime日期类型

    •   d.timestamp(),d.today,d.year,d.timetuple()等方法可以调用

  2. datetime.date.fromtimestamp() 把一个时间戳转为datetime日期类型

  3. 时间运算

>>> datetime.datetime.now()
datetime.datetime(2019, 1, 23, 11, 3, 42, 125406)
>>> datetime.datetime.now() + datetime.timedelta(4)  # 当前时间+4天
datetime.datetime(2019, 1, 27, 11, 4, 18, 791478)
>>> datetime.datetime.now() + datetime.timedelta(hours=4)  # 当前时间+4小时
datetime.datetime(2019, 1, 23, 15, 4, 52, 988594)

  4. 时间替换

>>> d.replace(year=1994,month=11,day=12)
datetime.datetime(1994, 11, 12, 11, 0, 27, 749344)

 

三、random模块

>>> random.randrange(0,100,2)  # 随机选取 0到100间的偶数
64
>>> random.random()  # 返回一个随机浮点数
0.2246826615173001
>>> random.choice('abc123#$%')  # 返回一个给定数据集合中的随机字符
'1'
>>> random.sample('abcdefg',3)  # 从多个字符中选取特定数量的字符
['g', 'd', 'f']
>>>
>>> # 生成随机字符串
... import string
>>> ''.join(random.sample(string.ascii_lowercase+string.digits,6))
'kwcsq4'
>>>
>>> # 洗牌
... a = [1,2,3,4,5,6,7,8,9]
>>> random.shuffle(a)
>>> a
[8, 5, 1, 6, 9, 7, 3, 4, 2]

 

四、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    输出用于分割文件路径的字符串 win下为;,Linux下为:
os.name    输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
os.system("bash command")  运行shell命令,直接显示
os.popen("bash command)  运行shell命令,获取执行结果
os.environ  获取系统环境变量


os.path
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所指向的文件或者目录的最后修改时间
os.path.getsize(path) 返回path的大小

 

os.stat('path\filename') 获取文件\目录信息的结构说明

stat 结构:
 
st_mode: inode 保护模式
st_ino: inode 节点号。
st_dev: inode 驻留的设备。
st_nlink: inode 的链接数。
st_uid: 所有者的用户ID。
st_gid: 所有者的组ID。
st_size: 普通文件以字节为单位的大小;包含等待某些特殊文件的数据。
st_atime: 上次访问的时间。
st_mtime: 最后一次修改的时间。
st_ctime: 由操作系统报告的"ctime"。在某些系统上(如Unix)是最新的元数据更改的时间,<br>在其它系统上(如windows)是创建时间(详细信息参见平台的文档)。

 

五、sys模块

import sys

sys.argv  # 命令行参数List,第一个元素是程序本身路径
sys.exit(n)  # 退出程序,正常退出时exit(0)
sys.version  # 获取Python解释程序的版本信息
sys.maxint  # 最大的Int值
sys.path  # 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform  # 返回操作系统平台名称
sys.stdout.write('please:')  # 标准输出,引出进度条的例子。注:在py3上不行,可以用print代替
val = sys.stdin.readline()[:-1]  # 标准输入
sys.getrecursionlimit()  # 获取最大递归层数
sys.setrecursionlimit(1200)  # 设置最大递归层数
sys.getdefaultencoding()  # 获取解释器默认编码
sys.getfilesystemencoding  # 获取内存数据存到文件里的默认编码

 

六、shutil模块

 高级的文件、文件夹、压缩包 处理模块

shutil.copyfileobj(fsrc,fdst[,length])

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

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

shutil.copyfile(src,dst)

拷贝文件

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

shutil.copymode(src,dst)

仅拷贝权限。内容、组、用户均不变

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

shutil.copystat(src,dst)

仅拷贝状态的信息,包括:mode bits,atime,mtime,flags

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

shutil.copy(src,dst)

拷贝文件和权限

shutil.copy('f1.log','f2.log')

shutil.copy2(src,dst)

拷贝文件和状态信息

shutil.copy2('f1.log','f2.log')

shutil.ignore_patterns(*patterns)
shutil.copytree(src,dst,symlinks=False,ignore=None)

递归的去拷贝文件夹

shutil.copytree('folder1','folder2',ignore=shutil.ignore_patterns('*.pyc','tmp*'))  # 目标目录不能存在,注意对folder2目录父级目录要有可写权限,ignore的意思是排除

shutil.rmtree(path[,ignore_errors=[,onerror]])

递归的去删除文件

shutil.rmtree('folder1')

shutil.move(src,dst)

递归的去移动文件,它类似mv命令,其实就是重命名。

shutil.move('folder1','folder3')

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

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

  • base_name:压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径。如data_bak=>保存至当前路径;如/tmp/data_bak=>保存到/tmp/

  • format:压缩包种类,“zip”,"tar","bztar","gztar"

  • root_dir:要压缩的文件夹路径(默认当前目录)

  • owner:用户,默认当前用户

  • group:组,默认当前组

  • logger:用于记录日志,通常的loggin.Logger对象

# 将/data 下的文件打包放置当前程序目录
ret = shutil.make_arcHive('data_bak','gztar',root_dir='/data')

# 将/data下的文件打包放置/tmp/目录
ret = shutil.make_archive('/tmp/data_bak','gztar',root_dir='/data')

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

# zipfile压缩和解压缩
import zipfile
# 压缩
z = zipfile.ZipFile('aaa.zip','w')
z.write('bbb.log')
z.write('data.data')
z.close()

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

 

# tarfile压缩和解压缩
import tarfile
# 压缩
t = tarfile.open('/tmp/aaa.tar','w')
t.add('/test/a.py',arcname='a.bak')
t.add('/test/b.py',arcname='b.bak')
t.close()

# 解压缩
t = tarfile.open('/tmp/aaa.tar','r')
t.extractall('/test')
t.close()

 

七、JSON&pickle模块

什么叫序列化?序列化是指把内存里的数据类型转变成字符串,以使其能存储到硬盘或通过网络传输到远程,因为硬盘或网络传输时只能接受bytes。

用于序列化的两个模块

  • json,用于字符串和python数据类型间进行转换

  • pickle,用于python特有的类型和python的数据类型间进行转换

Json模块提供四个模块;dumps,dump,loads,load

pickle模块提供四个模块;dumps,dump,loads,load

import pickle
data = {'k1':123,'k2':'hello'}
# pickle.dumps 将数据通过特殊的形式转换为只有python语言认识的字符串
p_str = pickle.dumps(data)
print(p_str)
# pickle.dump 将数据通过特殊的形式转换为只有python语言认识的字符串,并写入文件
with open('test','w') as fp:
    pickle.dumps(data,fp)
    
import json
# json.dumps 将数据通过特殊的形式转换为所有程序语言认识的字符串
j_str = json.dumps(data)
print(j_str)
# json.dump 将数据通过特殊的形式转换为所有程序语言认识的字符串,并写入文件
with open('test','w') as fp:
    json.dump(data,fp)

json vs pickle:

  JSON:

  优点:跨语言,体积小

  缺点:只能支持int/str/list/tuple/dict

  Pickle:

  优点:专为python设计,支持python所有的数据类型

  缺点:只能在python中使用,存储数据占空间大

 

八、shelve模块

shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式。

序列化:

import shelve
f = shelve.open('shelve_test')  # 打开一个文件
names = ['悟空','八戒','沙僧']
info = {'name':'悟空','age':999}
f['name'] = names
f['info_dic'] = info
f.close()

反序列化:

import shelve
d = shelve.open('shelve_test')  # 打开一个文件
print(d['names'])
print(d['info_dic'])
# del d['test']   # 还可以删除

 


原文:https://blog.csdn.net/SeeTheWorld518/article/details/48314501 

   Https://www.cnblogs.com/tkqasn/p/6001134.html
    

--结束END--

本文标题: 时间、文件、系统、序列化模块

本文链接: http://www.lsjlt.com/news/180910.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 时间、文件、系统、序列化模块
    一、在python中,通常有这几种方式来表示时间: 时间戳 格式化的时间字符串 元祖(struct_time)共九个元素。由于Python的time模块实现主要调用C库,所以每个平台可能有所不同。 二、几个定义   UTC...
    99+
    2023-01-30
    模块 文件 时间
  • python3--序列化模块,hashlib模块
    内置方法(回顾)__len__    len(obj)的结果依赖于obj.__len__()的结果,计算对象的长度__hash__   hash(obj)的结果依赖于obj.__hash__()的结果,计算对象...
    99+
    2023-01-30
    模块 序列化 hashlib
  • Python 序列化模块(json,pi
    json模块 JSON (JavaScript Object Notation):是一个轻量级的数据交换格式模块,受javascript对象文本语法启发,但不属于JavaScript的子集。 常用方法: dump(obj,fp):将对象以...
    99+
    2023-01-30
    模块 序列化 Python
  • Python文件系统模块pathlib库
    目录一、pathlib库官方定义二、pathlib秘籍1、 基本用法2、 基本属性3、 改变路径4、 拼接路径5、 测试路径6、 其他方法三、os和pathlib.Path的区别1、...
    99+
    2024-04-02
  • Python序列化模块JSON与Pickle
    序列化把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flat...
    99+
    2024-04-02
  • node.js文件系统模块和两个重要模块
    目录一、node.js文件系统模块node.jsfs文件系统读取文件写入文件二、node.js的两个重要模块path路径模块http模块一、node.js文件系统模块 node.js...
    99+
    2024-04-02
  • 金融时间序列模型
    金融时间序列模型是用于分析和预测金融市场数据中的时间序列的统计模型。这些模型基于金融市场数据的历史走势,通过考虑时间的因素来揭示和捕捉市场的规律和趋势。金融时间序列模型主要应用于股票价格、汇率、利率等金融指标的分析和预测。 以下是几种常见的...
    99+
    2023-10-12
    金融 数据分析 算法
  • Python关于时间序列calendar模块的深入讲解
    大家好,在之前的文章中详细介绍了time和datetime模块的使用。这两个模块更多的是用于处理时间和日期相关的问题。 本文介绍的是第三个模块calendar,则主要是用于解决日历方...
    99+
    2024-04-02
  • Linux文件系统安装模块化的示例分析
    小编给大家分享一下Linux文件系统安装模块化的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!以Fedora8下面安装minix文件系统为例:为了保证与系...
    99+
    2023-06-17
  • Python数据序列化之pickle模块
    目录1将Python数据存储为本地文件①存储过程②加载过程2将Python数据存储为程序的一部分①存储过程②加载过程前言: 在英语中 pickle 名词是泡菜,动词是腌渍的意思。可以...
    99+
    2024-04-02
  • python编程开发时间序列calendar模块示例详解
    目录calendar模块设置每周第一天1、默认情况:礼拜一是第一天2、设置任意一天是否闰年年份间的闰年数星期几monthrange(year, month)月的日历矩阵月的日历年的日...
    99+
    2024-04-02
  • pythontime模块时间戳与结构化时间详解
    目录time模块1. 时间戳1.1 time.time()1.2 时间戳 转 字符串2. 结构化时间2.1 本地时间2.2 格林威治时间(零时区)2.3 结构化时间 转 字符串2.4...
    99+
    2024-04-02
  • Node.js怎么使用文件系统模块
    这篇文章主要介绍“Node.js怎么使用文件系统模块”,在日常操作中,相信很多人在Node.js怎么使用文件系统模块问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Node.j...
    99+
    2024-04-02
  • node.js文件系统模块实例分析
    这篇文章主要讲解了“node.js文件系统模块实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“node.js文件系统模块实例分析”吧!一、node.js文件系统模块node.jsjav...
    99+
    2023-06-30
  • Prometheus系统如何存储时间序列数据
    Prometheus系统存储时间序列数据使用一种称为"TSDB"(Time Series Database)的存...
    99+
    2024-03-04
    Prometheus
  • 详解SpringBoot中时间类型的序列化与反序列化
    目录背景约定反序列化局部处理反序列化全局处理序列化局部处理全局处理推荐配置背景 前后端进行时间类型的传递时,往往是 前端传递时间格式的字符串,后端反序列化成对应的时间类型后端返回数据...
    99+
    2023-02-02
    SpringBoot时间类型序列化 反序列化 SpringBoot 序列化 反序列化 SpringBoot 序列化 SpringBoot 反序列化
  • 一文详解Node中的模块化、文件系统与环境变量
    本篇文章带大家深入了解Node中的模块化、文件系统与环境变量,有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。一、Node.js模块化1.0、变量作用域(1)、在浏览器端使用var或不使用关键字定义的变量属于全局作用域,也就...
    99+
    2023-05-14
    node 模块化 文件系统
  • Python序列化模块之pickle与json详解
    目录序列化模块序列化和反序列化使用场景dumps & loadsdump & loadJSON序列化模块使用场景支持的数据类型JSON和pickle的区别序列化函数j...
    99+
    2024-04-02
  • PythonJson与pickle模块序列化使用介绍
    用于序列化的两个模块 json,用于字符串 和 python数据类型间进行转换pickle,用于python特有的类型 和 python的数据类型间进行转换 Json模块提供了四个功...
    99+
    2024-04-02
  • 时间序列模型SCINet(代码解析)
    前言 SCINet模型,精度仅次于NLinear的时间序列模型,在ETTh2数据集上单变量预测结果甚至比NLinear模型还要好。在这里还是建议大家去读一读论文,论文写的很规范,很值得学习,论文地址S...
    99+
    2023-09-10
    人工智能 python SCINet 时间序列预测 因果神经网络
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作