【python零基础入门学习】python进阶篇之时间表示方法和异常处理以及linux系统的os模块执行shell命令以及记账程序编写教学(一)

news2025/2/25 6:30:43

 本站以分享各种运维经验和运维所需要的技能为主

《python零基础入门》:python零基础入门学习

《python运维脚本》: python运维脚本实践

《shell》:shell学习

《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战

《k8》暂未更新

《docker学习》暂未更新

《ceph学习》ceph日常问题解决分享

《日志收集》ELK+各种中间件

《运维日常》运维日常

《linux》运维面试100问

时间表示方法和异常处理

时间表示方法:

 

time模块:

时间表示方法:

  • 时间戳:自1970-1-1 0:0:0到某一时间之间的秒数

  • UTC时间,世界协调时.

  • struct_time元组:9个元素组成:(年月日时分秒,一周中第几天,一年中的第几天,是否是夏季节约时间--原来时间-1)

闰秒---- 61

>>> import time
#获取当时的时间戳
>>> time.time()
1575854726.0655887  -----1970--至今

#获取UTC的字符串形式时间
>>> time.ctime()
'Mon Dec  9 09:26:30 2019'

#获取当前时间的9元组
>>> time.localtime()
time.struct_time(tm_year=2019, tm_mon=12, tm_mday=9, tm_hour=9, tm_min=27, tm_sec=2, tm_wday=0, tm_yday=343, tm_isdst=0)
>>> t = time.localtime()
>>> t.tm_year
2019
>>> t.tm_yday
343

#算数计时器:
import time

result = 0

start = time.time()
for i in range(1,10000001):
    result += i
end = time.time()

print(result)
print(end - start)

#睡眠3秒
>>> import time
>>> time.sleep(3)

#返回特定的时间格式
>>> time.strftime('%Y-%m-%d %H:%M:%S')
'2019-12-09 09:48:38'

>>> time.strftime('%a %A')
'Mon Monday'

#把时间字符串转化为9元素组格式
>>> t = time.strptime('2019-12-09 09:48:38', '%Y-%m-%d %H:%M:%S')
>>> t.tm_year
2019
>>> time.strptime('2019-12-09 09:48:38', '%Y-%m-%d %H:%M:%S')
time.struct_time(tm_year=2019, tm_mon=12, tm_mday=9, tm_hour=9, tm_min=48, tm_sec=38, tm_wday=0, tm_yday=343, tm_isdst=-1)

#应用
import time

t9 = time.strptime('2019-12-09 09:00:00', '%Y-%m-%d %H:%M:%S')
t12 = time.strptime('2019-12-09 12:00:00', '%Y-%m-%d %H:%M:%S')

with open('mylog.txt') as fobj:
    for line in fobj:
        t = time.strptime(line[:19],'%Y-%m-%d %H:%M:%S')
        if t > t12 :
            break
        if t >=t9:
            print(line,end='')

# with open('mylog.txt') as fobj:
#     for line in fobj:
#         t = time.strptime(line[:19],'%Y-%m-%d %H:%M:%S')
#         if t9 <= t <= t12 :
#             print(line,end='')


 datetime模块:

简单应用:
>>> from datetime import datetime 
>>> datetime.now()
datetime.datetime(2019, 12, 9, 10, 48, 9, 388722)
>>> t.year
2019
>>> t.month
12
>>> t.day
9
>>> t.min
t.min     t.minute  
>>> t.minute
48
>>> t.hour
10
>>> t.second
52
>>> t.microsecond
887151


>>> t9 = datetime.strptime('2019-12-9 10:55:29' , '%Y-%m-%d %H:%M:%S') #指定字符串转成datetime对象
>>> t9
datetime.datetime(2019, 12, 9, 10, 55, 29)

>>> t = datetime.now()
>>> t
datetime.datetime(2019, 12, 9, 10, 55, 29, 493483)
>>> t.strftime('%Y/%m/%d %H:%M:%S')   #datetime对象转成指定字符串  
'2019/12/09 10:55:29'


案例一:

from datetime import datetime

t9 = datetime.strptime('2019-12-09 09:00:00', '%Y-%m-%d %H:%M:%S')
t12 = datetime.strptime('2019-12-09 12:00:00', '%Y-%m-%d %H:%M:%S')

with open('mylog.txt') as fobj:
    for line in fobj:
        t = datetime.strptime(line[:19],'%Y-%m-%d %H:%M:%S')
        if t > t12 :
            break
        if t >=t9:
            print(line,end='')

