time模块,random模块,OS模块,sys模块

本文详细介绍Python中time模块的功能,包括时间展示、转换及计算时间差,同时讲解random模块的使用,涵盖随机数生成、选择及序列打乱,提供实际代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

time模块

在这里插入图片描述

时间展示

import time       #导入模块
print(time.time())   #时间戳时间
print(time.strftime('%Y-%m-%d %x'))  #字符串格式化时间
print(time.strftime('%Y-%m-%d %H:%M:%S'))

print(time.localtime())   #结构化时间本地时间
print(time.gmtime())         #结构化时间英国时间
#时间戳和格式化时间都是依赖于结构化时间
p = time.strptime('2018-6-16', '%Y-%m-%d')

输出:
在这里插入图片描述

时间转换

import time
print(time.gmtime(1500000000)) #时间戳-->结构化时间
print(time.localtime(1500000))

#结构化时间-->时间戳 
time_tuple = time.localtime(15000000)
print(time.mktime(time_tuple))

#结构化时间-->字符串时间
print(time.strftime("%Y-%m-%d %x"))
print(time.strftime("%Y-%m-%d ", time.localtime(1800000000)))

#字符串时间-->结构化时间
print(time.strptime("2018-10-17", "%Y-%m-%d"))
print(time.strptime("01/01/2018", "%m/%d/%Y"))

#结构化时间 --> %a %b %d %H:%M:%S %Y串
time.asctime(结构化时间) 如果不传参数,直接返回当前时间的格式化串
print(time.asctime(time.localtime(150000000)))
print(time.asctime())

#时间戳 --> %a %b %d %H:%M:%S %Y串
time.ctime(时间戳)  如果不传参数,直接返回当前时间的格式化串
print(time.ctime())
print(time.ctime(18000000))

python中的日期时间格式符号
1 %y 两位数的年份表示(00-99)
2 %Y 四位数的年份表示(000-9999)
3 %m 月份(01-12)
4 %d 月内中的一天(0-31)
5 %H 24小时制小时数(0-23)
6 %I 12小时制小时数(01-12)
7 %M 分钟数(00=59)
8 %S 秒(00-59)
9 %a 本地简化星期名称
10 %A 本地完整星期名称
11 %b 本地简化的月份名称
12 %B 本地完整的月份名称
13 %c 本地相应的日期表示和时间表示
14 %j 年内的一天(001-366)
15 %p 本地A.M.或P.M.的等价符
16 %U 一年中的星期数(00-53)星期天为星期的开始
17 %w 星期(0-6),星期天为星期的开始
18 %W 一年中的星期数(00-53)星期一为星期的开始
19 %x 本地相应的日期表示
20 %X 本地相应的时间表示
21 %Z 当前时区的名称
22 %% %号本身
在这里插入图片描述
在这里插入图片描述

利用time计算时间差

import time
def cal_time(fmt_time, fmt):
    now = time.time()
    time_before = time.mktime(time.strptime(fmt_time, fmt))
    sub_time = now - time_before
    struct_time = time.gmtime(sub_time)
    return '过去了%d年%d月%d天%d小时%d分钟%d秒' % (struct_time.tm_year - 1970, struct_time.tm_mon - 1,
                                        struct_time.tm_mday - 1, struct_time.tm_hour,
                                        struct_time.tm_min, struct_time.tm_sec)
ret = cal_time('2018-8-17 08:30:00', '%Y-%m-%d %H:%M:%S')

print(ret)

random模块

import random
#随机小数
print(random.random())   # 大于0且小于1之间的小数
print(random.uniform(1, 4))  #大于1小于4的小数

#随机整数
print(random.randrange(1, 2))
print(random.randint(1, 1000))    # 大于等于1且小于等于1000之间的整数
print(random.randrange(1, 20, 2))       # 大于等于1且小于10之间的奇数

#随机选择一个返回
print(random.choice([1, '23', [4, 5]]))  #1或者23或者[4,5]

