day15-时间模块和文件操作

day15-时间模块和文件操作
1时间模块
"""
1)提供时间值的类
datetime模块里的类:
datetime:提供的时间既有时分秒,又有年月日
time:提供的时间只有时分秒
date:只提供年月日
2)提供时间处理的类(提供时间操作的类,例如时间的加减等)
timedelta
"""

1.datetime

1)获取当前时间

t1 = datetime.now()
print(t1, type(t1))

t2 = datetime.today()
print(t2)

2)创建datetime对象(时间对象)

t2 = datetime(2002, 10, 12)
print(t2)
t3 = datetime(2012, 9, 3, minute=30)
print(t3)

3)单独获取时间数据(获取时间对象的数据)

# 创建时间对象
t2 = datetime(2021, 10, 12)
# 单独获取时间诗句
print(t2.year)
print(t2.month)
print(t2.day)
print(t2.hour)
print(t2.minute)
print(t2.second)
print(t2.weekday())

4)时间对象和字符串时间的转换

datetime.strptime(字符串时间,时间格式) - 将字符串时间转换成时间对象

t4_str = '2001-8-3 11:32:40'
t4 = datetime.strptime(t4_str, '%Y-%m-%d %H:%M:%S')
print(t4, t4.weekday())  

time.strptime(字符串时间,时间格式) - 将字符串时间转换成结构体时间

t6 = time.strptime(t4_str, '%Y-%m-%d %H:%M:%S')

5)将时间对象转换成字符串

时间对象.strftime(时间格式)

t7 = datetime(2020, 1, 5, 23, 50, 34)
# xxxx年xx月xx日 xx时xx分xx秒
t7_str = t7.strftime('%Y年%m月%d日 %H时%M分%S秒')   # 3.8版本及以上支持
print(t7_str)
# xx月xx日 星期
t7_str1 = t7.strftime('%m月%d日 %a')
# 几月 日
t7_str2 = t7.strftime('%b %d')
print(t7_str2)
# 上午 3点
t7_str = t7.strftime('%p %I')
print(t7_str)

2.timedelta - 对时间进行加减操作

# 创建事件对象
t8 = datetime(2020, 12, 31, 23, 59, 10)
# 加一天
result = t8 + timedelta(day = 1)
print(result)
#加一天零5个小时
result1 = t8 + timedelta(day=1, hours=5)
print(result1)
# 25小时之前
result2 = t8 - timedelta(hours=25)
print(result2)
# 一周之后
result3 = t8 + timedelta(weeks=1)
print(result3)
# 练习:封装一个函数可以将指定的字符串时间转换成时间戳
# xxxx - xx - xx xx:xx:xx
def change(str1:str, format='%Y-%m-%d %H:%M:%S'):
    import time
    # time。strptime(字符串时间,时间格式) - 将字符串时间转换成结构体时间
    str2 = time.strptime(str1, format)
    # time.mktime(结构体时间)  - 将结构体时间转换成时间戳
    result = time.mktime(str2)
    return result
2.文件操作

1.数据持久化(数据本地化)

"""
1)基本理论
程序中的数据默认是保存在运行内存中的,保存在运行内存中的数据在程序运行结束后会被自动销毁,而保存在硬盘、磁盘中的数据在程序运行结束后不会销毁
数据持久化:将数据以文本为单位保存在硬盘中
2)常见数据持久化的工具
数据库文件(.db、sqlite)、exce文件、csv文件、plist文件(.plist)、json文件(.json)、txt文件(.txt)
"""

2.文件操作 - 操作文件内容

文件操作基本流程:打开文件 -> 操作文件(读、写) -> 关闭文件

​ 1)打开文件

"""
open(文件路径,打开方式,encoding=文件编码方式) - 以指定的方式打开指定文件,并返回一个文件对象
a.文件路径 - 字符串;用来确定需要打开的是那个文件
            绝对路径:文件在计算机中的全路径,Windows系统一般以某个盘的名字开头
            相对路径:1)用.表示当前目录(目录即文件夹)
                    2)用..表示当前目录的上层目录
                    注意:当前目录指的是当前代码文件所在的目录
                         相对路径中最前面的./可以省略
                         
b.打开方式 - 字符串;决定打开文件后能读还是能写?决定读写的数据是字符还是二进制(默认是r只读)
            1)第一组值:决定读写的
            'r' - 只读
            'w' - 只写;打开的时候会清空原文件
            'a' - 只写;打开的时候不会清空原文件
            2)第二组值:决定数据类型(默认是t)
            'b' - 二进制类型
            't' - 字符串类型(文本)
            给打开方式赋值的是需要在两组值中每一种选一个值的组合:rt、rb、bw、wb...
            
            
注意:如果以读的方式打开不存在的文件,程序会报错;如果以写的方式打开一个不存在的文件,程序不会报错,并且会自动创建该文件

c.encoding - 文本文件的编码方式,常用的值是utf-8
             如果打开文件的时候设置的编码方式和文件本身的编码方式不一致,就会报编译的错误
             注意:如果是以带b的方式打开的文件,都不能给encoding赋值
"""
# ================ 绝对路径====================
# open(r'D:\python2106\PythonProject\01语言基础\day-15时间模块和文件操作\files\demo1.txt')
# ==================相对路径====================
# open(r'.\files\demo1.txt')
# open(r'..\day-15时间模块和文件操作\files\demo1.txt')

