Python文件操作和异常处理:高效处理数据的利器

news2024/12/23 8:57:29

在这里插入图片描述

文章目录

    • 一、引言
      • 1.1 文件操作和异常处理对于编程的重要性
      • 1.2 Python作为实现文件操作和异常处理的强大工具
    • 二、为什么学习文件操作和异常处理
      • 2.1 处理各种文件格式:从文本到图像到音频等
      • 2.2 确保代码的鲁棒性:有效处理异常情况
    • 三、文件读取和写入
      • 3.1 打开文件:如何打开文件并读取其中的内容
      • 3.2 写入文件:如何将数据写入文件
      • 3.3 关闭文件:如何关闭文件和处理异常情况
    • 四、文件操作和路径处理
      • 4.1 文件和文件夹的基本操作:创建、删除、移动、复制等
      • 4.2 路径的表示和处理:绝对路径和相对路径、os模块的应用
    • 五、异常处理和调试
      • 5.1 异常的基本概念和分类:语法错误、运行时错误、逻辑错误等
      • 5.2 try-except语句:捕获和处理异常情况
      • 5.3 调试技巧:print语句、断点调试、日志记录等
    • 六、CSV和JSON文件的读写
      • 6.1 CSV文件的读写:csv模块的应用
      • 6.2 JSON文件的读写:json模块的应用
    • 七、实践项目:用Python GUI程序实现一个计算器

重温Python,适合新手搭建知识体系,也适合大佬的温故知新~

一、引言

1.1 文件操作和异常处理对于编程的重要性

文件操作和异常处理对于编程非常重要。它们使得我们能够处理文件数据、持久化数据、导入和导出数据,并且能够优雅地处理和解决错误,提高程序的可靠性和稳定性。

  1. 文件操作
    • 数据的读取和写入:文件操作允许我们从文件中读取数据或将数据写入文件。这对于处理大量数据、配置文件、日志记录等非常重要。
    • 数据持久化:通过文件操作,我们可以将数据存储在文件中,以便在程序关闭后仍然可以访问和使用这些数据。
    • 数据的导入和导出:文件操作使得我们可以将数据从一个程序导出,并在另一个程序中导入使用,实现数据共享和交互。
  2. 异常处理
    • 错误处理:异常处理机制允许我们在程序运行过程中检测和处理错误。当程序遇到错误时,异常处理可以帮助我们优雅地处理错误,而不是直接崩溃。
    • 异常信息:异常处理提供了有关错误发生位置和类型的详细信息,这有助于我们快速定位和解决问题。
    • 容错能力:通过适当的异常处理,我们可以编写更健壮的代码,增强程序的容错能力,减少意外错误对程序的影响。

1.2 Python作为实现文件操作和异常处理的强大工具

Python作为一种编程语言,在文件操作和异常处理方面具有许多强大的特性和优势。它提供了简洁的语法、内置函数和方法、上下文管理器等便捷的文件操作功能,并且通过异常处理机制,使得捕获和处理错误变得简单而灵活。

  1. 文件操作
    • 简洁的语法:Python提供了简洁而直观的语法,使得文件的读取和写入操作变得非常容易。
    • 内置函数和方法:Python内置了丰富的文件操作函数和方法,如open()、read()、write()、close()等,可以轻松地进行文件的打开、读取、写入和关闭操作。
    • 上下文管理器(Context Manager):Python的with语句结合上下文管理器可以自动管理文件的打开和关闭,避免了手动处理文件关闭的麻烦。
    • 丰富的文件处理模块:Python还提供了许多文件处理相关的模块,如os、shutil、glob等,提供了更多便捷的文件操作功能。
  2. 异常处理
    • 异常类和内置异常:Python提供了丰富的异常类和内置异常,可以用于捕获各种不同类型的错误。
    • try-except语句:Python的try-except语句使得捕获和处理异常变得非常简单。我们可以将可能引发异常的代码放在try块中,然后通过except块捕获并处理异常。
    • 多重异常捕获:Python允许我们在一个try块中捕获多个不同类型的异常,可以根据需要对不同类型的异常进行不同的处理。
    • 最终处理(finally):Python的try-except语句还允许使用finally块,无论是否发生异常,其中的代码都会被执行。这可以用于确保资源的释放和清理工作。