随机选择多个返回
print(random.sample([1, '23', [4, 5]], 2))  #随机选择多个返回,返回的个数为函数的第二个参数


#打乱列表顺序
item = [1, 3, 5, 7, 9]
random.shuffle(item)  #打乱次序
print(item)

基于random的验证码例子

def v_code():
    code = ''
    for i in range(5):
        num = random.randint(0, 9)
        alf = chr(random.randint(65, 90))
        add = random.choice([num, alf])
        code = "".join([code, str(add)])
    return code
print(v_code())

OS模块

在这里插入图片描述

os.path

在这里插入图片描述
例子

import os
print(os.getcwd())      # 获取当前文件所在的路径
print(os.curdir)
print(os.pardir)
os.chdir("D:\\")
os.makedirs('dirname1/dirname2')        #创建多级目录文件
os.mkdir('dirname/son_dir')             #创建单级目录文件
os.removedirs('dirname1/d2')
print(os.listdir('D:\myPython'))
os.remove()#删除一个文件
print(os.stat(r'D:\myPython'))

print(os.name)
path = 'python%2.mok.py'%os.sep
os.system("dir")
ret = os.popen("dir").read()
print(ret)

print(os.path .abspath('userinfo') ) #绝对路径

print(os.path.abspath('userinfo'))
print(os.path.split(os.path.abspath('userinfo')))
print(os.path.dirname(os.path.abspath('userinfo')))
print(os.path.basename(os.path.abspath('userinfo')))
print(os.path.exists(r'D:\python11\day28\userinfo2'))
print(os.path.isabs(r'userinfo2'))
print(os.path.isfile(r'userinfo'))
print(os.path.isdir(r'dirname1'))
print(os.path.join('D:\\python11\\day28','userinfo'))
print(os.path.getsize(r'D:\python11'))
print(os.path.getsize(r'D:\python'))

os.stat(‘path\filename’) 获取文件\目录信息的结构说明

stat 结构:
 
st_mode: inode 保护模式
st_ino: inode 节点号。
st_dev: inode 驻留的设备。
st_nlink: inode 的链接数。
st_uid: 所有者的用户ID。
st_gid: 所有者的组ID。
st_size: 普通文件以字节为单位的大小;包含等待某些特殊文件的数据。
st_atime: 上次访问的时间。
st_mtime: 最后一次修改的时间。
st_ctime: 由操作系统报告的"ctime"。在某些系统上(如Unix)是最新的元数据更改的时间,<br>在其它系统上(如Windows)是创建时间(详细信息参见平台的文档)。
 

找一个别人的例子

import os
# 1.切换路径=============
d = os.getcwd()  #获取当前的工作路径
os.chdir('D:\\')#目录的切换
print(os.getcwd())
# (切换过去怎么回来呢?再chdir一下就回来了)
os.chdir(d)
print(os.getcwd())

# 2.执行系统命令=============
# system和popen都是执行系统命令的,但是popen比较好用,因为它有返回值
os.system('dir') #显示的是gbk的编码,
# 解决system乱码的方法
ret = os.popen('dir')  #popen是有返回值的,而且自己转码了
print(ret.read())

# 3.创建文件夹=和创建文件==========
os.mkdir('temp')  #生成一个文件夹,,只能生成一个
os.mkdir(r'temp2\inner')  #这样就报错了
os.makedirs(r'temp1\inner',exist_ok=True)  #创建多级目录
os.makedirs(r'temp1\inner\inner2',exist_ok=True)  #创建多级目录
# 那么如果文件夹已经存在了,就报错了,那我如果不想
# 让报错(就是假如存在,就不创建也不报错),那么就加上exist_ok=True

# 创建文件
f = open(r'temp1\inner\file','w')
f.close()

# 4.======重命名文件夹=====
os.rename(r'temp1\inner\inner2','temp1\inner\haiyan')

