前言
Python系列文章主要是记录自己学习成果及知识输出整合,提供一个温故而知新的场所。
本篇主要记录Python的文件时间模块、异常处理、文件路径处理。
一、os模块常用的方法
- 创建目录
- 创建多级目录
- 删除目录
- 重命名文件及目录
- 验证文件权限
- 文件路径
需要使用os模块,需先导入模块:import os
# 创建目录
def make_dir(path):
'''创建目录'''
os.mkdir(path)
print(f'创建目录:{path}成功')
e = 'E:\tutou' # tutou是之前没有的目录
make_dir(e)
# 创建多级目录
def make_many_dirs(path):
""" 创建多级目录 """
os.makedirs(path)
print(f'创建多级目录:{path}成功')
e = 'E:\A\B\C' # A、B、C是之前没有的目录
make_many_dirs(e)
# 删除空目录
def del_empty_dir(path):
""" 删除空目录 """
os.rmdir(path)
print(f'删除空目录:{path}成功')
del_empty_dir(e)
# 删除非空目录
def del_not_empty_dir(path):
""" 删除非空目录 """
# 这里不能使用os模块,需使用shutil
shutil.rmtree(path)
print(f'删除非空目录:{path}成功')
e = 'E:\A\B'
del_not_empty_dir(e)
# 重命名文件或文件名
def rename_dir(old, new):
""" 重命名 """
os.rename(old, new)
print(f'重命名文件{old}为{new}成功')
old = 'E:\A\B\C'
new = 'E:\A\B\D'
rename_dir(old, new)
# 验证文件权限 os.access(path, mode)
# mode:os.F_OK(是否存在)、os.R_OK(可读)、os.W_OK(可写)、os.X_OK(可执行)
# 验证文件或文件夹是否存在
d_path = 'E:\A\B\D'
value = os.access(d_path, mode=os.F_OK)
print(value)
# 获取文件路径
path = r'E:\A\B\D\test1.docx'
# 判断是否为目录
os.path.isdir(path)
# 判断是否为文件
os.path.isfile(path)
# 获取当前路径
os.getcwd()
# 获取绝对路径
os.path.abspath(path)
# 获取路径的目录
os.path.dirname(path)
# 判断路径是否存在,存在返回True
os.path.lexists(path)
# 进行路径分割,会将文件和目录进行分割,返回一个元组 E:\A\B\D\test1.docx ==> ('E:\A\B\D', 'test1.docx')
os.path.split(path)
# 对文件和路径进行拼接
e_path = 'E:\A\B\D'
file = 'test1.docx'
os.path.join(e_path, file)
二、时间模块
- time模块
"""
time模块
"""
# 获取时间戳:从时间元年(1970 1 1 00:00:00)到现在经过的秒数
print(time.time())
# 获取格式化时间对象:是九个字段组成的
print(time.localtime())
# 格式化时间对象和字符串之间的转换
s = time.strftime("%Y %m %d %H:%M:%S", time.localtime())
print(s)
# 把时间字符串转换成时间对象
s = time.strptime('2010 10 10','%Y %m %d')
print(s)
# 把时间戳转为时间元组
time_tulp = time.localtime(1633009202)
print(time_tulp)
# 把时间元组转为时间戳
times = time.mktime(time_tulp)
print(times)
# 截取时间元组中的部分
year = time.localtime().tm_year # 取年
month = time.localtime().tm_mon # 取月
day = time.localtime().tm_mday # 日
hour = time.localtime().tm_hour # 时
min1 = time.localtime().tm_min # 分
sec = time.localtime().tm_sec # 秒
wday = time.localtime().tm_wday # 当前周的第几天
yday = time.localtime().tm_yday # 当前年的第几天
isdst = time.localtime().tm_isdst # 是否夏令时(1是,0不是)
- datetime模块
"""
datetime模块
"""
import datetime
# date类:年月日
c = datetime.date(2010, 10, 10)
print(c)
# 获取date对象的各个属性
print(c.year, c.month, c.day)
# time类:时分秒
t = datetime.time(15, 13, 22)
print(t)
print(t.hour, t.minute, t.second)
# 把时间元组转换成时间格式
dr = datetime.datetime(2010, 11, 11, 11, 11, 11)
print(dr)
# datetime中的类,主要是用于数学计算的
# timedelta:时间的变化量
td = datetime.timedelta(days=1)
tr = datetime.timedelta(seconds=2)
print(tr)
# 参与数学运算
# 创建时间对象
# date, datetime ,timedelta
d = datetime.date(2010, 10, 10)
res = d+td
print(res)
# 时间变化量会产生进位
as12 = datetime.datetime(2010, 10, 10, 15, 22, 59)
res = as12+tr
print(res)
# 示例:计算某一年的二月份有多少天
# 普通计算:根据年份计算是否是闰年,是:29天 否:28天
# 用datetime模块
# 首先创建出指定年份的3月1日,然后让他往前走一天
year = int(input('请输入您需要查询的年份:'))
dt = datetime.timedelta(days=1)
de = datetime.date(year, 3, 1)
res = de - dt
print(res)
- calendar模块
"""
日历模块
"""
import calendar
# 获取年历
value = calendar.calendar(2019)
print(value)
# 获取某年某月的日历
value = calendar.month(2019, 2)
print(value)
# 是否闰年
v = calendar.isleap(2020)
print(v)
# 返回给定日期是周几
"""
周一 返回0
周二 返回1
周三 返回2
. 以此类推
.
.
周日 返回6
"""
r = calendar.weekday(2022, 7, 5)
print(r)
三、异常处理
Python有两种错误很容易辨认:语法错误和异常
常见异常错误:
常见异常错误 | 释义 |
---|---|
IndentationError | 缩进错误 |
SyntaxError | 语法错误 |
NameError | 名称错误 |
ZeroDivisionError | 0不能做除数 |
TypeError | 类型错误 |
- 异常处理,可以使用try except语句来捕获异常,if也可处理一些已知(预估到)的异常情况,但try结构,可以捕获一些未考虑到的异常情况。
# 语法结构1:执行try语句,如果有异常会执行except里面的代码,如果无异常就会执行else里面的代码,不管try语句有没有异常,都会去执行finally语句。
try:
执行代码
except:
发生异常执行的代码
else:
没有异常执行的代码
finally:
执行代码
# 语法结构2:执行try语句,如果有异常会执行except里面的代码,如果无异常就会执行else里面的代码
try:
执行代码
except:
发生异常执行的代码
else:
没有异常执行的代码
# 语法结构3
try:
执行代码
except:
发生异常执行的代码
# 根据用户的输入,求和
def sum_user(*args):
try:
sum = 0
for num in args:
sum = sum +num
except:
print('输入的不是数字')
else:
print(f'求和:{sum},计算完成')
sum_user('a', 2, 1) # 如果不加try、except捕获异常结构,这么传参会报错
# 使用8除以用户输入的整数,并且输出结果
def sample():
try:
num = int(input('请输入一个整数的除数:'))
value = 8/num
print(f'8除以{num}为:{value}')
except ZeroDivisionError:
print('除数不能为0')
except Exception as ex: # 除了以上已知的异常,获取其他无法预知的异常
print(f'未知的错误:{ex}')
sample()
- 抛出异常raise:捕获异常是抓到程序报出的一些错误不是代码中有意识设定的异常,抛出异常是代码设定主动引发的异常。
使用场景:根据程序需要,需要主动抛出异常,中断代码的执行
"""
用户密码长度小于8,抛出异常
"""
def input_pw():
pw = input('请输入密码:')
if len(pw) >= 8:
return pw
# 正确输入的规则告诉到用户(主动抛出异常)
ex = Exception('密码长度不对,密码长度不能小于8')
raise ex
input_pw()
- traceback 常看异常
try:
1/0
except:
# 打印异常,可将异常输入到文件
traceback.print_exc(file=open('文件路径', 'w+'))
# 返回异常信息
error = traceback.format_exc()
print(error)
总结
以上就是文章要表达的内容,本文简单介绍了Python文件路径处理、时间模块、异常处理的概念以及应用。