案例二:
# 计算时间差,获取从现在开始前100天,后100天
>>> from datetime import datetime,timedelta
>>> t = datetime.now()
>>> dats = timedelta(days=100,hours=1)
>>> t
datetime.datetime(2019, 12, 9, 11, 22, 46, 973981)
>>> t - dats 
datetime.datetime(2019, 8, 31, 10, 22, 46, 973981)
>>> t + dats 
datetime.datetime(2020, 3, 18, 12, 22, 46, 973981)

异常处理:

  • - 没有异常处理的代码,当程序遇到错误时,程序将会崩溃,终止执行,在屏幕上打印报错信息

  • - 异常处理是,提前考虑到程序运行过程中将会出现的错误,给出这些错误的解决方案,使得程序不要崩溃,还可以继续执行下去

try:
    num = int(input('number: '))
    result = 100 / num
    print(result)
    print('Done')
except (ValueError, ZeroDivisionError) as e:
    print('无效输入',e)
except (EOFError, KeyboardInterrupt) :
    print('\nBye-Bye')

#0 报错不能作为除数: ZeroDivisionError: division by zero
# asdasd  值不对类型  : ValueError: invalid literal for int() with base 10: 'asdasdasd'
#  Ctrl D 直接结束: EOFError: EOF when reading a line
# >>> asdasdasd  直接Ctrl C----->结果:KeyboardInterrupt
#>>> a = [1 , 2 ]
#>>> a[3]    下标没有这个索引,只有0 1 --->IndexError: list index out of range
#>>> b     还没有定义变量b:   ----->NameError: name 'b' is not defined

try:
    num = int(input('number: '))
    result = 100 / num

except (ValueError, ZeroDivisionError) as e:
    print('无效输入',e)
except (EOFError, KeyboardInterrupt) :
    print('\nBye-Bye')
    exit(1)  #程序遇到exit将会彻底结束,并且返回1,正确输出
else:
    print(result) #前面的代码正确执行的时候,才执行
finally:
    print('一定要执行的语句')

print('Done')

触发异常:

def set_age(name,age):
    if not 0 < age < 120:
        raise ValueError('年龄超出正常范围')
    print('%s is %s years old' % (name,age))
if __name__ == '__main__':
    set_age('牛老师',200)

import myerror

#调用上面的函数:

try:
    name = input('名字: ')
    age = int(input('年龄: '))
    myerror.set_age(name,age)
except ValueError :
    print('请输入0~120的年龄')
except (EOFError, KeyboardInterrupt) :
    print('\nBye-Bye')

断言:

• 断言是一句必须等价于布尔值为真的判定

• 此外,发生异常也意味着表达式为假

def set_age(name,age):
    assert 0 < age < 120,'年龄超出正常范围'

    print('%s is %s years old' % (name,age))

if __name__ == '__main__':
    try:
        age = int(input('年龄: '))
        set_age('牛牛',age)
    except (ValueError,AssertionError) as e:
        print('错误:',e)
    except (KeyboardInterrupt,EOFError):
        print('\nBye-Bye')

OS模块:

import os
os.getcwd()  #pwd
os.listdir()  #ls
os.mkdir('/root/dd')  #mkdir
os.makedirs('/root/dd/ss/ss/ss') #mkdir -p
os.chdir() #cd
os.remove() #rm -rf 
os.symlink('/etc/passwd','mimo')  # ln -s
os.chmod('zhuji',0o755) # chmod 755 zhuji
#注意:linux命令chmod使用的进制为 8进制
>>> 0o755
493
os.chmod('zhuji',493) #十进制
os.stat('zhuji') #文件的详细信息,什么时候被改动或者被访问
#访问时间
#更改change时间:指定内容更改
#更改modify时间:内容以及权限都算在内
>>> os.stat('sss.py')
os.stat_result(st_mode=33188, st_ino=6426766, st_dev=2050, st_nlink=1, st_uid=0, st_gid=0, st_size=4, st_atime=1575875055, st_mtime=1575875055, st_ctime=1575875055)
>>> import time
>>> time.ctime(1575875055)
'Mon Dec  9 15:04:15 2019'
>>> sss = os.stat('sss.py')
>>> sss.st_atime
1575875055.8465357
>>> sss.st_size
4

判断:
os.path.isabs('/etc') #是绝对路径吗?
os.path.isdir('/asdf') #/asdf不存在也返回Ture
---修改一下os.path.isabs('/asdf')
os.path.isfile() #存在并且是文件吗? [ -f fname ]
os.path.ismount() #存在并且是挂载点吗?
os.path.isdir() #存在并且是目录吗? [ -d dname ]
os.path.islink() #存在并且是软链接吗?
os.path.exists() #存在吗? [ -e d/fname ]

