day14-常用系统模块和文件操作_qq_57748947的博客-程序员秘密

技术标签: python  

day14-常用系统模块和文件操作

1.time模块

(1)时间戳
  • import time

  • 用指定时间到1970年1月1日0时0分0秒(格林威治时间)的时间差(单位是秒)来表示时间的方式就是时间戳

  • 注:格林威治时间和北京时间有八个小时的时差

  • 4个字节(时间戳存储时间)

  • 16个字节(用字符串存储时间)

  • time.time() - 获取当前时间

    print(time.time())      # 1627611728.5696352
    
  • :time.locatime() - 获取当前时间的本地时间,返回结构体时间

    :time.locatime(时间戳) - 将时间戳对应的时间转换成本地时间

t1 = time.localtime()
print(t1.tm_year, t1.tm_mon, t1.tm_mday, t1.tm_hour, t1.tm_min, t1.tm_sec)

print(time.localtime(0))
  • time.sleep(时间) - 程序休眠指定时间,单位秒

    time.sleep(2)
    
  • ​ :time.strftime(时间格式,结构体时间) - 结构体时间转字符串时间

    ​ :xxxx年xx月xx日 xx:xx:xx

    %Y  -%m  -%d  -%H  -(24小时制)
    %I  -(12小时制)
    %M  -%S  -%p  -   AM、PM(上午、下午)
    %a   -  星期英文单词缩写 
    %A  -   星期英文单词全拼
    %b  -   月份英文缩写
    %B  -   月份英文全拼
    
  • result = time.strftime('%Y年%m月%d日 %H:%M:%S', t1)
    print(result)
    
    # xxxx-xx-xx xx:xx:xx
    result = time.strftime('%Y-%m-%d %H:%M:%S', t1)
    print(result)
    
    result = time.strftime('%m月%d日 %p%I:%M %B', t1)
    print(result)
    
  • ​ :将字符串时间转换成结构体时间

    ​ :time.strptime(字符串时间,时间格式)

    ​ :t2 = ‘2010-10-2’

    t3 = time.strptime('2010-10-2', '%Y-%m-%d')
    print(f'周{
            t3.tm_wday + 1}')
    print(t3)
    
  • ​ :将字符串时间转换成时间戳(现将字符串时间转换成结构体时间)

    ​ :time.mktime(结构体时间) - 将结构体时间转换成时间戳

    result = time.mktime(t3)
    print(result)
    

2.datetime模块

  • import datetime
from datetime import datetime, timedelta
(1)datetime 类型 - 处理包含年月日时分秒的时间
  • 创建datetime 时间对象
# datetime(year, month, day, hour=0, minute=0, second=0)
t1 = datetime(2010, 10, 2)
print(t1)       # 2010-10-02 00:00:00

t2 = datetime(2011, 9, 30, 11, 15, 30)
print(t2)       # 2011-09-30 11:15:30
  • 获取时间属性 :时间对象(t2.month)
print(t2.month)
print(t2.hour)
  • 获取当前时间
t3 = datetime.now()
print(t3)
  • 将datetime 转换为结构体时间
t4 = t3.timetuple()
print(t4)
  • 将datetime 转换成字符串时间
st5 = t3.strftime('%Y年%m月%d日 %a')
print(st5)
  • 将字符串时间转换成datetime
str6 = '2003-7-1'
t5 = datetime.strptime(str6, '%Y-%m-%d')
print(t5)   # 2003-07-01 00:00:00
(2)timedelta - 主要用于时间的加减操作
t6 = t5 + timedelta(days=45)
print(t6)   # 2003-08-15 00:00:00

t7 = t5 - timedelta(hours=8)
print(t7)

t8 = t5 + timedelta(days=1, hours=5, minutes=15)
print(t8)

3.hashlib模块

  • import hashlib
  • hashlib 模块 - 用于生成数据的hash摘要
  • hash 加密算法主要有:md5 和 shaxxx
  • hash 加密的特点
a. 不可逆(通过原数据加密后(产生的摘要)无法还原)
b. 相同的数据通过相同的算法产生摘要(密文)是一样的
c. 不同大小的数据在使用相同的算法产生的摘要的长度一致
  • 使用hashlib 产生数据的摘要
(1)根据算法创建hash对象
  • hashlib.算法名()
hash = hashlib.md5()
(2)添加数据
  • hash对象.update(二进制数据)
pw = '123456'
hash.update(pw.encode())
(3)获取摘要
result = hash.hexdigest()
print(result)

4.文件操作

(1)数据的存储
  • 程序中保存的数据默认都是存储在运行内容中,运行内存中的数据在程序结束的时候都会被释放
  • 如果希望程序运行过程中产生的数据在程序结束后不被销毁,就需要将数据存储到磁盘中
  • 将数据存储到磁盘过程叫做数据本地化
  • 数据本地化的基本原理 - 将数据通过文件存储到磁盘中
(2)文件操作(操作文件内容)
  • 文件操作主要解决两个问题:a.怎么将程序中的数据通过文件存储到磁盘中

    ​ b.怎么在程序中使用保存在文件中的数据

