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

本文详细介绍了Python中的os、time、datetime和hashlib模块,包括获取工作目录、列举文件、时间戳转换、数据摘要等核心函数。此外,还讲解了文件操作的基本步骤,如读写模式、数据持久化,并提供了读写文件的实例。同时,文章通过示例展示了如何利用文件实现程序运行次数的记录和学生信息的管理。
摘要由CSDN通过智能技术生成
os模块中常用的函数

1)os.getcwd() - 获取当前工作目录

print(os.getcwd())

2)os.listdir(文件夹路径) - 获去指定文件夹所有文件的名称

print(os.listdir(’./images’))

3)os.path.abspath(相对路径) - 获取指定文件、文件夹的绝对路径

print(os.path.abspath(’./files’))

time模块

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

注:格林威治时间和北京时间有8小时的时差

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

print(time.time())
# 1627612699.3731687

2.time.localtime() - 获取当前时间的本地时间,返回结构体时间

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

print(time.localtime())
print(time.localtime(1627612699.3731687))

3.time.sleep(时间) - 程序休眠指定时间,单位秒

4.time.strftime(时间格式,结构体时间) - 结构体时间转字符串时间

%Y  -%m  -%d  -%H  -(24小时制)
%I  -(12小时制)
%M  -%S  -%p  -   AM、PM(上午、下午)
%a   -  星期英文单词缩写 
%A  -   星期英文单词全拼
%b  -   月份英文缩写
%B  -   月份英文全拼

5.将字符串时间转换成结构体时间

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

6.将字符串时间转换成时间戳(先将字符串时间转换成结构体时间)

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

datetime模块

1.datetime类型 - 处理包含年月日时分秒的时间

1)创建datetime时间对象

from datetime import datetime
t1 = datetime(2010, 10, 2)
print(t1)
t2 = datetime(2011, 9, 30, 11, 15, 30)
print(t2)

2)获取时间属性

事件对象.year、时间对象.month、…

print(t2.month)
print(t2.hour)

3)获取当前时间

t3 = datetime.now()
print(t3)

4)将datetime转换成结构体时间

t4 = t3.timetuple()
print(t4)

5)将datetime转换成字符串时间/字符串转datetime

str5 = t3.strftime('%Y年%m月%d日 %a')
print(str5)
str6 = '2003-7-1'
t5 = datetime.strptime(str6, '%Y-%m-%d')
print(t5)

2.timedelta - 主要用于时间的加减操作

t6 = t5 + timedelta(days=45)
print(t6)
t7 = t5 - timedelta(hours=8)
print(t7)
t8 = t5 + timedelta(days=1,hours=5,minutes=15)
print(t8)
# 2003-08-15 00:00:00
# 2003-06-30 16:00:00
# 2003-07-02 05:15:00
hashlib模块 - 用于生成数据的hash摘要

1.hash加密的特点:

a.不可逆(通过原数据加密后(产生摘要)无法还原)

b.相同的数据通过相同的算法产生摘要(密文是一样的)

c.不同大小的数据在经过相同的算法产生的摘要的长度一致

2.使用hashlib产生条数据的摘要

根据算法创建hash对象

hash = hashlib.md5()

添加数据

hash.update(二级制数据)
pw = '123456'
hash.update(pw.encode())

python二进制数据类型 - bytes

字符串和bytes的相互转换

1)str -> bytes

方法一:bytes(字符串,‘utf-8’)

方法二:b’字符集’

方法三:字符串.encode()

2)bytes ->str

方法一:str(二进制数据,‘utf-8’)

方法二:二进制.decode()

3.获取摘要

result = hash.hexdigest()
print(result)	# e10adc3949ba59abbe56e057f20f883e

文件操作

  1. 数据的存储

程序中保存的数据默认都是存储在运行内容中,运行内存中的数据在程序结束的时候都会被释放

如果希望程序运行过程中产生的数据在程序结束后不被销毁,就需要将数据存储到磁盘中

将数据存储到磁盘过程叫做数据持久化、数据本地化

数据持久化的基本原理 - 将数据通过五年间存储到磁盘中

  1. 文件操作(操作文件内容)

