python通用代码片
Easul Lv4

日志记录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 日志打印
# \033[91m 红色 error
# \033[32m 绿色 warn
# \033[30m 黑色 info
# \033[0m 重置文本颜色
def logger(msg: str, colorStart:str = "\033[30m"):
colorEnd = "\033[0m"
currentTime = time.strftime("%Y-%m-%d_%H:%M:%S", time.localtime())
print(f"{colorStart}[{currentTime}] {msg}{colorEnd}")

def info(msg: str):
logger(msg, "\033[30m")

def warn(msg: str):
logger(msg, "\033[32m")

def error(msg: str):
logger(msg, "\033[91m")

json的操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import json

def jsonOperation():
dict = {'asdf': '1'}
# json转字符串
json2Str = json.dumps(dict)
print(json2Str)
# 字符串转json
str2JSON = json.loads(json2Str)
print(str2JSON)

def jsonFileOperation():
dict = {'asdf': '1'}
# 从json文件加载json
with open('text.json','r',encoding='utf-8') as f :
print(json.load(f))
# 将json写到文件
with open('text.json', 'w') as f:
json.dump(dict, f)

jsonOperation()
jsonFileOperation()

获取脚本传入参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# python3 test.py --number 123 
import getopt
import sys


if __name__ == "__main__":
test = ""
# 单字母参数,需要输入的加:,不需要输入的不用加
# 多字母参数,需要输入的加=,不需要输入的不用加
opts, args = getopt.getopt(sys.argv[1:], "hn:", ["help", "number="])

for opt, arg in opts:
if opt == "-n" or opt == "--number":
test = arg
if opt == "h" or opt == "help":
print("hello")

if test == "":
print("不允许 为空")
sys.exit(0)

时间

1
2
3
4
5
6
7
8
9
10
11
12
import time

def timeOperation():
# unix时间
time1 = round(time.time())
# unix时间的毫秒形式
time2 = round(time.time() * 1000)
# 时间格式化
time3 = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
# 休眠一秒
time.sleep(1)
timeOperation()

执行命令行命令

1
2
3
4
import os

def test():
os.system("mkdir /home/test/test")

路径相关

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import os
import shutil

def osOperation():
# 路径是否存在
print(os.path.exists("./test"))
# 获取当前路径
print(os.getcwd())
# 创建文件夹
os.mkdir("/test")
# 创建多及目录
os.makedirs("/tes/testt/test")
# 递归删除目录
shutil.rmtree("./asdf/asdf/asdf")
# 创建一个文件
os.mknod("../asdf.txt")
# 删除一个文件
os.remove("../asdf.txt")
# 获取路径分隔符
print(os.sep)
# 执行命令行命令
os.system("mkdir /home/test/test")

# 获取路径下文件与文件夹
for item in os.listdir("./"):
print(item)

osOperation()

文件相关

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def fileOperation():
# 读文件
with open("./README.md", "r", encoding="UTF-8") as f:
line = f.read()
print(line)
# 写文件
strList = ["asdf", "asdfasdf"]
with open("./test.md", "w", encoding="UTF-8") as f:
for line in strList:
f.write(f"{line}\n")
# 边读边写
with open("./README.md", "r", encoding="UTF-8") as r, open("./test.md", "w", encoding="UTF-8") as w:
w.write(r.read())

fileOperation()

正则

1
2
3
4
5
6
7
8
9
10
11
12
import re

def regexOperation():
s = "asdfffff;fff;\nfasdf2222;12;"
# 找到所有匹配的结果
result1 = re.findall(r"asdf(.*?);", s)
# 判断是否有匹配正则的地方
result2 = re.search(r"asdf(.*?);", s)
# 从行的开头进行匹配
result3 = re.match(r"asdf.*;", s)

regexOperation()

python文件调用

调用上级目录的文件

1
2
3
4
sys.path.append("..")
import Maker

Maker.test()

调用上级目录的子文件

1
2
3
4
sys.path.append("..")
from test import Maker

Maker.test()

获取系统类型

1
2
3
import platform

print(platform.system().lower() == 'windows')

脚本退出

1
exit(0)

线程池

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
from multiprocessing import Pool
from func_timeout import func_set_timeout

# 设置函数最长执行时间
@func_set_timeout(9)
def work(num, file):
print(file)

return "hello"

def threadOperation():
threadNumber = 2
results = []
p = Pool(threadNumber)
for index in range (threadNumber):
if index == threadNumber - 1:
# 如果work只有一个参数,且是字符串,直接传入会报错,因为字符串会被看成多个传入的参数
# 所以这里放了两个参数
result = p.apply_async(work, args=(1, "11"))
else:
result = p.apply_async(work, args=(2, "2"))
results.append(result)
p.close()
p.join()

for line in results:
# 线程执行结果用get获取
print(line.get())

threadOperation()

selenium的浏览器点击操作

参考链接

 评论