(3)文件操作基本步骤
  • 第一步:打开文件

    ​ :open(文件路径,读写模式,encoding=文件编码方式) - 以指定文件打开指定文件,返回文 件对象

1.文件路径 - 文件在计算机中的位置信息,以字符串的形式提供值

​ a. 绝对路径:文件在计算机中的全路径

​ b.相对路径: . - 表示当前目录(当前代码文件所在的目录),./可以省略

​ … - 表示当前目录的上层目录

2.读写模式 - 设置打开文件后支持的是读操作还是写操作;设置操作数据的类型是字符串还是二进制

​ 第一组值:

​ r - 只读

​ w - 只写;先清空原文件

​ a - 只写;保留原文件内容,在后面追加数据

​ 第二组值:

​ t - 数据类型是字符串(t可以省略)

​ b - 数据类型是bytes

​ ‘r’ == ‘rt’ == ‘tr’

  • 注意:如果是文本文件可以用 t 或者 b 的方式打开,如果是二进制文件只能以 b 的方式打开
3.encoding - 文件编码方式(打开的编码方式和文件的编码方式必须一致)

​ 以 b 的方式打开文件的是 encoding 不能赋值

  • 第二步:读文件、写文件

    ​ :文件对象.read()

    ​ :文件对象.write(数据)

  • 第三步:关闭文件

    ​ :文件对象.close()

  • 参数1:路径

open(r'/Users/yuting/授课/python2104/02语言基础/day14-常用系统模块和文件操作/images/test.txt')
open(r'./images/test.txt')
open(r'./test.py')
open('test.py')
open('images/test.txt')
open('../day14-常用系统模块和文件操作/test.py')

  • 参数2:读写模式
  • r - 只读
f = open('test.py', 'r')
f.read()
# f.write('abc')   # io.UnsupportedOperation: not writable
  • w - 只写;会清空原文件
f = open('test.py', 'w')
f.write('abc')
# f.read()      # io.UnsupportedOperation: not readable
  • a - 只写;会保留原文件内容
f = open('test.py', 'a')
f.write('abc')
# f.read()      # io.UnsupportedOperation: not readable
  • t - 读写数据的类型是字符串
f = open('test.py', 'rt')
result = f.read()
print(type(result))   # <class 'str'>

f = open('test.py', 'at')
f.write('abc')
  • b - 读写数据的类型是二进制
f = open('test.py', 'rb')
result = f.read()
print(type(result))     # <class 'bytes'>

f = open('test.py', 'ab')
f.write('abc'.encode())

f.close()
# f.write('abbs'.encode())      # ValueError: write to closed file

5.读写操作

(1)读操作
  • 文件对象.read() - 从读写位置开始读到文件结尾(读写位置默认在文件开头)
  • 文件对象.readline() - 从读写位置开始读到一行的结尾(只有在文本文件的时候有效)
  • 文件对象.readlines() - 一行一行的读,读完
(2)
f = open('test.py', encoding='utf-8')
result = f.read()
print(result)
f.seek(0)    # 设置读写位置到文件开头
print(f.read())
f.seek(0)     # 一行一行的读,读完
print(f.readlines())
f.close()

6.数据存储操作

(1)数据持久化的基本操作
  • 第一步:确定需要持久化的数据(确定哪个数据在下一次运行程序的时候还要用)
  • 第二步:创建文件保存数据初始值
  • 第三步:在程序中需要这个数据的时候从文件中读取数据
  • 第四步:如果数据发生改变,要将最新的数据写会文件中

练习:写一程序打印程序程序运行次数

第一次运行程序打印:1

第一次运行程序打印:2

第一次运行程序打印:3

f = open('count.txt', 'rt', encoding='utf-8')
count = int(f.read())
count += 1
print(count)

f = open('count.txt', 'w', encoding='utf-8')
f.write(str(count))
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_57748947/article/details/119255866

智能推荐

.默认拷贝构造函数,浅拷贝,深拷贝_类有默认拷贝构造函数 浅拷贝_Charle-Chen的博客-程序员秘密