文件操作主要解决两个问题:a.怎么将程序中的数据通过文件存储到磁盘中 b.怎么在程序中使用保存在文件中的数据

  1. 文件操作基本步骤

第一步:打开文件

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

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

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

​ b.相对路径:. - 表示当前目录

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

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

​ 第一组值:

​ r - 只读

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

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

​ 第二组值:

​ t - 数据类型是字符串

​ b - 数据类型是bytes

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

注意:如果是文本文件可以用t或者b的方式打开,如果是二进制文件只能以b的方式打开

3)encoding - 文件编码方式(打开的编码方式和文件的编码方式必须一致)

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

第二步:读文件、写文件

文件对象.read()

文件对象.write(数据)

第三步:关闭文件

f.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:读写模式
# 1) r - 只读
# f = open('test.py', 'r')
# f.read()
# # f.write('abc')   # io.UnsupportedOperation: not writable

# 2) w - 只写;会清空原文件
# f = open('test.py', 'w')
# # f.write('abc')
# # f.read()      # io.UnsupportedOperation: not readable

# 3) a - 只写;会保留原文件内容
# f = open('test.py', 'a')
# # f.write('abc')
# # f.read()      # io.UnsupportedOperation: not readable

# 4) t  -  读写数据的类型是字符串
# f = open('test.py', 'rt')
# result = f.read()
# print(type(result))   # <class 'str'>

# f = open('test.py', 'at')
# f.write('abc')

# 5) 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
读写操作
  1. 读操作

1)

文件对象.read() - 从读写位置开始读到文件结尾(读写位置默认在文件开头)

*文件对象.seek(0) 设置读写位置

文件对象.readline() - 从读写位置开始读到一行的结尾(只有在读文本文件的时候有效)

文件对象.readlines() - 一行一行读完

2)

"""
f = open('test.py', encoding='utf-8')
result = f.read()
print(result)

print('-------------------------华丽的分隔线-------------------------------')
f.seek(0)    # 设置读写位置到文件开头
print(f.read())

print('-------------------------华丽的分隔线-------------------------------')
f.seek(0)
print(f.readline())
print(f.readline())
print(f.readline())
print(f.readline())
print('===:', f.readline(), '====', sep='')

print('-------------------------华丽的分隔线-------------------------------')
f.seek(0)
print(f.readlines())
f.close()

print('-------------------------华丽的分隔线-------------------------------')
f = open('test.py', 'a', encoding='utf-8')
f.write('\nabc\n123\n456')
# f.writelines(['abc', '123', '456'])
f.close()
数据存储操作
# 数据持久化的基本步骤:
"""
第一步:确定需要持久化的数据(确定哪个数据在下一次运行程序的时候还要用)
第二步:创建文件保存数据初始值
第三步:在程序中需要这个数据的时候从文件中读数据
第四步:如果数据发生改变,要将最新的数据写回文件中
"""


# 练习1:写一程序打印程序运行次数
"""
第1次运行程序打印: 1
第2次运行程序打印: 2
第3次运行程序打印: 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))

# 练习2:添加学生,并且在添加完成后显示所有学生信息(只需要学生名字)
"""
请输入学生姓名: 小明
小明   ['小明']

请输入学生姓名:小花
小明 小花   ['小明', '小花']

请输入学生姓名:q
(程序结束)

请输入学生姓名: 张三
小明 小花 张三   ['小明', '小花', '张三']

请输入学生姓名: 李四
小明 小花 张三 李四    ['小明', '小花', '张三', '李四'] 

请输入学生姓名:q
(程序结束)
"""
# 需求1:
# while True:
#     name = input('请输入学生姓名:')
#     if name == 'q':
#         break
#
#     f = open('students.txt', 'a', encoding='utf-8')
#     f.write(f'{name} ')
#
#     f = open('students.txt', encoding='utf-8')
#     print(f.read())

# 需求2:
while True:
    name = input('请输入学生姓名:')
    if name == 'q':
        break

    f = open('students2.txt', encoding='utf-8')
    all_student = eval(f.read())    # '[]', "['name']"
    all_student.append(name)
    print(all_student)

    f = open('students2.txt', 'w', encoding='utf-8')
    f.write(str(all_student))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值