>>> path = '/root/nsd1907/py02/day01/sss.txt'
>>> os.path.split(path)
('/root/nsd1907/py02/day01', 'sss.txt')
>>> os.path.basename(path)
'sss.txt'
>>> os.path.dirname(path)
'/root/nsd1907/py02/day01'
>>> os.path.join('/root/nsd1907/py02/day01','sss.txt')
'/root/nsd1907/py02/day01/sss.txt'


import shutil
shutil.copy('/etc/hosts','zhuji')#拷贝到当前
shutil.copytree()  #拷贝目录


案例之遍历linux系统的目录:
# 递归列出目录中所有内容
>>> list(os.walk('anquan'))
[('anquan', ['console.apps', 'console.perms.d', 'limits.d', 'namespace.d'], ['access.conf', 'chroot.conf', 'console.handlers', 'console.perms', 'group.conf', 'limits.conf', 'namespace.conf', 'namespace.init', 'opasswd', 'pam_env.conf', 'sepermit.conf', 'time.conf', 'pwquality.conf']), ('anquan/console.apps', [], ['config-util', 'xserver', 'liveinst', 'setup']), ('anquan/console.perms.d', [], []), ('anquan/limits.d', [], ['20-nproc.conf']), ('anquan/namespace.d', [], [])]
>>> data = list(os.walk('anquan'))   # 列表由5个元组构成
>>> len(data)
5
# 构成列表的元组有统一的结构:(字符串,列表,列表)
# 进一步观察元组结构:(路径字符串,该路径下目录列表,该路径下文件列表)
>>> data[0]
('anquan', ['console.apps', 'console.perms.d', 'limits.d', 'namespace.d'], ['access.conf', 'chroot.conf', 'console.handlers', 'console.perms', 'group.conf', 'limits.conf', 'namespace.conf', 'namespace.init', 'opasswd', 'pam_env.conf', 'sepermit.conf', 'time.conf', 'pwquality.conf'])
>>> data[1]
('anquan/console.apps', [], ['config-util', 'xserver', 'liveinst', 'setup'])
>>> data[2]
('anquan/console.perms.d', [], [])
# 遍历,打印5行元组
>>> for item in os.walk('anquan'):
...   print(item)
# 遍历,将元组中的三项分别赋值给3个变量
>>> for path, folders, files in os.walk('anquan'):
...   print(path, folders, files)
# 遍历,将目录列表和文件列表也逐一遍历出来
>>> for path, folders, files in os.walk('anquan'):
...   print('%s:' % path)
...   for mulu in folders:
...     print(mulu, end='\t')
      print('')
...   for file in files:
...     print(file, end='\t')
...   print('\n')

pickle模块:

  • 可以将任意的数据类型写到文件,还可以无损地取出


>>> import pickle
>>> shopping_list = ['apple','banana','egg','orange']
#将列表写入文件
>>> with open('/tmp/shopping.data' , 'wb') as fobj :
...     pickle.dump(shopping_list,fobj)
... 

#在文件中将列表取出
>>> with open('/tmp/shopping.data' , 'rb') as fobj :
...     alist = pickle.load(fobj)
... 

>>> type(alist)
<class 'list'>
>>> alist
['apple', 'banana', 'egg', 'orange']
>>>

案例练习:

记账程序:

import pickle
import os
from time import strftime


def save(fname):
    '记录收入'
    date = strftime('%Y-%m-%d')
    try:
        amount = int(input('金额: '))
        comment = input('备注: ')
    except ValueError:
        print('输入的金额无效')
        return
    except (KeyboardInterrupt,EOFError):
        print('\nbye')
        exit(1)
    # 在fname文件中取出最新余额,加上当前收入金额,即为最新余额
    with open(fname,'rb') as fobj:
        records = pickle.load(fobj)

    balance = records[-1][-2] + amount

    #将最新记录添加到文件中
    record = [date, amount, 0, balance, comment]
    records.append(record)
    with open(fname,'wb') as fobj:
        pickle.dump(records, fobj)


def cost(fname):
    '记录支出'
    date = strftime('%Y-%m-%d')
    try:
        amount = int(input('金额: '))
        comment = input('备注: ')
    except ValueError:
        print('输入的金额无效')
        return
    except (KeyboardInterrupt,EOFError):
        print('\nbye')
        exit(1)

    # 在fname文件中取出最新余额,减去当前支出金额,即为最新余额
    with open(fname,'rb') as fobj:
        records = pickle.load(fobj)

    balance = records[-1][-2] - amount

    #将最新记录添加到文件中
    record = [date, 0, amount, balance, comment]
    records.append(record)
    with open(fname,'wb') as fobj:
        pickle.dump(records, fobj)

