python基本语法及一些封装的方法(如果有新的想到的会更新)

文章展示了如何在Python中进行字符串到decimal的转换,计算文件和zip内文件的md5值,以及计算时间差。此外,还演示了获取模型字段信息和调用Java程序的方法,特别是当需要在Python中与Java加密算法对接时。

字符串转decimal

Decimal('10.064').quantize(Decimal('100.00'), rounding="ROUND_HALF_UP")

计算文件的md5:

import hashlib
hashlib.md5(open(filename, 'r').read()).hexdigest()

计算zip中某个文件的md5

def get_shp_md5(zip_name):
    """
    获取zip中shp的md5
    """
    zip_obj = zipfile.ZipFile(zip_name, "r")
    for i in zip_obj.filelist:
        if i.filename.endswith('shp') or i.filename.endswith('SHP'):
            return hashlib.md5(zip_obj.open(i.filename, 'r').read()).hexdigest()

python计算时间差,可计算出 年、月、日、周、时、分、秒

import datetime
from dateutil.relativedelta import relativedelta


a = datetime.datetime.strptime('2023-05-18', '%Y-%m-%d')
b = datetime.datetime.strptime('2019-05-17', '%Y-%m-%d')
c = relativedelta(dt1=a, dt2=b)

如下是返回结果
在这里插入图片描述

时间格式转换

def datetime_fmt(t, fmt='%Y-%m-%d'):
    if t.tzinfo:
        r = localtime(t).strftime(fmt)
    else:
        r = t.strftime(fmt)
    return r

获取model中的字段

def get_model_col_info(*model_list, keys=[]):
    check_dict = dict()
	for model in model_list:
		for field in model._meta.fields:
			type_field = type(field)
			if field.attname in keys or not keys:
				check_dict[field.attname] = {'type': type_field, 'name': field.verbose_name,
											 'max_length': field.max_length,
											 'choices': list(dict(field.choices).keys()),
											 'choices_dict': dict(field.choices),
											 'choices_dict_inverse': {v: k for k, v in dict(field.choices).items()},
											 'null': field.null}
				if type_field in (ForeignKey,):
					check_dict[field.attname]['choices'] = list(
						field.related_model.objects.values_list(field.related_fields[0][1].attname, flat=True))
    return check_dict

python调用java程序(有些时候,比如对接对方用java进行加密,同样的方法python不支持或者计算出的结果和java计算出的不一样,这时,就需要在python环境中调用java的方法)

大概思路(只支持python3):

  1. 安装jpype pip install jpype1
  2. 将java程序打成jar包: eclipse 项目右键->export->选择java下的runnable jar file next->选择路径、选择Extract required libraries into generated JAR->finish 后面的提示都点同意之类的
  3. python调用java
import jpype
import os
jar_path = os.path.abspath('.') + '/AddTwoNumbers.jar' # 获取jar包绝对路径
jpype.startJVM('usr/local/java/jdk.../jre/lib/amd64/server/libjvm.so', '-ea', '-Djava.class.path=%s' % jar_path) 
# 加载java虚拟机,第一个参数是Java的jdk安装位置,可以通过env | prep JAVA_HOME来查看;第二个参数仿照例子来写;第三个参数为jar包的绝对路径;
java_class = jpype.JClass('AddTwoNumsClass') # 通过输入类名称来获取指定的Java类
result = java_class.addTwoNumsFunc(1, 2) # 通过函数名称来调用该类的指定函数
jpype.shutdownJVM() # 关闭Java虚拟机,如果不写会在python程序退出时自动关闭