类定义中,如果未提供自己的拷贝构造函数,则C++提供一个默认拷贝构造函数,就像没有提供构造函数时,C++提供默认构造函数一样。C++提供的默认拷贝构造函数工作的方法是:完成一个成员一个成员的拷贝,如果成员是类对象,则调用其拷贝构造函数或者默认拷贝构造函数。/*--------------------------------------在默认拷贝构造函数中,拷贝的策略是逐个成员依

php面试总结_zzw_zhangzhiwei的博客-程序员秘密

一般的面试要求1,主流框架2,对oop,mvc有深入的认识,能熟练使用常用的设计模式3,mysql优化,高效的索引4,缓存技术,熟悉常用的memcache,redis(更要注重两者的区别)5,shell脚本6,API设计思路(常用作手机端调用服务器的接口),对于安全注重考虑7,熟悉常用设计模式和算法,深入了解php的性能优化8,代码的健壮行,可读性及扩展性,9,

【SQL】表连接 --半连接_weixin_34174322的博客-程序员秘密

半连接: 当一张表在另一张表找到匹配的记录之后,半连接(semi-jion)返回第一张表中的记录。与条件连接相反,即使在右节点中找到几条匹配的记录,左节点的表也只会返回一条记录。另外,右节点的表一条记录也不会返回。半连接通常使用IN 或 EXISTS 作为连接条件。下面是一个例子:SQL&gt; set linesize 999SQL&gt; s...

mybatis父查询中的参数传递到子查询中使用_mybatis父子查询参数传递_zjun1001的博客-程序员秘密

需求数据库表是按照日期进行分表,查找数据时候,不同日期的数据到不同的表中查找,此时日期作为参数传递。在有父、子查询的SQL语句时,希望子查询能够使用到父查询中的参数(如日期)。实现将参数作为数据库表返回值的某一列,进行传递。此时,可以在resultMap中获取到。示例如下。Dao层List &lt;PicMoreDetailVo&gt; selectPicList(@Param("tableName") String tableName, @Param("picVo") PicMa..

ubuntu 安装caj阅读器_sxl-63的博客-程序员秘密

Ctrl+Alt+t 打开命令终端安装wine软件 : sudo apt-get install wine下载CAJViewer安装包 : http://pan.baidu.com/s/1mhwEvAK安装rar格式解压缩命令 : sudo apt-get install unrar新建cajviewer文件夹并把CAJViewer安装包解压缩  : sudo mkdir cajv...

Unity3D-刚体与触发器组件_renwen1579的博客-程序员秘密

部分内容由千峰教育(莫新宇)听课笔记总结PropertiesIs Trigger If enabled, this Collider is used for triggering events, and is ignored by the physics engine.Material Reference to the Physics Material that determines how this Collider interacts with others.Ce...

随便推点

vue双向绑定,Android学习路线总结,绝对干货_学vue还是android_普通网友的博客-程序员秘密

Android学习路线总结,绝对干货安辉Android码农一个,公众号:Android开发666 《Android App开发从入门到精通》作者294 人赞同了该文章title: Android学习路线总结,绝对干货tags: Android学习路线,Android学习资料,怎么学习androidgrammar_cjkRuby: true—一、前言不知不觉自己已经做了几年开发了,由记得刚出来工作的时候感觉自己能牛逼,现在回想起来感觉好无知。懂的越多的时候你才会发现懂的越少。如果你的知识

【ADNI】数据预处理(2)获取 subject slices_Houchaoqun_XMU的博客-程序员秘密

ADNI Series1、【ADNI】数据预处理(1)SPM,CAT122、【ADNI】数据预处理(2)获取 subject slices3、【ADNI】数据预处理(3)CNNs4、【ADNI】数据预处理(4)Get top k slices according to CNNs5、【ADNI】数据预处理(5)Get top k slices (pMCI_sMCI) accord...

数据结构-树状数组_[0, 109, 185, 210, 190, 144, 94, 53, 27, 12]_长剑凌清秋的博客-程序员秘密

文章目录博客推荐模板一维树状数组单点修改,区间查询区间修改,单点查询区间修改,区间查询二维树状数组单点修改,区间查询区间修改,单点查询 &amp;&amp; 区间修改,区间查询练习校门外的树数星星(Stars)[SDOI2009]HH的项链上帝造题的七分钟博客推荐1.https://blog.csdn.net/flushhip/article/details/791657012.https:...

linux回复uuid出错解决_fsck修改了uuid出错_drbinzhao的博客-程序员秘密

VMware启动后,迅速在VMware启动界面单击鼠标左键,将操作环境切换到VMware,并且要马上按下键盘上的“F2”键。切换CD启动 ls -l /dev/disk/by-uuid 启动时按shift, e, 修改uuid,然后ctrl+x具体操作: 1. 出现ubuntu alert! /dev/disk/by-uuid/########### does not ex

NVIC中断与定时器学习_nvic 挂起_cleverlove11的博客-程序员秘密

NVIC中断与定时器(一)NVIC1、NVIC的特性● STM32F405xx/07xx 和 STM32F415xx/17xx 具有 82 个可屏蔽中断通道● 16 个可编程优先级(使用了 4 位中断优先级)● 低延迟异常和中断处理● 电源管理控制● 系统控制寄存器的实现2、中断优先级(4位)优先级组别占先式优先级副优先级44位/16级0位/1级33位/8级1位/2级22位/4级2位4级11位/2级3位/8级00位/1级4位

谈谈Spring Ioc的理解_donggu3451的博客-程序员秘密

原文:http://blog.csdn.net/qq_22654611/article/details/52606960学了几天Ioc了,但是对它的理解还是模模糊糊,看了这篇博客感觉对Ioc有了更深的理解一一、分享Iteye的开涛对Ioc的精彩讲解  首先要分享的是Iteye的开涛这位技术牛人对Spring框架的IOC的理解,写得非常通俗易懂,以下内容全部来自原文,原文地址:...

推荐文章

热门文章

相关标签