def query(fname):
    '查询'
    #打印表头
    print('%-12s%-8s%-8s%-12s%-20s' % ('date','save','cost','balance','comment'))

    #取出全部记录:
    with open(fname , 'rb') as fobj:
        records = pickle.load(fobj)

    #打印记录
    for record in records:
        print('%-12s%-8s%-8s%-12s%-20s' % tuple(record))

def show_menu():
    cmds = {'0':save,'1':cost,'2':query}
    menu = """(0) 收入
(1) 支出
(2) 查询
(3) 退出
请选择(0/1/2/3): """
    fname = 'account.data'
    init_data = [
        ['2019-12-10',0,0,10000,'init data']
    ]
    #如果文件不存在,则创建并且写入初始化数据
    if not os.path.exists(fname):
        with open(fname,'wb') as fobj:
            pickle.dump(init_data,fobj)
    while 1:
        try:
            choice = input(menu).strip()
        except (EOFError, KeyboardInterrupt):
            choice = '3'
        # except KeyError:
        #     print('无效输入:')
        #     continue
        # except ValueError:
        #     print('请按照提示数字输入,谢谢')

        if choice not in ['0','1','2','3']:
            print('无效输入,请根据提示数字输入,谢谢')
            continue

        if choice == '3' :
            print('bye-bye')
            break

        cmds[choice](fname)

if __name__ == '__main__':
    show_menu()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1037420.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第1篇 目标检测概述 —(1)目标检测基础知识

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。目标检测是计算机视觉领域中的一项任务&#xff0c;旨在自动识别和定位图像或视频中的特定目标&#xff0c;目标可以是人、车辆、动物、物体等。目标检测的目标是从输入图像中确定目标的位置&#xff0c;并使用边界框将其标…

Docker 自动化部署(保姆级教程)

Docker 自动化部署 1. jenkins 介绍1.1 参考链接&#xff1a;1.2 jenkins 概述1.3 jenkins部署项目的流程 2. jenkins 安装2.1 基于docker 镜像2.2 启动 jenkins 后端服务2.3 登录 jenkins 服务后端 3. jenkins自动化部署开始3.1 下载需要的插件3.2 创建任务3.2.1 描述3.2.2 配…

Vue3+element-plus切换标签页时数据保留问题

记录一次切换标签页缓存失效问题&#xff0c;注册路由时name不一致可能会导致缓存失效

Visio——绘制倾斜线段

一、形状 -> 图表和数学图形 -> 多行 二、放置多行线&#xff0c;可以发现存在两个折点 三、选择多行线&#xff0c;右键选择删除点&#xff0c;即可得到倾斜线段

【python爬虫】爬虫所需要的爬虫代理ip是什么?

目录 前言 一、什么是爬虫代理 IP 二、代理 IP 的分类 1.透明代理 2.匿名代理 3.高匿代理 三、如何获取代理 IP 1.免费代理网站 2.付费代理服务 四、如何使用代理 IP 1.使用 requests 库 2.使用 scrapy 库 五、代理 IP 的注意事项 1.代理 IP 可能存在不稳定性 2…

Linux指令(ls、pwd、cd、touch、mkdir、rm)

whoami who pwd ls ls -l clearls指令 ls ls -l ls -a :显示当前目录下的隐藏文件&#xff08;隐藏文件以.开头&#xff09;ls -a -l 和 ls -l -a 和 ls -la 和 ls -al &#xff08;等价于ll&#xff09; pwd命令 显示用户当前所在的目录 cd指令 mkdir code &#xff08;创建…

《Python趣味工具》——ppt的操作(1)

前面我们学习了如何利用turtle模块制作emoji&#xff0c;今天来看看PPT的相关操作&#xff1a; 文章目录 一、PPT的基础结构&#xff1a;二、PPT的相关操作&#xff1a;1. 导入pptx模块2. ppt的基本操作&#xff1a; 三、总结&#xff1a;四、 完整源码&#xff1a; 小L想要把 …

Blender 学习笔记(二)之坐标

文章目录 归零世界坐标系与局部坐标系物体的编辑模式万向坐标系视图坐标轴游标坐标轴原点变换轴心点 归零 alt G 键 世界坐标系与局部坐标系 在blender 中的物体&#xff0c;默认情况下是世界坐标系&#xff0c;也就是全局坐标系 当你按G 键&#xff0c;再按一次x 键时&…