二、为什么学习文件操作和异常处理

2.1 处理各种文件格式:从文本到图像到音频等

Python提供了丰富的库和模块,可以处理各种文件格式,包括文本、图像、音频等。

在不同文件格式处理方面的应用

  1. 文本文件处理
    • 内置函数和方法:Python内置了处理文本文件的函数和方法,如open()、read()、write()等,可以用于打开、读取和写入文本文件。
    • csv模块:csv模块提供了对逗号分隔或其他分隔符分隔的文本数据进行读写的功能。它可以轻松地处理CSV格式的数据。
    • json模块:json模块提供了将数据编码为JSON格式或解码JSON数据的功能。它可以用于读取和写入JSON格式的文件。
  2. 图像文件处理
    • PIL/Pillow库:PIL(Python Imaging Library)是一个流行的库,而PillowPIL的一个分支。它们提供了处理图像文件的功能,如打开、缩放、裁剪、保存图像等。
    • OpenCV库:OpenCV是一个计算机视觉库,可以用于处理图像和视频。它提供了用于读取、编辑和保存各种图像格式的功能。
  3. 音频文件处理
    • pydub库:pydub库是一个简单易用的音频处理库,可以用于读取、剪切、合并和转换音频文件。它支持多种常见的音频格式。
    • librosa库:librosa是一个专门用于音频和音乐信号处理的库。它提供了各种功能,如读取音频文件、提取特征、频谱分析等。

除了上述库和模块,Python还有许多其他用于处理不同文件格式的库和工具,如numpy、scipy、matplotlib等,在科学计算、数据分析和可视化方面非常有用。

2.2 确保代码的鲁棒性:有效处理异常情况

确保代码的鲁棒性是编程中非常重要的一部分,因为代码可能会面临各种不同的异常情况。Python提供了异常处理机制,可以有效地处理异常情况,避免程序因异常而崩溃或产生未预期的结果。

Python中确保代码鲁棒性的技巧

  1. 使用try-except语句:try-except语句是Python中处理异常的主要方式。我们可以将可能引发异常的代码放在try块中,在发生异常时捕获并处理它们。
try:
    # 可能引发异常的代码
except Exception as e:
    # 处理异常的代码
  1. 捕获特定类型的异常:在try-except语句中,我们可以通过指定异常类型来捕获特定类型的异常。这可以使我们根据不同类型的异常进行不同的处理。
try:
    # 可能引发异常的代码
except ValueError as ve:
    # 处理值错误异常的代码
except IndexError as ie:
    # 处理索引错误异常的代码
  1. finally块:finally块是一个可选的代码块,它始终在try-except语句执行完毕后被执行,无论是否发生异常。通常用于清理操作,如关闭文件或数据库连接等。
try:
    # 可能引发异常的代码
except Exception as e:
    # 处理异常的代码
finally:
    # 清理操作的代码
  1. 自定义异常:除了Python内置的异常类型外,我们还可以创建自定义异常类型,以便更好地表示特定的异常情况。我们可以通过继承Exception类来创建自定义异常类型。
class CustomError(Exception):
    pass

try:
    if some_condition:
        raise CustomError("自定义错误")
except CustomError as ce:
    # 处理自定义异常的代码

三、文件读取和写入

3.1 打开文件:如何打开文件并读取其中的内容

在Python中,可以使用内置的open()函数来打开文件并读取其中的内容。

# 打开文件
file = open('example.txt', 'r')  # 'example.txt' 是文件的路径,'r' 表示以只读模式打开文件

# 读取文件内容
content = file.read()
print(content)

# 关闭文件
file.close()

ps:在读取完文件内容后,应该使用close()方法关闭文件,以释放系统资源。