将mptt转成树的格式

  1. 将结果查出,在内存中转换
    def list_to_tree(data_list, parent_field=“parent_id”, node_field=“id”, root=None):
    “”"
    非递归 先把家族列表取出来 再转换成树
    parent_field: 父节点字段 类似于 parent_id
    node_field: 父节点被指向的字段 类似于 id
    root: 根节点的id
    “”"
    if not data_list:
    return list()
    root_level = min(data[“level”] for data in data_list)
    root_list = [data for data in data_list if data[“level”] == root_level] if not root else [i for i in data_list if i.get(node_field) == root]
    for i in data_list:
    i[‘children’] = [j for j in data_list if i.get(node_field) == j.get(parent_field)] # 将子节点挂接上
    if not i.get(“is_dir”) and not i[‘children’]:
    i.pop(‘children’)
    return root_list

  2. 将根节点查出,用递归查询(数据量较大的时候会比较快)
    def get_tree(base_obj, to_dict_func, **to_dict_func_params):
    “”"
    递归
    base_obj: 根节点
    to_dict_func: 对象转换成字典的方法
    to_dict_func_params: 调用对象转换成字典的方法 除了对象外的 额外的参数
    “”"
    data = to_dict_func(base_obj, **to_dict_func_params)
    if data.get(‘is_leaf_node’) is False:
    if not data.get(“children”):
    data[“children”] = list()
    for d in base_obj.children.filter(is_del=False, is_res_web=True).order_by(‘seq’):
    data[“children”].append(get_tree(d, to_dict_func, **to_dict_func_params))
    return data

### 回答1: Python是一种高级编程语言,具有简单易学、可读性强等特点。它的基本语法包括: 1. 使用缩进来表示代码块,不需要使用大括号。 2. 注释以 `#` 开头,只能单行注释。 3. 变量不需要声明类型,可以直接赋值。 4. 支持多种数据类型,包括整型、浮点型、字符串型、布尔型等。 5. 支持条件语句,包括 `if`、`elif` 和 `else`。 6. 支持循环语句,包括 `for` 和 `while`。 7. 支持函数定义和调用。 8. 支持异常处理,使用 `try` 和 `except`。 这些都是 Python基本语法,通过学习这些,就可以开始编写简单的 Python 程序了。 ### 回答2: Python基本语法是指在编写Python程序时,需要遵循的一些语法规则和要求。 首先,Python程序的每行代码通常以换行符结束,不需要使用分号作为语句的结束符号。这使得Python的代码具有较高的可读性。 其次,Python是一种强类型语言,不需要事先声明变量的类型,可以直接赋值并使用。同时,Python还支持动态类型,变量的类型可以根据赋值自动推断。 另外,Python使用缩进来表示代码块,而不是使用花括号或者关键字来标识。一般情况下,使用4个空格作为一个缩进层级。 在Python中,通过使用关键字来完成不同的功能,比如使用if-else语句完成条件判断,使用for循环和while循环实现循环操作,使用def关键字定义函数等等。 Python还支持丰富的数据类型,包括整数、浮点数、字符串、列表、元组、字典等等。同时,Python还提供了很多内置函数和标准库函数,可以实现常见的操作和功能。 最后,Python还支持面向对象编程,可以定义类和对象,并使用封装、继承和多态等特性来实现复杂的程序设计。 总之,Python基本语法简洁易读,非常适合初学者入门,并且拥有丰富的库和生态系统,可以支持各种不同的编程需求。 ### 回答3: Python是一种简洁而强大的编程语言,具有易读性和易于学习的特点。下面是Python基本语法概述: 1. 变量和数据类型:在Python中,我们可以直接给变量赋值而不需要声明类型。常见的数据类型包括整数、浮点数、字符串、布尔值等。 2. 标识符:Python使用标识符来命名变量、函数、类等。它们必须以字母或下划线开头,只能包含字母、数字和下划线,且区分大小写。 3. 注释:Python中使用“#”符号来添加注释,它们可以用于解释代码的作用和功能,提高代码的可读性。 4. 控制流语句:Python提供了常见的控制流语句,包括条件语句(if-elif-else)、循环语句(for、while)和跳转语句(break、continue)等。 5. 函数:在Python中,我们可以使用关键字“def”来定义函数。函数可以接收参数,并可选择性地返回一个值。 6. 列表和元组:列表是可变的,可以添加、删除和修改其中的元素;而元组是不可变的,一旦创建就不能修改。 7. 字典:字典是一种无序的数据结构,它由键-值对组成。通过键可以快速地访问对应的值。 8. 文件操作:Python提供了丰富的文件操作功能。我们可以轻松地读取和写入文件,对文件进行操作和管理。 9. 异常处理:Python允许我们捕获并处理程序运行时的异常。通过使用try-except语句,我们可以在程序出错时提供适当的处理方法。 总之,Python基本语法简洁易懂,使得编写代码变得更加简单快捷。通过学习这些基础语法,我们能够轻松入门Python,并可以运用其强大功能解决各种问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值