# 5.=====删除文件夹和删除文件=========
# 先删文件,
os.remove(r'temp1\inner\file')
# 再删文件夹
os.removedirs(r'temp1\inner\haiyan') #删除一个文件夹的时候,如果上一级的文件夹是空的,就一并删除了。以此类推
os.rmdir((r'temp1\inner') )#只删除一个文件夹

# 6.子目录========
print(os.listdir(os.getcwd())) #打印当前目录下的目录
print(os.walk(os.getcwd())) #<generator object walk at 0x00000000021C6728>
ret = os.walk(os.getcwd()) #拿到的东西比较多,如果你关心子目录下的东西,就用walk
print(list(ret))


# 7.====获取文件或者目录的信息的结构说明========
print(os.stat('temp'))
# st_atime:上次访问的时间
# st_mtime:最后一次修改的时间
# st_ctime:最新的更新时间
print(os.sep) # 打印的是\
print(os.getcwd())
file_path = '%s%s%s'%(os.getcwd(),os.sep,'filename')  #拼接一个路径(方式一)
print(file_path)
print(os.path.join(os.getcwd(),'filename'))#拼接一个路径(方式二)

# 8.====字符串指示当前使用平台
print(os.name) #如果是win,则打印的是nt  如果是,linux,打印poxis
# 应用场景:当你输入命令的时候,要判断是win系统还是 linux系统。就可以用
# os.name去判断了

# 9.===获取系统环境变量=====
print(os.environ)

# 10.路径相关的=======
print(os.path.abspath('namedtuple.py'))
print(os.path.dirname(os.path.abspath('namedtuple.py')))
print(os.path.dirname(os.path.dirname(os.path.abspath('namedtuple.py'))))
print(os.path.exists(os.path.abspath('namedtuple.py')))

sys模块

sys模块是与python解释器交互的一个接口

sys.argv           命令行参数List,第一个元素是程序本身路径
sys.exit(n)        退出程序,正常退出时exit(0),错误退出sys.exit(1)
sys.version        获取Python解释程序的版本信息
sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform       返回操作系统平台名称

例子:

import sys
print(sys.argv) #实现从程序外部向程序传递参数。(在命令行里面输打开路径执行)
name=sys.argv[1] #命令行参数List,第一个元素是程序的本身路径
password = sys.argv[2]
if name=='egon' and password == '123':
    print('继续执行程序')
else:
   exit()