此外,还有其他一些open()函数的参数可以用于不同的需求:

  • mode:打开文件的模式。

    • 'r':只读模式(默认)。
    • 'w':写入模式。如果文件不存在,则创建一个新文件;如果文件已存在,则清空文件内容。
    • 'a':追加模式。如果文件不存在,则创建一个新文件;如果文件已存在,则在文件末尾追加内容。
    • 'x':独占创建模式。仅在文件不存在时创建新文件,如果文件已存在则引发异常。
  • encoding:文件编码方式。例如,'utf-8'表示使用UTF-8编码方式(默认值)。

  • newline:文本文件的换行符。可以设置为None以使用系统默认的换行符。

除了使用read()方法一次性读取整个文件内容,还可以使用其他方法来逐行或逐块地读取文件内容,如readline()readlines()等。这些方法根据实际需求选择使用。

3.2 写入文件:如何将数据写入文件

在Python中,可以使用内置的open()函数来打开文件并将数据写入文件中。

# 打开文件
file = open('example.txt', 'w')  # 'example.txt' 是文件的路径,'w' 表示以写入模式打开文件

# 写入数据
file.write('Hello, world!\n')
file.write('This is an example file.\n')

# 关闭文件
file.close()

ps:在写入完数据后,应该使用close()方法关闭文件,以释放系统资源。另外,如果要写入二进制数据,则需要使用wb模式打开文件。

  • 此外,还有其他一些open()函数的参数可以用于不同的需求:

    • mode:打开文件的模式。

      • 'r':只读模式(默认)。
      • 'w':写入模式。如果文件不存在,则创建一个新文件;如果文件已存在,则清空文件内容。
      • 'a':追加模式。如果文件不存在,则创建一个新文件;如果文件已存在,则在文件末尾追加内容。
      • 'x':独占创建模式。仅在文件不存在时创建新文件,如果文件已存在则引发异常。
    • encoding:文件编码方式。例如,'utf-8'表示使用UTF-8编码方式(默认值)。

    • newline:文本文件的换行符。可以设置为None以使用系统默认的换行符。

除了使用write()方法一次性写入整个字符串,还可以使用其他方法来逐行或逐块地写入文件内容,如writelines()等。这些方法根据实际需求选择使用。

3.3 关闭文件:如何关闭文件和处理异常情况

在Python中,使用open()函数打开文件后,应该使用close()方法关闭文件,以释放系统资源。

# 打开文件
file = open('example.txt', 'r')

try:
    # 读取文件内容
    content = file.read()
    print(content)
finally:
    # 关闭文件
    file.close()

在打开文件时出现异常,则应该使用tryexcept语句来处理异常情况。

try:
    # 打开文件
    file = open('example.txt', 'r')
    
    try:
        # 读取文件内容
        content = file.read()
        print(content)
    finally:
        # 关闭文件
        file.close()
except FileNotFoundError:
    print('文件不存在')
except IOError:
    print('文件读取错误')
except:
    print('其他异常')

ps:在Python 3.3及以上版本中,可以使用with语句来自动管理文件的打开和关闭操作。

with open('example.txt', 'r') as file:
    content = file.read()
    print(content)

使用with语句打开文件后,不需要显式调用close()方法,文件会在with块结束时自动关闭。

四、文件操作和路径处理

4.1 文件和文件夹的基本操作:创建、删除、移动、复制等

在Python中,可以使用os模块来进行文件和文件夹的基本操作,如创建、删除、移动、复制等。

  1. 创建文件夹
import os

folder_path = 'path/to/folder'
os.makedirs(folder_path)

ps:如果要创建的文件夹已经存在,会引发FileExistsError异常。

  1. 删除文件夹
import os

folder_path = 'path/to/folder'
os.rmdir(folder_path)

ps:只有当文件夹为空时才能成功删除,否则会引发OSError异常。

  1. 移动文件或文件夹
import os

source_path = 'path/to/source'
destination_path = 'path/to/destination'
os.rename(source_path, destination_path)

ps:目标位置已经存在同名的文件或文件夹,则会覆盖。

  1. 复制文件或文件夹