周赛364(模拟+贪心,枚举,单调栈+前后缀分解,枚举+DFS)

文章目录 周赛364[8048. 最大二进制奇数](https://leetcode.cn/problems/maximum-odd-binary-number/)贪心 模拟 [100049. 美丽塔 I](https://leetcode.cn/problems/beautiful-towers-i/)枚举 [100048. 美丽塔 II](https://leetcode.cn/problems/beautiful-towers-ii/)单调栈 …

数据结构与算法——16.二叉树

这篇文章我们来讲一下二叉树 目录 1.概述 2.代码实现 1.概述 树&#xff1a;&#xff08;Tree&#xff09;是计算机数据存储的一种结构&#xff0c;因为存储类型和现实生活中的树类似所以被称为树。 树的源头被称为根&#xff0c;树其余分叉点被称为节点&#xff0c;而树这…

未知非参数需求和有限价格变动的动态定价

英文题目&#xff1a;Dynamic Pricing with Unknown Non-Parametric Demand and Limited Price Changes 中文题目&#xff1a;未知非参数需求和有限价格变动的动态定价 单位&#xff1a;麻省理工学院&#xff0c;剑桥 时间&#xff1a;2019 论文链接&#xff1a;https://do…

制作频谱灯

最近研究了下傅里叶变换&#xff0c;用它可以通过采集声音信号由时域转换到频域内&#xff0c;从而得到声音的频谱信息&#xff0c;可以做个频谱灯。 主要使用ESP32来实现了他&#xff0c;实现效果如下&#xff1a; 频谱灯 为了可以带出去露营&#xff0c;我把它做的很大&…

ubuntu20.04下源码编译colmap

由于稠密重建需要CUDA&#xff0c;因此先安装CUDA&#xff0c;我使用的是3050GPU&#xff0c;nvidia-smi显示最高支持CUDA11.4。 不要用sudo apt安装&#xff0c;版本较低&#xff0c;30系显卡建议安装CUDA11.0以上&#xff0c;这里安装了11.1版本。 下载&#xff1a; cuda_1…

C语言之内存函数篇(3)

目录 memcpy memcpy的使用 memcpy的模拟实现 NO1. NO2. memcpy可否实现重叠空间的拷贝 my_memcpy memcpy memmove memmove memmove 分析 代码 memset memset的使用 memcmp memcmp的使用 <0 0 >0 今天我们继续介绍几个重要的内存操作函数。&…

js中的数据结构:栈,队列,链表,字典哈希表,树

栈&#xff1a;先进后出 队列&#xff1a;先进先出 链表&#xff1a; 单链表&#xff1a; 双链表&#xff1a; 环形链表&#xff1a;最后一个数据的next指针不是指向null&#xff0c;指向的是任意之间的一个数据&#xff0c;形成一个环 数组和链表的区别&#xff1a; 字典和哈…

FPGA的汽车尾灯控制Verilog

名称&#xff1a;汽车尾灯控制Verilog 软件&#xff1a;Quartus 语言&#xff1a;Verilog 要求&#xff1a; 设计一个汽车尾灯控制器。假设汽车尾部各有2个指示灯&#xff08;LED&#xff09;&#xff0c;分别代表转弯、刹车&#xff0c;控制器功能包括&#xff1a; &…

微信收款码费率0.38太坑了

作为一个有多年运营经验的商家&#xff0c;我本人在申请收款功能时曾经走过了不少弯路。我找遍了市面上的知名的支付公司&#xff0c;但了解到的收款手续费率通常都在0.6左右&#xff0c;最低也只能降到0.38。这个过程吃过不少苦头。毕竟&#xff0c;收款功能是我们商家的命脉&…

有什么好用的设备管理软件?智慧巡检对后勤运维有什么帮助?

定期巡检在设备管理、后勤管理和运维管理中扮演着不可或缺的角色&#xff0c;以及及时发现异常并控制风险。然而&#xff0c;传统巡检工作存在弊端。为了解决这些问题&#xff0c;“的修”报修系统对巡检管理功能进行了突破性的设计和开发。   “的修”报修巡检管理功能包含了…

C++之内部类实现总结(二百三十五)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

vscode终端中打不开conda虚拟包管理

今天&#xff0c;想着将之前鸽的Unet网络模型给实现一下&#xff0c;结果发现&#xff0c;在vscode中运行python脚本&#xff0c;显示没有这包&#xff0c;没有那包。但是在其他的ipynb中是有的&#xff0c;感觉很奇怪。我检查了一下python版本&#xff0c;发现不是我深度学习的…