python的几种常用用法(掌握)

cherish the present / 2023-08-22 / 原文

Python常用的自动化小脚本,必须收藏!

前言

大家好,我是鬼仔。

今天给大家分享几个python常用的自动化小脚本。无论是日常生活,还是工作开发,这几个脚本都常常会用到!

  1. 1. List转JSON、String转JSON

  2. 2. 时间格式转换

  3. 3. 读取文件地址

  4. 4. 二维码图片生成

  5. 5. 条形码图片生成

  6. 6. list数据对比

  7. 7. json数据对比

  8. 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列表解析中使用了条件判断,只有当xlist2中才会被添加到结果中;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_str1json_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
码农鬼仔
 
 
关注后可发消息