Python常用的自动化小脚本,必须收藏!
原创 鬼仔 码农鬼仔 2023-08-19 18:00 发表于广东前言
大家好,我是鬼仔。
今天给大家分享几个python常用的自动化小脚本。无论是日常生活,还是工作开发,这几个脚本都常常会用到!
-
1. List转JSON、String转JSON
-
2. 时间格式转换
-
3. 读取文件地址
-
4. 二维码图片生成
-
5. 条形码图片生成
-
6. list数据对比
-
7. json数据对比
-
8. 文件到达1M后,按照时间清除文件
一、List转JSON、String转JSON
可以直接使用Python内置的json模块将列表(List)和字符串(String)转换为JSON格式。例如:
import json
# 列表
my_list = ['Apple', 'Banana', 'Cherry']
# 将列表转换为JSON格式
json_data = json.dumps(my_list)
print(json_data) # 输出结果:["Apple", "Banana", "Cherry"]
# 字符串
my_string = '{"name": "Jane", "age": 28, "city": "Los Angeles"}'
# 将字符串转换为JSON格式
json_data = json.loads(my_string)
print(json_data) # 输出结果:{'name': 'Jane', 'age': 28, 'city': 'Los Angeles'}
二、时间格式转换
Python提供了datetime
模块,可以用来进行时间格式转换。以下是一些示例:
from datetime import datetime
# 示例1: 将字符串转换为时间对象
# 字符串格式:2022-08-10 14:30:00
string_time = '2022-08-10 14:30:00'
# 将字符串转换为时间对象
time_obj = datetime.strptime(string_time, '%Y-%m-%d %H:%M:%S')
# 输出时间对象
print("示例1结果:", time_obj) # 输出结果:2022-08-10 14:30:00
# 示例2: 将时间对象转换为字符串
# 时间对象
time_obj = datetime.now()
# 将时间对象转换为字符串
string_time = time_obj.strftime('%Y-%m-%d %H:%M')
# 输出字符串时间
print("示例2结果:", string_time) # 输出结果:(当前时间,格式:2023-04-21 16:52)
# 示例3: 时间戳与时间对象的转换
# 时间戳
timestamp = 1660301400
# 将时间戳转换为时间对象
time_obj = datetime.fromtimestamp(timestamp)
# 输出时间对象
print("示例3结果(时间戳转时间对象):", time_obj) # 输出结果:2022-08-11 14:30:00
# 将时间对象转换为时间戳
timestamp = int(time_obj.timestamp())
# 输出时间戳
print("示例3结果(时间对象转时间戳):", timestamp) # 输出结果:1660301400
# 示例4: 计算时间差
# 时间对象1
time_obj1 = datetime.strptime('2022-08-10 14:30:00', '%Y-%m-%d %H:%M:%S')
# 时间对象2
time_obj2 = datetime.strptime('2022-08-15 14:30:00', '%Y-%m-%d %H:%M:%S')
# 计算时间差
time_difference = time_obj2 - time_obj1
# 输出时间差
print("示例4结果:", time_difference) # 输出结果:5 days, 0:00:00
三、读取文件地址
当使用Python编程时,可以使用open()
函数打开文件并读取其中的内容。在使用open()
函数时,需要指定文件路径和文件打开模式。文件路径可以是相对路径或绝对路径。以下是一些示例代码:
读取当前目录下的文件
如果当前目录下存在名为example.txt
的文件,那么可以使用以下代码读取文件内容:
with open('example.txt', 'r') as f:
file_content = f.read()
在这段代码中,我们使用open()
函数打开了example.txt
文件,并将其赋值给变量f
。'r'
参数表示以只读模式打开文件。使用with
语句可以确保文件在使用完毕后被正确地关闭。我们使用f.read()
方法读取文件内容,并将其赋值给变量file_content
。
读取其他目录下的文件
如果要读取/home/user/Documents/example.txt
文件的内容,可以使用以下代码:
import os
file_path = '/home/user/Documents/example.txt'
with open(os.path.abspath(file_path), 'r') as f:
content = f.read()
print(content)
在这个示例中,我们使用了os.path.abspath()
函数来获取文件的绝对路径。这可以确保我们使用的是正确的文件路径格式。然后,我们使用with
语句打开文件并读取其中的内容,并将其赋值给变量content
。最后,我们使用print()
函数输出文件内容。
需要注意的是,在不同的操作系统中,文件路径的格式可能不同。在Linux系统中,文件路径使用斜杠/
分隔;在Windows系统中,文件路径使用反斜杠\
分隔。如果要编写可移植的代码,建议使用os.path
模块来处理文件路径。
四、二维码图片生成
在Python中,使用qrcode库可以生成二维码图片。以下是一个示例代码:
import qrcode
# 创建二维码对象
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4,
)
# 设置要生成的字符串
data = 'https://www.example.com/'
# 添加数据到二维码对象中
qr.add_data(data)
# 编译二维码对象
qr.make(fit=True)
# 创建二维码图片
img = qr.make_image(fill_color='black', back_color='white')
# 保存二维码图片
img.save('qrcode.png')
在这个示例中,我们首先使用qrcode.QRCode()
函数创建了一个二维码对象qr
,并设置了版本、纠错级别、方块大小和边框大小。然后,我们设置了要生成的字符串data
,并将其添加到二维码对象中。接着,我们调用qr.make()
方法编译二维码对象。最后,我们调用qr.make_image()
方法生成二维码图片,并将其保存为qrcode.png
文件。
需要注意的是,生成二维码图片时需要安装qrcode库。可以使用pip
命令来安装:pip install qrcode
。安装完成后即可使用qrcode库生成二维码图片。同时,qrcode库提供了许多选项供调整二维码图片的大小、方块颜色、背景颜色等等。
五、条形码图片生成
在Python中,使用barcode库可以生成条形码图片。以下是一个示例代码:
import barcode
from barcode.writer import ImageWriter
# 设置要生成的字符串
data = '123456789'
# 创建EAN13条形码对象
ean = barcode.get('ean13', data, writer=ImageWriter())
# 保存条形码图片
filename = ean.save('barcode')
在这个示例中,我们首先设置了要生成的字符串data
。然后,我们创建了一个EAN13条形码对象ean
,并指定了条形码类型和要生成的字符串。接着,我们调用ean.save()
方法将条形码图片保存为barcode.png
文件。
barcode库支持多种条形码类型,如EAN13、EAN8、Code39等等。可以根据需求选择不同的类型来生成不同类型的条形码图片。同时,barcode库还提供了许多选项供调整条形码图片的大小、颜色等等。
需要注意的是,生成条形码图片时需要安装barcode库。可以使用pip
命令来安装:pip install python-barcode
。安装完成后即可使用barcode库生成条形码图片。
六、条形码图片生成
在Python中,可以使用id-validator库来生成符合规范的身份证号码。以下是一个示例代码:
from id_validator import validator
# 生成10个符合规范的身份证号码
for i in range(10):
id_card = validator.create_id_card()
print(id_card)
在这个示例中,我们首先导入id-validator库中的validator
模块。然后,使用create_id_card()
函数生成符合规范的身份证号码,并将其打印出来。
需要注意的是,生成身份证号码时需要遵守国家的相关规定,不得违法或滥用。同时,id-validator库提供了许多选项供调整生成的身份证号码的性别、出生日期等信息。需要根据实际需求进行调整。
需要注意的是,id-validator库需要安装才能使用。可以使用pip
命令来安装:pip install id-validator
。
七、list数据对比
在Python中,可以使用set集合或列表解析来对比两个列表之间的差异或相同元素。以下是一个示例代码:
使用set集合
list1 = [1, 2, 3, 4, 5]
list2 = [3, 4, 5, 6, 7]
# 求交集
intersection = list(set(list1) & set(list2))
print(intersection)
# 求并集
union = list(set(list1) | set(list2))
print(union)
# 求差集
difference = list(set(list1) - set(list2))
print(difference)
在这个示例中,我们首先将两个列表转换成set集合,然后可以使用&
运算符求交集、|
运算符求并集和-
运算符求差集。最后,将集合转换成列表进行打印。
使用列表解析
list1 = [1, 2, 3, 4, 5]
list2 = [3, 4, 5, 6, 7]
# 求交集
intersection = [x for x in list1 if x in list2]
print(intersection)
# 求并集
union = list(set(list1 + list2))
print(union)
# 求差集
difference = [x for x in list1 if x not in list2]
print(difference)
在这个示例中,我们使用列表解析对比两个列表之间的差异或相同元素。其中,intersection
列表解析中使用了条件判断,只有当x
在list2
中才会被添加到结果中;union
列表解析中先将两个列表相加再转换成set集合,最后再转换成列表;difference
列表解析中同样使用了条件判断,只有当x
不在list2
中才会被添加到结果中。
以上两种方法都可以对比两个列表之间的差异或相同元素,可以根据具体需求选择使用哪种方法。需要注意的是,如果列表中有重复元素,使用set集合可能会导致元素丢失。
八、json数据对比
在Python中,可以将JSON数据转换为Python对象,例如字典或列表,然后再进行对比。以下是一个示例代码:
import json
# 定义两个JSON数据
json_str1 = '{"name": "Tom", "age": 18, "gender": "male"}'
json_str2 = '{"name": "Jerry", "age": 20, "gender": "male"}'
# 将JSON数据转换为Python对象
data1 = json.loads(json_str1)
data2 = json.loads(json_str2)
# 对比两个Python对象
for key in data1:
if key in data2:
if data1[key] != data2[key]:
print(f"{key}不相同:{data1[key]} {data2[key]}")
else:
print(f"{key}在第二个JSON数据中不存在")
for key in data2:
if key not in data1:
print(f"{key}在第一个JSON数据中不存在")
在这个示例中,我们首先定义了两个JSON数据字符串json_str1
和json_str2
。然后使用json.loads()
函数将JSON数据转换为Python对象。最后对比两个Python对象中的差异或相同元素,打印出不相同或不存在的键值对。
需要注意的是,对比JSON数据时需要注意JSON数据的格式是否正确,否则可能会导致JSON数据解析失败,无法转换成Python对象。同时,如果JSON数据中有嵌套的结构,需要使用递归算法进行对比。
九、批量获取类方法
在Python中,可以使用反射机制来获取一个类中的所有方法,包括实例方法和类方法。以下是一个示例代码:
import inspect
class MyClass:
def __init__(self, name):
self.name = name
def my_method1(self):
pass
def my_method2(self):
pass
@classmethod
def my_classmethod(cls):
pass
@staticmethod
def my_staticmethod():
pass
# 获取类的所有方法,包括实例方法和类方法
methods = inspect.getmembers(MyClass, predicate=inspect.ismethod)
# 打印方法名、参数信息和返回值信息
for name, method in methods:
print(f"方法名:{name}")
print(f"参数信息:{inspect.signature(method)}")
print(f"返回值信息:{inspect.getfullargspec(method)}")
在这个示例中,我们首先定义了一个MyClass
类,其中包含了实例方法、类方法和静态方法。使用inspect.getmembers()
函数获取MyClass
类的所有方法,并使用inspect.ismethod
函数判断是否为方法。然后使用inspect.signature()
函数获取方法的参数信息,使用inspect.getfullargspec()
函数获取方法的返回值信息。最后遍历方法列表并打印每个方法的名字、参数信息和返回值信息。
需要注意的是,如果方法中有默认参数、可变长参数或关键字参数,需要对获取到的参数信息进行解析。同时,获取返回值信息时需要注意返回值类型和返回值注释的区别。
十、文件到达1M后,按照时间清除文件
可以使用Python中的os和time模块来实现当文件大小超过1M时,按照一定时间间隔清除文件的操作。以下是一个示例代码:
import os
import time
def clear_file(file_path, limit_size=1024*1024, clear_interval=3600):
"""
清除文件,当文件大小超过limit_size时,按照clear_interval的时间间隔清除文件。
:param file_path: 文件路径
:param limit_size: 文件大小限制,默认为1M
:param clear_interval: 清除文件的时间间隔,默认为3600秒(1小时)
"""
while True:
try:
# 获取文件大小
file_size = os.path.getsize(file_path)
# 如果文件大小超过限制,则清除文件
if file_size > limit_size:
os.remove(file_path)
print(f"文件已清除,文件路径:{file_path}")
else:
print(f"文件大小未超过限制,文件路径:{file_path}")
# 等待一定时间间隔后再进行下一次清除
time.sleep(clear_interval)
except Exception as e:
print(f"清除文件时发生异常:{e}")
break
# 示例用法
clear_file("test.txt", limit_size=1024*1024, clear_interval=3600)
在这个示例中,我们首先定义了一个clear_file()
函数,该函数接收文件路径、文件大小限制和清除文件的时间间隔三个参数。通过循环,不断获取文件大小并判断文件大小是否超过限制,如果超过限制,则清除文件,否则等待一定时间间隔后再进行下一次清除。同时,我们使用try except
语句捕获清除文件时可能会产生的异常情况,并打印异常信息。
需要注意的是,在实际应用中,还需要考虑清除文件时可能会产生的异常情况,如文件被占用等。另外,清除文件可能会对系统产生一定的影响,因此在使用该函数时需要谨慎。
码农鬼仔 一线互联网算法工程师,专注分享算法知识|面试技巧|职场感悟。 41篇原创内容 公众号 阅读 2287 码农鬼仔 关注后可发消息 标签:文件,示例,python,JSON,几种,json,使用,print,用法 From: https://www.cnblogs.com/cherishthepresent/p/17648059.html