import shutil

source_path = 'path/to/source'
destination_path = 'path/to/destination'
shutil.copy(source_path, destination_path)

ps:目标位置已经存在同名的文件或文件夹,则会引发FileExistsError异常。

除了上述操作,os模块还提供了其他一些函数来执行更多的文件和文件夹操作,如列出目录内容、获取文件信息等。

4.2 路径的表示和处理:绝对路径和相对路径、os模块的应用

在Python中,路径可以表示为绝对路径或相对路径。

  • 绝对路径是从根目录开始的完整路径
  • 相对路径是相对于当前工作目录的路径

使用os模块来处理路径的常见操作

  1. 获取当前工作目录
import os

# getcwd()函数将返回当前工作目录的绝对路径
current_dir = os.getcwd()
print(current_dir)
  1. 组合路径
import os

# join()函数将多个路径组合为一个路径,并自动添加正确的路径分隔符
path = os.path.join('dir', 'subdir', 'file.txt')
print(path)
  1. 获取路径的目录名和文件名
import os

path = '/path/to/file.txt'
# dirname()函数将返回路径的目录部分
dirname = os.path.dirname(path)
# basename()函数将返回路径的文件名部分
basename = os.path.basename(path)
print(dirname)
print(basename)
  1. 判断路径是否存在
import os

path = '/path/to/file.txt'
# exists()函数将返回一个布尔值,指示路径是否存在
exists = os.path.exists(path)
print(exists)
  1. 拆分路径的目录名和文件名
import os

path = '/path/to/file.txt'
# split()函数将路径拆分为目录名和文件名,返回一个包含两个元素的元组
dirname, basename = os.path.split(path)
print(dirname)
print(basename)
  1. 获取路径的绝对路径
import os

path = 'relative/path/to/file.txt'
# abspath()函数将返回路径的绝对路径
absolute_path = os.path.abspath(path)
print(absolute_path)

这些只是os模块中一些常见的路径操作函数,还有其他更多的函数可用于处理路径。

五、异常处理和调试

5.1 异常的基本概念和分类:语法错误、运行时错误、逻辑错误等

在Python中,异常是指由于某种原因导致程序无法正常执行的错误情况。当遇到异常情况时,程序会抛出一个异常对象,如果没有被处理,程序将会崩溃并输出错误信息。

Python中的异常可以分为三类

  1. 语法错误(SyntaxError):通常是由于代码书写不规范而导致的错误,例如拼写错误、缺少括号等等。这种错误会在解释器之前就被检测到,因此无法运行程序。
  2. 运行时错误(RuntimeError):通常是由程序运行时出现的问题而导致的错误,例如除以零、文件不存在等等。这种错误会在程序运行时被检测到,并且可以通过异常处理机制来处理。
  3. 逻辑错误(LogicError):通常是由程序设计不当或者算法实现错误导致的错误,例如死循环、逻辑判断错误等等。这种错误通常不会被检测到,而是会导致程序产生错误的结果。

在Python中,我们可以使用try-except语句来捕获并处理异常。try块中的代码会被执行,如果出现异常,则会跳转到对应的except块进行处理。

try:
    # 可能会引发异常的代码块
    a = 1 / 0
except ZeroDivisionError:
    # 处理特定类型的异常
    print("除以零错误")
except:
    # 处理其他类型的异常
    print("未知错误")

ps:在except语句中可以省略异常类型,这样就会处理所有类型的异常。

除了try-except语句,Python还提供了其他一些异常处理机制,例如finally块、raise语句等等。

5.2 try-except语句:捕获和处理异常情况

在Python中,try-except语句用于捕获和处理异常情况。它允许我们对可能引发异常的代码进行监控,并在出现异常时执行相应的操作。

try-except语句的基本语法如下:

try:
    # 可能会引发异常的代码块
except [异常类型]:
    # 处理异常的代码块

在except语句中,可以指定特定的异常类型来捕获和处理特定类型的异常。如果未指定异常类型,则会捕获所有类型的异常。

