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

在这里插入图片描述

文章目录

    • 一、引言
      • 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):passtry: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 osfolder_path = 'path/to/folder'
os.makedirs(folder_path)

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

  1. 删除文件夹
import osfolder_path = 'path/to/folder'
os.rmdir(folder_path)

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

  1. 移动文件或文件夹
import ossource_path = 'path/to/source'
destination_path = 'path/to/destination'
os.rename(source_path, destination_path)

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

  1. 复制文件或文件夹
import shutilsource_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 ospath = '/path/to/file.txt'
# dirname()函数将返回路径的目录部分
dirname = os.path.dirname(path)
# basename()函数将返回路径的文件名部分
basename = os.path.basename(path)
print(dirname)
print(basename)
  1. 判断路径是否存在
import ospath = '/path/to/file.txt'
# exists()函数将返回一个布尔值,指示路径是否存在
exists = os.path.exists(path)
print(exists)
  1. 拆分路径的目录名和文件名
import ospath = '/path/to/file.txt'
# split()函数将路径拆分为目录名和文件名,返回一个包含两个元素的元组
dirname, basename = os.path.split(path)
print(dirname)
print(basename)
  1. 获取路径的绝对路径
import ospath = '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 pdbdef add(a, b):# pdb.set_trace()函数来启动调试器# 程序执行到该行时,就会停止并转到pdb调试器界面pdb.set_trace()return a + bprint(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 csvwith open('data.csv', 'r') as f:reader = csv.reader(f)for row in reader:print(row)
  1. 写入CSV文件

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