sys.exit()#退出程序,正常退出时exit(0)
print(sys.version)#获取python解释的版本信息
print(sys.maxsize)#最大能表示的数,与系统多少位有关
print(sys.path)#返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
print(sys.platform)#返回操作系统平台名称
print(sys.argv) #['D:/myPython/sys模块.py']列表。当前文件的文件路径
#执行一个程序有两种方法:(1)debug执行;(2)直接执行
import logging
inp = sys.argv[1] if len(sys.argv) > 1 else 'warning'
logging.basicConfig(level=getattr(logging, 'DEBUG'))
num = (input(">>>"))
logging.debug(num)
a = num * 100
logging.debug(a)
b = a - 10
logging.debug(b)
c = b + 5
print(c)
CH341A编程器是一款广泛应用的通用编程设备,尤其在电子工程和嵌入式系统开发领域中,它被用来烧录各种类型的微控制器、存储器和其他IC芯片。这款编程器的最新版本为1.3,它的一个显著特点是增加了对25Q256等32M芯片的支持。 25Q256是一种串行EEPROM(电可擦可编程只读存储器)芯片,通常用于存储程序代码、配置数据或其他非易失性信息。32M在这里指的是存储容量,即该芯片可以存储32兆位(Mbit)的数据,换算成字节数就是4MB。这种大容量的存储器在许多嵌入式系统中都有应用,例如汽车电子、工业控制、消费电子设备等。 CH341A编程器的1.3版更新,意味着它可以与更多的芯片型号兼容,特别是针对32M容量的芯片进行了优化,提高了编程效率和稳定性。26系列芯片通常指的是Microchip公司的25系列SPI(串行外围接口)EEPROM产品线,这些芯片广泛应用于各种需要小体积、低功耗和非易失性存储的应用场景。 全功能版的CH341A编程器不仅支持25Q256,还支持其他大容量芯片,这意味着它具有广泛的兼容性,能够满足不同项目的需求。这包括但不限于微控制器、EPROM、EEPROM、闪存、逻辑门电路等多种类型芯片的编程。 使用CH341A编程器进行编程操作时,首先需要将设备通过USB连接到计算机,然后安装相应的驱动程序和编程软件。在本例中,压缩包中的"CH341A_1.30"很可能是编程软件的安装程序。安装后,用户可以通过软件界面选择需要编程的芯片类型,加载待烧录的固件或数据,然后执行编程操作。编程过程中需要注意的是,确保正确设置芯片的电压、时钟频率等参数,以防止损坏芯片。 CH341A编程器1.3版是面向电子爱好者和专业工程师的一款实用工具,其强大的兼容性和易用性使其在众多编程器中脱颖而出。对于需要处理25Q256等32M芯片的项目,或者26系列芯片的编程工作,CH341A编程器是理想的选择。通过持续的软件更新和升级,它保持了与现代电子技术同步,确保用户能方便地对各种芯片进行编程和调试。
内存分区情况的分析是嵌入式系统开发中的一个重要环节,特别是在资源有限的MCU(微控制器)环境中。标题提到的工具是一款专为分析Linux环境下的`gcc-map`文件设计的工具,这类文件在编译过程结束后生成,包含了程序在目标设备内存中的布局信息。这个工具可以帮助开发者理解程序在RAM、ROM以及FLASH等存储区域的占用情况,从而进行优化。 `gcc-map`文件通常包含以下关键信息: 1. **符号表**:列出所有定义的全局和静态变量、函数以及其他符号,包括它们的地址和大小。 2. **节区分配**:显示每个代码和数据节区在内存中的位置,比如.text(代码)、.data(已初始化数据)、.bss(未初始化数据)等。 3. **内存汇总**:总览所有节区的大小,有助于评估程序的整体内存需求。 4. **重定位信息**:显示了代码和数据如何在目标地址空间中定位。 该分析工具可能提供以下功能: 1. **可视化展示**:将内存分配以图形化方式呈现,便于直观理解。 2. **详细报告**:生成详细的分析报告,列出每个符号的大小和位置。 3. **比较功能**:对比不同编译版本或配置的`map`文件,查看内存使用的变化。 4. **统计分析**:计算各种内存区域的使用率,帮助识别潜在的优化点。 5. **自定义过滤**:允许用户根据需要筛选和关注特定的符号或节区。 虽然在MCU环境中,Keil IDE自带的工具可能更方便,因为它们通常针对特定的MCU型号进行了优化,提供更加细致的硬件相关分析。然而,对于通用的Linux系统或跨平台项目,这款基于`gcc-map`的分析工具提供了更广泛的适用性。 在实际使用过程中,开发者可以利用这款工具来: - **优化内存使用**:通过分析哪些函数或数据占用过多的内存,进行代码重构或调整链接器脚本以减小体积。 - **排查内存泄漏**:结合其他工具,比如动态内存检测工具,查找可能导致内存泄漏的部分。 - **性能调优**:了解代码执行时的内存分布,有助于提高运行效率。 - **满足资源限制**:在嵌入式系统中,确保程序能在有限的内存空间内运行。 总结来说,`gcc-amap`这样的工具对于深入理解程序的内存布局和资源消耗至关重要,它能帮助开发者做出更明智的决策,优化代码以适应不同的硬件环境。在处理`map`文件时,开发者不仅能获取到程序的内存占用情况,还能进一步挖掘出可能的优化空间,从而提升系统的整体性能和效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值