常见的异常类型

  • Exception:所有异常的基类,可以捕获任何类型的异常。
  • ValueError:值错误,当传递给函数的参数类型正确但值不合法时引发。
  • TypeError:类型错误,当操作或函数应用于不兼容的类型时引发。
  • FileNotFoundError:文件不存在错误,当尝试打开不存在的文件时引发。
  • ZeroDivisionError:除以零错误,当尝试除以零时引发。

除了指定特定的异常类型,我们还可以使用多个except块来处理不同的异常情况。

try:
    # 可能会引发异常的代码块
except ValueError:
    # 处理值错误的代码块
except FileNotFoundError:
    # 处理文件不存在的代码块
except:
    # 处理其他异常的代码块

在except语句中,也可以添加else块和finally块。else块中的代码将在try块中没有发生异常时执行,而finally块中的代码将始终执行,无论是否发生异常。

try:
    # 可能会引发异常的代码块
except ValueError:
    # 处理值错误的代码块
else:
    # try块中没有发生异常时执行的代码块
finally:
    # 无论是否发生异常,始终会执行的代码块

通过使用try-except语句,我们可以更好地控制和处理程序中可能出现的异常情况,避免程序崩溃并提供友好的错误处理。

5.3 调试技巧:print语句、断点调试、日志记录等

在Python中,调试是开发过程中必不可少的活动。Python提供了多种调试技巧,包括print语句、断点调试和日志记录等。

  1. print语句

print语句是最简单的调试技巧之一。它可以打印出变量的值,以便我们查看程序的执行过程。

x = 10
print(x) # 输出变量x的值,即10
  1. 断点调试

除了print语句,Python还支持断点调试。断点调试是一种交互式的调试方式,它允许我们在程序执行到指定的行时暂停程序,以便我们检查变量的值和程序的状态。

在Python中,我们可以使用pdb模块来实现断点调试。我们只需要在程序中插入一个断点,当程序执行到该行时就会暂停,然后我们可以使用pdb模块来查看和修改变量的值。

import pdb

def add(a, b):
    # pdb.set_trace()函数来启动调试器
    # 程序执行到该行时,就会停止并转到pdb调试器界面
    pdb.set_trace()
    return a + b

print(add(1, 2))
  1. 日志记录

日志记录是一种更高级的调试技巧,它允许我们在程序执行过程中记录各种信息,例如变量的值、函数的调用情况等等。这些信息可以写入文件或输出到控制台,以便我们查看和分析程序的执行过程。

Python提供了logging模块来实现日志记录。我们只需要在程序中初始化日志记录器,并在程序中使用相关的日志记录函数来记录信息即可。

import logging

# basicConfig函数来初始化日志记录器,并指定了日志记录的级别为DEBUG
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')
# logging.debug函数来记录一个调试信息
logging.debug('This is a debug message')

# 类似输出结果
2022-12-28 16:07:57,504 - DEBUG - This is a debug message

除了debug函数,logging模块还提供了info、warning、error和critical等函数,可以根据具体的调试需求选择相应的函数。

六、CSV和JSON文件的读写

6.1 CSV文件的读写:csv模块的应用

在Python中,我们可以使用csv模块来读写CSV文件。CSV是一种常用的数据格式,通常用于存储表格数据。

csv模块提供了多种方法来读写CSV文件,包括读取CSV文件、写入CSV文件、以及将数据转换为CSV格式等。

  1. 读取CSV文件

使用csv模块中的reader函数来读取CSV文件。该函数返回一个迭代器,用于逐行读取CSV文件中的数据。

import csv

with open('data.csv', 'r') as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)
  1. 写入CSV文件

使用csv模块中的writer函数来写入CSV文件。该函数接受一个可迭代对象作为输入,用于将数据写入CSV文件中。

import csv

data = [
    ['Name', 'Age', 'Gender'],
    ['Tom', 20, 'Male'],
    ['Lucy', 18, 'Female'],
    ['John', 22, 'Male']
]

