python编码中常见问题及解决方案

1. 输入minVal和maxVal,将 minVal - maxVal 分成 N 等份,列表返回

def GetSplit(minVal, maxVal, num):
    sumVal = maxVal - minVal   # 计算总共有多少个数
    remainder = sumVal % num   # 计算总数是否能均分
    step = sumVal // num       # 计算每份的份数
    if remainder != 0 :
    	# 如果不能均分,就将余下的数放到最后一份
        tempMaxVal = maxVal - step - remainder   # 计算去掉余数和最后一份的最大值
        toList = GetSplit(minVal, tempMaxVal, tempMaxVal // step)  # 最小值到去掉最后一份和余数的值,必定能均分,迭代计算
        toList.append([maxVal - step - remainder, maxVal - 1])     # 补充最后一份
    else:
        # 如果能均分,就 使用 range 函数均分
        toList = [[i, i + step - 1] for i in range(minVal, maxVal, step)]
    return toList

2. request 请求MP4视频URL时,如何获取视频大小

使用 requests.head() 函数快速返回响应,根据响应头获取自己需要的信息
requests.head(mp4Url)

def GetMp4Length(mp4Url):
    webRespData = requests.head(mp4Url)
    return webRespData.headers.get('content-length') # 此处获取的是视频大小

3. 输出00,01,02或001,002,003等格式字符串

rjust() 方法会返回一个原字符串右对齐 ,并使用字符填充至长度 width 的新字符串。如果指定的长度小于字符串的长度则返回原字符串


for i in range(1,30):
    print (str(i).rjust(3,'0'))  # 使用0填充数字到3位

4. 如何在 Python 中打印对象的属性

1. dir()函数

dir() 函数是 Python 中的一个内置函数,它可以返回一个对象的所有属性。该函数返回一个列表,其中包含对象的属性名称。

# 判断通过 dir 函数打印出来的数组,具体是方法还是属性
def MethodOrAttribute(obj):
    items = dir(obj)
    attributes = []
    methods = []

    for item in items:
        if callable(getattr(obj, item)):
            methods.append(item)
        else:
            attributes.append(item)

    print("Attributes:", attributes)
    print("Methods:", methods)

obj = MyClass()
MethodOrAttribute(obj)

2. vars()函数

vars() 函数是 Python 中的另一个内置函数,它可以返回一个对象的 __dict__ 属性,该属性包含对象的所有属性。

5. 使用 openpyxl 清空工作表

sheet.delete_rows(1, sheet.max_row)

6. python如何 import 自己的模块

一个 test1.py 的文件就是一个名字叫 test1 的模块,一个 test2.py 的文件就是一个名字叫 test2 的模块。

1. 直接 import

使用这种方式有个前提,就是执行文件和 依赖模块 同属于同个目录(父级目录),如下图
在这里插入图片描述

2. 通过sys模块导入自定义模块的path

如果执行文件和模块不在同一目录,这时候直接import是找不到自定义模块的。如下图:
在这里插入图片描述

  • 执行文件 main.py 在 main 目录下
  • showworld 模块在 lib 目录下

sys模块是python内置的,因此我们导入自定义模块的步骤如下:

  1. 先导入sys模块
  2. 然后通过sys.path.append(path) 函数来导入自定义模块所在的目录
  3. 导入自定义模块。

这时候 main.py 这样写:

import sys
sys.path.append(r"C:\Users\Neusoft\Desktop\lib")
import showworld

3. 使用包

将需要import的目录作为一个包来处理,可以更加方便地import另一个目录的文件。

  • 在需要import的目录中,创建一个__init__.py文件,这个文件是必须存在的,否则,Python就把这个目录当成普通目录,而不是一个包。这个文件可以为空。

这种方法的优点是使用了包的机制,可以更加方便地管理和组织代码。同时,不需要手动修改sys.path或使用复杂的相对路径。

在这里插入图片描述

这时候 main.py 这样写:

from lib import showworld

showworld.showworld()  # 调用 showworld 模块的 showworld 函数

7、解决资源文件打包后运行加载资源文件路径错误问题

import sys  # 系统内置类
from PyQt5.QtWidgets import QApplication, QWidget
import os

def source_path(relative_path):
    # 是否Bundle Resource(打包)
    # 判断是否存在属性frozen,以此判断是打包的程序还是源代码。false为默认值,即没有frozen属性时返回false
    if getattr(sys, 'frozen', False):
        base_path = sys._MEIPASS  # 该属性也是打包程序才会有,源代码尝试获取该属性会报错
    else:
        # 当源代码运行时使用该路径
        # os.path.abspath()函数是用来获取绝对路径的函数,它可以将相对路径转换为绝对路径。
        base_path = os.path.abspath(".")
    return os.path.join(base_path, relative_path)


def main():
    # 修改当前工作目录,使得资源文件可以被正确访问
    cd = source_path('')
    os.chdir(cd)

    # 创建一个应用程序对象
    app = QApplication(sys.argv)

    uiInfo = MyUiInfo()  # 实例化 ui 对象

    uiInfo.ui.show()

    # 进入程序的主循环,并通过exit函数确保主循环安全结束
    sys.exit(app.exec_())

8、将一个 List N等分

def ListNHalve(list, num):
    halve_list = []
    import numpy as np
    # 将 list 按照 num 等分
    split_result  = np.array_split(list, num)
    for part in split_result:
        halve_list .append(part)
    return halve_list

9、打印所在行号

sys._getframe().f_lineno

import sys
print(sys._getframe().f_lineno)

10、 python 打印编译器报错信息

import sys
import traceback
 
try:
    # 这里放置可能引发异常的代码
    exec("print(syntax error")  # 这行代码存在语法错误
except Exception:
    exc_type, exc_value, exc_traceback = sys.exc_info()
    traceback.print_exception(exc_type, exc_value, exc_traceback)

以字符串形式获取异常信息

import sys
import traceback

try:
    # 这里放置可能引发异常的代码
    exec("print(syntax error")  # 这行代码存在语法错误
except Exception:
    exc_type, exc_value, exc_traceback = sys.exc_info()
    # 使用io.StringIO来捕获print_exception输出的内容,将其转为字符串
    import io
    sio = io.StringIO()
    traceback.print_exception(exc_type, exc_value, exc_traceback, file=sio)
    exception_str = sio.getvalue()
    print(exception_str)

在上述代码中:

  • 导入io模块:首先引入了 Python 标准库中的io模块,它提供了处理各种 I/O 相关操作的功能。在这里重点使用了StringIO类。
  • 创建StringIO对象:通过io.StringIO()创建了一个类似文件的对象 sio,它可以在内存中进行类似于文件读写的操作,在这里用于捕获异常信息的输出内容。
  • 捕获异常信息并转为字符串:调用traceback.print_exception(exc_type, exc_value, exc_traceback, file=sio)时,原本会将异常信息打印到标准输出(通常是控制台),但通过指定 file=sio,就会把这些信息输出到我们创建的 sio 对象中。然后再使用sio.getvalue()方法,就可以获取到其中存储的字符串形式的异常信息,最后存储在变量exception_str中(这里只是简单打印了它,实际应用中可以根据需求进一步处理,比如记录到日志文件等)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值