# ==========r - 只读==================
# f = open(r'.\files\demo1.txt', 'r')
# f.read()
# f.write('abc')    # io.UnsupportedOperation: not writable

# ======w - 只写;清空原文件===========
# f = open(r'files\demo1.txt', 'w')
# f.write('hello')
# f.read()          # io.UnsupportedOperation: not readable

# ========== a -只写;打开的时候不会清空原文件=========
# f = open(r'files\demo1.txt', 'a')
# f.write('123')
# f.read()    # io.UnsupportedOperation: not readable

# ========t - 字符串 ======================
# f = open(r'files\demo1.txt', 'rt')
# result = f.read()
# print(result, type(result))    # hello123123 <class 'str'>

# ===========b - 二进制(bytes)======================
# f = open(r'files\demo1.txt', 'rb')
# result = f.read()
# print(result, type(result))    # b'hello123123' <class 'bytes'>


# f = open(r'files\demo1.txt', 'wt')
# f.write('123')

# f = open(r'files\demo1.txt', 'wb')
# f.write(b'123')

# f = open(r'files\demo1.txt', 'ab')
# f.write(b'123')

# f = open(r'files\demo1.txt', 'at')
# f.write('weixiaoqin')

# f = open(r'files\demo1.txt', 'wb')
# f.write(b'er')

# f = open(r'files\demo1.txt', 'wt')
# f.write('sssss')


# ============ 文件不存在==========
# open(r'.\files\demo2.txt', 'r')   # FileNotFoundError: [Errno 2] No such file or directory: '.\\files\\demo2.txt'
# open(r'.\files\demo2.txt', 'w') # 若文件不存在,不会报错,并且会创建该文件
# open(r'files\demo3.txt', 'a')    # # 若文件不存在,不会报错,并且会创建该文件

# open(r'files\text.txt', encoding='utf-8')

​ 2)文件读写操作

"""
注意:pdf文件打开必须以带b的方式打开
a.读 - 获取文件内容
文件对象.read() - 从读写位置开始,读到文件结尾
文件对象.readline() - 从读写位置开始,读到一行的位置(只针对以t方式打开的文本有效)
b.写 - 将内容写入到文件中
文件对象.write(内容) - 将指定内容写入到文件中
"""

# f = open(r'files\demo1.txt')
# result1 = f.read()
# print(result1)
# print('-------------------------')
# f.seek(0)    # 将读写位置移动到文件开头
# result2 = f.read()
# print(result2)
#
# print('-------------')
# f.seek(0)
# result3 = f.readline()
# print(result3)
#
# result4 = f.readline()
# print(result4)
# 增
# f = open(r'files\demo1.txt', 'a')
# f.write('\nccc')
# 插入(先把源文件的内容读出来,然后操作读出来的内容,然后将原文件的内容清掉后再将修改后的内容写入)
# f = open(r'files\demo1.txt')
# result = f.read()
# lines = result.split('\n')
# # lines.insert(2, '000')   # 插入一行
# lines[1] = 'AAA'  # 修改某一行的内容
# print(lines)
# write_data = '\n'.join(lines)
# f = open(r'files\demo1.txt', 'w')
# f.write(write_data)

# 练习:把原文件的最后一行删掉
# f = open(r'files\demo1.txt')
# result = f.read()
# lines = result.split('\n')
# lines.pop()
# write_data = '\n'.join(lines)
# f = open(r'files\demo1.txt', 'w')
# f.write(write_data)

# 3).关闭文件
# 文件对象.close()
# f.close()
# f.write('abc')   # ValueError: I/O operation on closed file.

4)用下面这种方式打开的文件,离开文件上下文,文件会自动关闭

"""
with open(文件路径,打开方式,encoding=编码方式) as 文件对象:
	文件上下文
"""
# with open(r'files\demo1.txt') as f:
#     print(f.read())

# print(f.read())   # ValueError: I/O operation on closed file.

3.数据持久化的方法:

1)数据持久化的方法

"""
第一步:确定需要持久化的数据
第二步:创建文件保存数据(确定需要持久化的数据的初始值)
第三步:程序中需要数据的时候从文件中读数据
第四步:数据如果发生改变,要将最新的数据写入到文件中
"""
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值