import csvdata = [['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 csvdata = ['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 jsondata = {'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 jsonjson_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 jsonwith 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 jsondata = {'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 tkclass Calculator:def __init__(self, master):self.master = masterself.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.mzph.cn/news/640536.shtml

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

相关文章

什么是关键字?C语言的关键字有哪些?(C语言32个关键字详解)

目录 一、问题 二、解答 1、数据类型关键字(12个) (1) 声明和定义的区别 (2) 数据类型关键字 • char:声明字符型变量 1、声明字符变量 2、字符数组 3、ASCII码表示 4、指针与字符数组 5、多字节字符集(如UTF-8&#xff…

【C++】初识类和对象

引言 在C语言中,我们用结构体来描述一个复杂的对象,这个对象可能包括许多的成员,如用结构体描述一个学生的成绩,或者描述一个日期等。 struct Date {int _year;int _month;int _day; }; 如上是一个描述日期的结构体定义&#x…

超融合基础架构理解

1 超融合基础架构 1.1 定义 超融合基础架构(Hyper-converged infrastructure,缩写为HCI),是一种集成了存储设备及虚拟运算的信息基础架构框架。在这样的架构环境中,同一厂商的服务器与存储等硬件单元,搭配…

【网站项目】基于SSM的263货物进销管理系统

🙊作者简介:多年一线开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

探索Docker-Compose:从基础到高级命令全解析

探索Docker-Compose:从基础到高级命令全解析 引言Docker-Compose基础1. Docker-Compose简介2. 安装Docker-Compose3. 编写第一个Compose文件4. 基本命令 Docker-Compose文件结构解析1. 理解docker-compose.yml2. 基本组件3. 文件示例4. 配置项解析 常用Docker-Compo…

洛谷P1319 压缩技术(C语言)

这样一道入门题目,本来可以用for循环直接操作,但作者异想天开(xian de dan teng)地把所有数据登记在一个数组里面,然后再统一按格式输出。也就是定义一个数组Map,大小为n成n,然后按照输入数据,把Map中每一个…

【50.2K⭐】Tabby:一款强大、灵活且跨平台的免费终端应用程序

【50.2K⭐】Tabby:一款强大、灵活且跨平台的免费终端应用程序 在快节奏的现代生活中,我们总是在寻找提高工作效率的方法。如果你是一位开发人员,或者是一个对技术充满好奇心的电脑爱好者,我们经常需要在 Windows 上进行远程操作与…

加密机授权报错如何排查?进入加密机后台的方式介绍

我们在此前的文章中介绍过不少TSINGSEE青犀视频安防监控视频平台关于加密机授权操作及相关疑问解答,感兴趣的用户可以翻阅往期的文章进行了解。由于新用户咨询该方面的问题较多,今天我们再来介绍一下用户在使用过程中遇到的问题。 1、如何进入加密机后台…

Vue-33、Vue中为什么使用render函数

1、main.js //该文件是整个项目的入口文件 //引入Vue import Vue from vue //引入APP组件,他是所有组件的父组件 import App from ./App.vue //关闭Vue是生产提示 Vue.config.productionTip false; //创建Vue实例对象---vm new Vue({render: h > h(App), }).$m…

笔试面试题——二叉树进阶(二)

📘北尘_:个人主页 🌎个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 文章目录 一、二叉搜索树与双向链表1、题目讲解2、思路讲解递归展开图3、代码实现 二、从前序遍历和中序…

安装向量数据库milvus可视化工具attu

使用docker安装的命令和简单就一个命令: docker run -p 8000:3000 -e MILVUS_URL{milvus server IP}:19530 zilliz/attu:v2.3.5sunyuhuasunyuhua-HKF-WXX:~/dockercom/milvus$ docker run -p 8000:3000 -e MILVUS_URL127.0.0.1:19530 zilliz/attu:latest yarn run…

Xcode查看APP文件目录

一、连接真机到MAC电脑上 二、打开Devices 点击window -> Devices and Simulatores 三、选中设备、选择app 四、选择下载内容 五、查看文件内容 得到的文件 右键显示包内容,获得APP内数据 六、分发证书无法下载 使用分发的证书无法下载文件内容&#xf…

k8s的包管理工具helm

Helm是什么? 之前的这篇文章介绍了一开始接触k8s的时候接触到的几个命令工具 kubectl&kubelet&rancher&helm&kubeadm这几个命令行工具是什么关系?-CSDN博客 Helm 是一个用于管理和部署 Kubernetes 应用程序的包管理工具。它允许用户定义、安装和…

阿里云优惠券领取入口、使用方法和限制条件,2024最新

阿里云优惠代金券领取入口,阿里云服务器优惠代金券、域名代金券,在领券中心可以领取当前最新可用的满减代金券,阿里云百科aliyunbaike.com分享阿里云服务器代金券、领券中心、域名代金券领取、代金券查询及使用方法: 阿里云优惠券…

如何在Mac上安装PHP环境

前置环境:HomeBrew # Homebrew 是 Mac 上最好的包管理器之一,可以用于安装各种开源软件。从 Terminal(终端)执行以下命令安装 Homebrew: /usr/bin/ruby -e $(curl -fsSL https://raw.githubusercontent.com/Homebrew/i…

全流程机器视觉工程开发(一)环境准备,paddledetection和labelme

前言 我现在在准备做一个全流程的机器视觉的工程,之前做了很多理论相关的工作。大概理解了机器视觉的原理,然后大概了解了一下,我发现现在的库其实已经很发展了,完全不需要用到非常多的理论,只需要知道开发过程就可以…

Flutter 滚动布局:sliver模型

一、滚动布局 Flutter中可滚动布局基本都来自Sliver模型,原理和安卓传统UI的ListView、RecyclerView类似,滚动布局里面的每个子组件的样式往往是相同的,由于组件占用内存较大,所以在内存上我们可以缓存有限个组件,滚动…

软考系分之计算机网络规划设计、综合布线、RAID和网络存储等

文章目录 1、概要2、网络的三层模型3、综合布线系统4、廉价磁盘冗余阵列(RAID)5、网络存储6、总结 1、概要 本篇重点介绍计算机网络中的网络规划设计、综合布线、RAID和网络存储。 2、网络的三层模型 三层模型分为核心层、汇聚层和接入层,接…

【C++修行之道】竞赛常用库函数(sort,min和max函数,min_element和max_element、nth_element)

目录 一、sort 1.1sort简介 语法 参数 功能 适用容器 1.2sort的用法 1.3自定义比较函数 示例 1265蓝桥题 —— 排序 二、min和max函数 三、min_element和max_element 497蓝桥题 —— 成绩分析 四、nth_element 一、sort 1.1sort简介 sort函数包含在头文件<a…

Vue3组件库开发 之Button(2) 未完待续

Vue3组件库开发 之Button(1) 中新建项目&#xff0c;但未安装成功ESLINT 安装ESLINT npm install eslint vite-plugin-eslint --save-dev 安装eslint后&#xff0c;组件文件出现错误提示 添加第三方macros &#xff0c;虽然不是官网但很多开发者都是vue3开发人员 安装macros…