# 创建一个名为data.csv的CSV文件
with open('data.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    writer.writerows(data)
  1. 将数据转换为CSV格式

使用csv模块中的writerow函数来将数据转换为CSV格式。该函数接受一个可迭代对象作为输入,用于将数据转换为一行CSV格式的数据。

import csv

data = ['Tom', 20, 'Male']

with open('data.csv', 'a', newline='') as f:
    writer = csv.writer(f)
    writer.writerow(data)

在以上示例中,我们使用了open函数来打开CSV文件,并使用了with语句来自动关闭文件。在调用open函数时,我们需要指定文件的路径和打开文件的模式('r’表示只读,'w’表示写入,'a’表示追加)。同时,我们还需要指定newline参数,以避免在写入CSV文件时出现空行。

6.2 JSON文件的读写:json模块的应用

在Python中,我们可以使用json模块来读写JSON文件。JSON(JavaScript Object Notation)是一种常用的数据格式,通常用于存储和交换数据。

json模块提供了多种方法来读写JSON文件,包括将数据转换为JSON格式、将JSON格式的数据转换为Python对象、读取JSON文件、以及将Python对象写入JSON文件等。

  1. 将数据转换为JSON格式

使用json模块中的dumps函数将数据转换为JSON格式的字符串。该函数接受一个Python对象作为输入,并返回一个JSON格式的字符串。

import json

data = {
    'name': 'Tom',
    'age': 20,
    'gender': 'Male'
}

# 将data字典中的数据转换为JSON格式的字符串
json_str = json.dumps(data)
print(json_str)
  1. 将JSON格式的数据转换为Python对象

使用json模块中的loads函数将JSON格式的字符串转换为Python对象。该函数接受一个JSON格式的字符串作为输入,并返回一个对应的Python对象。

import json

json_str = '{"name": "Tom", "age": 20, "gender": "Male"}'

# 将json_str字符串中的JSON格式数据转换为Python对象
data = json.loads(json_str)
print(data)
  1. 读取JSON文件

使用json模块中的load函数来读取JSON文件。该函数接受一个文件对象作为输入,并返回对应的Python对象。

import json

with open('data.json', 'r') as f:
    # load函数读取其中的数据,并将其转换为Python对象
    data = json.load(f)
    print(data)
  1. 将Python对象写入JSON文件

使用json模块中的dump函数来将Python对象写入JSON文件。该函数接受一个Python对象和一个文件对象作为输入,将Python对象转换为JSON格式后写入文件中。

例如:

import json

data = {
    'name': 'Tom',
    'age': 20,
    'gender': 'Male'
}

# 将data字典中的数据转换为JSON格式,并写入名为data.json的文件
with open('data.json', 'w') as f:
    json.dump(data, f)

在以上示例中,我们使用了open函数来打开JSON文件,并使用了with语句来自动关闭文件。在调用open函数时,我们需要指定文件的路径和打开文件的模式('r’表示只读,'w’表示写入,'a’表示追加)。

七、实践项目:用Python GUI程序实现一个计算器

使用了tkinter模块来创建一个简单的GUI界面,并实现了一个简单的计算器

import tkinter as tk

class Calculator:
    def __init__(self, master):
        self.master = master
        self.result = tk.StringVar()
        self.create_widgets()

    def create_widgets(self):
        # 显示结果的标签
        result_label = tk.Label(self.master, textvariable=self.result)
        result_label.grid(row=0, column=0, columnspan=4)

        # 数字按钮
        for i in range(10):
            button = tk.Button(self.master, text=str(i), command=lambda num=i: self.add_number(num))
            button.grid(row=(9-i)//3+1, column=(i-1)%3)

        # 运算符按钮
        plus_button = tk.Button(self.master, text='+', command=lambda: self.add_operator('+'))
        plus_button.grid(row=1, column=3)
        minus_button = tk.Button(self.master, text='-', command=lambda: self.add_operator('-'))
        minus_button.grid(row=2, column=3)
        multiply_button = tk.Button(self.master, text='*', command=lambda: self.add_operator('*'))
        multiply_button.grid(row=3, column=3)
        divide_button = tk.Button(self.master, text='/', command=lambda: self.add_operator('/'))
        divide_button.grid(row=4, column=3)

        # 清空按钮
        clear_button = tk.Button(self.master, text='C', command=self.clear)
        clear_button.grid(row=5, column=3)

        # 等号按钮
        equal_button = tk.Button(self.master, text='=', command=self.calculate)
        equal_button.grid(row=4, column=2)

    def add_number(self, num):
        self.result.set(self.result.get() + str(num))

    def add_operator(self, operator):
        self.result.set(self.result.get() + operator)

    def clear(self):
        self.result.set('')

    def calculate(self):
        try:
            result = eval(self.result.get())
            self.result.set(str(result))
        except ZeroDivisionError:
            self.result.set('Error')

if __name__ == '__main__':
    root = tk.Tk()
    root.title('Calculator')
    Calculator(root)
    root.mainloop()

不要垂头丧气,即使失去一切,明天仍在你的手里

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1403236.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Duplicate object key json(520)

亲爱的码友,当你看到这个错误 请查看一下你的json文件内容的关键词是不是重复了 举个栗子🌰 往下翻翻: 删一个就行!!! 被自己傻哭了吧🤣🤣🤣

阿里云优惠整理,最新2024阿里云优惠政策解读

阿里云优惠政策有哪些?2024年阿里云优惠政策风向改了,之前一直是老用户与狗的营销策略,今年阿里云2核2G、3M固定带宽服务器99元居然开启了老用户购买权限,并且续费不涨价,阿里云这波操作确实让用户赢麻了,在…

数据可视化 | 期末复习 | 补档

文章目录 📚介绍可视化🐇什么是可视化🐇科学可视化,信息可视化,可视分析系统三者之间有什么区别🔥🐇可视化的基本流程🐇可视化的两个基本设计原则🐇数据属性&#x1f407…

【Android】TypedArray的使用

介绍 看电池电量组件BatteryMeterView的时候看到的。 Array是个数组,所有TypedArray也是个容器,基本是用于自定义View里面的(至少我目前见过的全部都在自定义View里面)。 使用 1.自定义View public class RoundSeekbarView e…

QComboBox 下拉框

文章目录 1、简介2、functions3、Signal QT 官方文档参考地址:https://doc.qt.io/qt-5/qcombobox.html 1、简介 QComboBox 是下拉列表框组件类,它提供一个下拉列表供用户选择,也可以直接当作一个 QLineEdit 用作输入。 2、functions 1、voi…

《GitHub Copilot 操作指南》课程介绍

第1节:GitHub Copilot 概述 一、什么是 GitHub Copilot 什么是 GitHub Copilot GitHub Copilot是GitHub与OpenAI合作开发的编程助手工具,利用机器学习模型生成代码建议。它集成在开发者的集成开发环境(IDE)中,可以根…

词语的魔力:语言在我们生活中的艺术与影响

Words That Move Mountains: The Art and Impact of Language in Our Lives 词语的魔力:语言在我们生活中的艺术与影响 Hello there, wonderful people! Today, I’d like to gab about the magical essence of language that’s more than just a chatty tool in o…

k8s-认证授权 14

Kubernetes的认证授权分为认证(鉴定用户身份)、授权(操作权限许可鉴别)、准入控制(资源对象操作时实现更精细的许可检查)三个阶段。 Authentication(认证) 认证方式现共有8种&…

Flowable 加签和减签

一:示例 Deployment deploy repositoryService.createDeployment().name("会签流程").addClasspathResource("processes/CounterSignProcess.bpmn").deploy();ProcessInstance processInstance runtimeService.startProcessInstanceByKey(&qu…

2.【SpringBoot3】用户模块接口开发

文章目录 开发模式和环境搭建开发模式环境搭建 1. 用户注册1.1 注册接口基本代码编写1.2 注册接口参数校验 2. 用户登录2.1 登录接口基本代码编写2.2 登录认证2.2.1 登录认证引入2.2.2 JWT 简介2.2.3 登录功能集成 JWT2.2.4 拦截器 3. 获取用户详细信息3.1 获取用户详细信息基本…

miniconda安装

Miniconda是一个小型版的Anaconda,它包含了一个包管理工具conda和Python。Miniconda适用于那些只需要管理Python包和环境,而不需要Anaconda中包含的大部分科学计算工具的用户。 Miniconda的安装过程相对简单。你可以从清华大学开源软件镜像站下载Minico…

C++:类与对象(上)

C:类与对象(上) 类的引入类的定义访问限定符类域实例化对象模型this指针 类的引入 C的类是基于C语言的结构体优化出来的,那我们先来看一看C对结构体有哪些优化点。 C语言与C的结构体的类型名称略有区别,我们看一个案…

安卓Spinner文字看不清

Holo主题安卓13的Spinner文字看不清&#xff0c;明明已经解决了&#xff0c;又忘记了。 spinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() {public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {TextView textV…

Rust 程序设计语言学习——基础语法

Rust 语言是一种高效、可靠的通用高级语言。其高效不仅限于开发效率&#xff0c;它的执行效率也是令人称赞的&#xff0c;是一种少有的兼顾开发效率和执行效率的语言。 Rust 语言由 Mozilla 开发&#xff0c;最早发布于 2014 年 9 月。Rust 的编译器是在 MIT License 和 Apach…

【好用的AI工具】推荐测试人在用的Kimi Chat

一、功能介绍 发网址链接文章解析PDF文件分析&#xff0c;可以整理分析文章丢简历、给出面试问题聊天等 Kimi Chat 二、对于测试人带来的帮助 2.1 面试问题总结 问题一&#xff1a;Session和Cookie的区别 seeion 和 cookie 是两种不同的数据存储机制&#xff0c;它们在Web开…

【C语言深度剖析——第四节(关键字4)】《C语言深度解剖》+蛋哥分析+个人理解

追求本质&#xff0c;不断进步 本文由睡觉待开机原创&#xff0c;转载请注明出处。 本内容在csdn网站首发 欢迎各位点赞—评论—收藏 如果存在不足之处请评论留言&#xff0c;共同进步&#xff01; 这里写目录标题 一、空间的申请1.变量定义1.1变量定义的概念&#xff1a;1.2变…

基本控件(一)

目录 控件的定义&#xff1a;使用控件的好处&#xff1a; setupUiwidget.hwidget.cppmain.cpp 控件的定义&#xff1a; QT控件是在QT框架下实现的一组用户界面元素&#xff0c;包括按钮、标签、输入框、列表框、滚动条、菜单等等&#xff0c;它们用于快速构建各种应用程序的图…

工业相机与镜头参数及选型

文章目录 1、相机成像系统模型1.1 视场1.2 成像简化模型 2、工业相机参数2.1 分辨率2.2 靶面尺寸2.3 像元尺寸2.4 帧率/行频2.5 像素深度2.6 动态范围2.7 信噪比2.8 曝光时间2.9 相机接口 3、工业镜头参数3.1 焦距3.2 光圈3.3 景深3.4 镜头分辨率3.5 工作距离&#xff08;Worki…

大模型笔记【3】 gem5 运行模型框架LLama

一 LLama.cpp LLama.cpp 支持x86&#xff0c;arm&#xff0c;gpu的编译。 1. github 下载llama.cpp https://github.com/ggerganov/llama.cpp.git 2. gem5支持arm架构比较好&#xff0c;所以我们使用编译LLama.cpp。 以下是我对Makefile的修改 开始编译&#xff1a; make UNAME…

详解SpringCloud微服务技术栈:DockerCompose部署微服务集群

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位大四、研0学生&#xff0c;正在努力准备大四暑假的实习 &#x1f30c;上期文章&#xff1a;详解SpringCloud微服务技术栈&#xff1a;Gateway网关&#xff08;断言、过滤器、跨域问题&#xff09; &#x1f4da;订阅专栏&…