Python中的一些东西如果不常用的话很容易混淆,比如说os.path.split和os.path.splitext这两个函数,看着很像,细分的话发现自己竟然有点搞不清了,只能测试跑个demo看一下,着实难受,为了方便之后的使用,这里还是记录一下。

但是一些很常用的还是要记住的嗷!

os.path.split()

os.path.split()是用于将路径分割成目录文件名两部分。

比如有路径如下 ‘/home/user/file.txt’,os.path.split(该路径)则会得到一个列表list

  • list[0] 为/home/user/

  • list[1] 为file.txt

案例演示

1
2
3
4
5
6
7
import os

path = '/home/user/file.txt'
directory, filename = os.path.split(path)

print('Directory:', directory)
print('Filename:', filename)

os.path.splitext()

简单一句话说就是:用于分离文件名和扩展名。

它接受一个文件路径作为参数,返回一个元组,其中包含文件名(去掉扩展名后的部分)和扩展名(包括点号)。如果路径中没有扩展名,则返回空字符串。

比如路径:“/home/user/documents/example.txt”

os.path.splitext(该路径)则会得到一个元组:(‘/home/user/documents/example’, ‘.txt’)

如果路径是/home/user/documents/example,则返回('/home/user/documents/example', '')

案例演示

1
2
3
4
5
6
7
import os

path = "/home/user/documents/example.txt"
# .txt
print(os.path.splitext(path)[1])
# /home/user/documents/example
print(os.path.splitext(path)[0])

获取昨天的日期并格式化

看到这个标题会不会想到time相关的函数,而且不止time还有datetime函数。

当我用time函数只能获取的今天的日期,但是发现我好像不会获取昨天的日期,这里就简单记录一下吧!

  • 更强的一种写法(写成一句话,可以用来装x!)

yesterday=(datetime.datetime.now() + datetime.timedelta(days=-1)).strftime("%Y-%m-%d")

案例演示

1
2
3
4
5
6
7
8
9
import datetime

# 获取今天的时间
today = datetime.datetime.today()
# 今天的时间偏移一天,得到昨天的时间
yesterday = today - datetime.timedelta(days=1)
# 将昨天的时间序列化并输出
yesterday_str = yesterday.strftime("%Y-%m-%d")
print(yesterday_str)

获取当前时间并格式化

这个获取的时间跟上面的不一样,使用的是time模块。

其实Python中获取时间的模块总共有三个,这里会用两个就行,还有个calendar模块就不多bb了。

1
2
3
4
5
6
7
import time

obj_time = time.localtime()

current_time = time.strftime("%Y-%m-%d %H:%M:%S", obj_time)

print(current_time)

Python中二进制和16进制之间的转化

之前我是不太熟悉进制之间的相互转换的,然后自从自己封装过一个pcap报文之后,也对数据报包,封包什么的没有了过多的担心和不会了。

还有一个别人经常说的ASCII码就普遍默认是16进制的,但是很多ASCII也会有二进制的对照表,这个就暂时认为是16进制的罢!

主要有两个函数

  • binascii.a2b_hex()
    • 将16进制数据转为二进制数据
  • binascii.hexlify()
    • 将二进制转为16进制数据

案例演示

没有案例,实在不熟!^_^

获取执行Linux命令后的结果

通过os.system(Shell语句)只能获取到执行Shell语句后的成功与否的值。

例如:tag = os.system(“rm -rf a.txt”)

  • 如果命令执行成功,则返回值为0;
  • 如果命令执行失败,则返回值为非零值,通常为命令的错误码。

如果想获取shell语句执行后的结果则需要导入另一个包subprocess

如果还想获得明文,则就必须对result进行decode

案例演示

1
2
3
4
5
import subprocess

command = "ls -l"
result = subprocess.check_output(command, shell=True)
print(f"命令执行结果:{result.decode()}")