【Python文件】操作终极指南:高效管理和处理文件系统的必备技能

目录

​编辑

1. 文件的基础操作

1.1 打开/关闭文件

​编辑

示例代码

文件对象

使用with语句打开文件

2. 读文件

2.1 使用read方法读取文件

2.2 使用readline方法读取文件

2.3 使用readlines方法读取文件

2.4 使用for循环读取文件

3. 写文件

3.1 使用write方法写文件

3.2 使用writelines方法写文件

3.3 关于读写缓冲区

4. 操作文件指针

4.1 使用seek方法操作文件指针

4.2 使用tell方法获取文件指针位置

4.3 示例:随机访问文件内容

5. 文件对象内建属性与上下文管理器

5.1 文件对象的内建属性

5.2 使用上下文管理器打开文件

5.3 自定义上下文管理器

6. 文件系统的基础操作

6.1 文件路径操作

6.2 常用文件系统操作

创建文件

删除文件

创建目录

删除目录

遍历目录

6.3 使用os.walk函数递归遍历目录

6.4 代码示例:用Python生成一个Python的Hello World文件并执行

6.5 代码示例:实现ls命令

6.6 代码示例:遍历目录中的所有目录和文件

总结

1. 文件的基础操作

2. 读文件

3. 写文件

4. 操作文件指针

5. 文件对象内建属性与上下文管理器

6. 文件系统的基础操作


 

专栏:python学习笔记 

上一篇:python字典详解

1. 文件的基础操作

1.1 打开/关闭文件

在Python中,使用内置函数open可以打开一个指定路径下的文件,并返回一个文件对象。常用的打开方式有:

  • 'r':读(默认)
  • 'w':写
  • 'a':追加写
  • 'b':二进制模式

open函数的第一个参数是文件名,可以是相对路径或者绝对路径,第二个参数是打开方式。以下是各种打开方式的详细解释:

  • 'r':以只读模式打开文件。文件指针将会放在文件的开头。这是默认模式,如果文件不存在,则会抛出FileNotFoundError
  • 'w':以写模式打开文件。如果文件已存在,则会覆盖原文件。如果文件不存在,则会创建新文件。
  • 'a':以追加模式打开文件。文件指针将会放在文件的末尾。如果文件不存在,则会创建新文件。
  • 'b':以二进制模式打开文件。此模式用于读写二进制文件,如图片、视频等。可以与其他模式结合使用,如'rb''wb''ab'等。
示例代码

以下是一个简单的示例,演示如何打开和关闭文件:

# 打开文件以读取模式
file = open('example.txt', 'r')# 关闭文件
file.close()

分析: 在上面的示例中,我们使用open函数以读取模式打开了一个名为example.txt的文件。完成操作后,我们使用close方法关闭文件。这是一个良好的实践,因为每个打开的文件都会占用系统资源。

但是,如果文件不存在,会发生什么呢?:

try:file = open('non_existent_file.txt', 'r')file.close()
except FileNotFoundError:print("文件不存在")

 

分析: 上述代码尝试打开一个不存在的文件。由于文件不存在,open函数会抛出FileNotFoundError异常。我们使用try-except块捕获并处理该异常,以避免程序崩溃。

文件对象

在Python中,文件对象不仅包含了文件描述符,还包含了文件的一些其他属性。文件描述符是一个整数,它唯一标识一个打开的文件。操作系统通过文件描述符进行文件操作。

文件对象支持的方法:

  • read(size=-1):从文件读取指定数量的字节。如果未指定size,则读取整个文件。
  • readline(size=-1):读取文件的一行。如果指定了size,则最多读取size个字节。
  • readlines(hint=-1):读取文件的所有行并返回一个列表。如果指定了hint,则返回总字节数不超过hint的行。
  • write(string):将字符串写入文件。
  • writelines(lines):将字符串列表写入文件。
  • close():关闭文件。

使用with语句打开文件

为了简化文件操作并确保文件在使用完毕后自动关闭,Python引入了上下文管理器,这使得可以使用with语句来打开文件。with语句会自动管理文件的打开和关闭操作。

示例代码:

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

 

 遇到的错误是由于Python默认使用的编码格式与文件的实际编码格式不匹配。可以通过显式指定文件的编码格式来解决这个问题。如果不确定文件的编码格式,可以尝试使用常见的编码格式,比如UTF-8。

文件的编码格式有很多,常见的包括以下几种:

  1. UTF-8(Unicode Transformation Format - 8-bit):是一种可变长度字符编码,能表示所有Unicode字符,是目前最常用的编码格式。
  2. UTF-16(Unicode Transformation Format - 16-bit):也是一种Unicode字符编码格式,使用16位及以上编码字符,适合需要支持所有Unicode字符的大型文本。
  3. UTF-32(Unicode Transformation Format - 32-bit):每个字符固定使用32位进行编码,简化了字符处理过程,但文件会更大。
  4. ASCII(American Standard Code for Information Interchange):早期的字符编码标准,只包含128个字符,用7位或8位编码,适合英文文本。
  5. ISO-8859-1(Latin-1):是一种单字节字符编码,支持西欧语言,用8位编码。
  6. GBK(扩展国标):是中文字符集,兼容GB2312,扩展支持更多汉字及符号。
  7. GB2312:早期的中文字符集标准,只包含部分常用汉字和符号。
  8. BIG5:是台湾和香港地区使用的中文编码标准,与GBK类似。

你可以根据文件的实际编码选择合适的编码格式。在Python中,可以通过指定encoding参数来设置文件的编码格式。

下面是修改后的代码:

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

 

分析: 在这个示例中,with语句块内的所有操作都可以使用file对象进行。当with语句块结束时,文件会自动关闭。这种方式不仅简洁,而且可以确保文件总是被正确关闭,即使在出现异常时也是如此。

小李的理解: 文件操作时要记得关闭文件,不然会占用资源。用with语句可以自动帮你关掉文件,不用担心忘记关。

2. 读文件

读文件是文件操作中最常见的任务之一。Python提供了多种方法来读取文件内容,包括readreadlinereadlines

2.1 使用read方法读取文件

read方法用于读取指定长度的字节数,并返回一个字符串。如果未指定size,则读取整个文件。该方法适用于读取较小的文件,因为它会将文件内容一次性加载到内存中。

示例代码:

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

分析: 在这个示例中,使用read方法读取了整个文件的内容,并将其打印出来。

2.2 使用readline方法读取文件

readline方法用于读取文件的一行,并返回一个字符串。每次调用该方法,文件指针都会向下移动一行,直到文件末尾。

若example.txt 有两行

示例代码:

with open('example.txt', 'r', encoding='utf-8') as file:line = file.readline()while line:print(line, end='')line = file.readline()

分析: 在这个示例中,使用readline方法逐行读取文件,并将每一行打印出来。end=''参数用于避免在每行末尾添加额外的换行符,因为readline方法已经保留了行末的换行符。

2.3 使用readlines方法读取文件

readlines方法用于读取文件的所有行,并返回一个列表。列表中的每个元素都是文件的一行。

示例代码:

with open('example.txt', 'r', encoding='utf-8') as file:lines = file.readlines()for line in lines:print(line, end='')

 

分析: 在这个示例中,使用readlines方法读取了文件的所有行,并将每一行打印出来。

2.4 使用for循环读取文件

除了上述方法,还可以直接使用for循环遍历文件对象。每次迭代都会返回文件的一行,这种方法在处理大文件时非常高效。

示例代码:

with open('example.txt', 'r', encoding='utf-8') as file:for line in file:print(line, end='')

 

分析: 在这个示例中,使用for循环逐行读取文件,并将每一行打印出来。

小李的理解: 读文件有很多方法,read一次读完,readline一行行读,readlines全部读成列表,for循环更省内存。记住看需求选方法。

3. 写文件

写文件是文件操作中的另一个重要任务。Python提供了writewritelines方法来将数据写入文件。

3.1 使用write方法写文件

write方法用于向文件中写入一个字符串。如果文件以写模式('w')打开,则会覆盖文件的内容。如果文件以追加模式('a')打开,则会在文件末尾追加内容。

示例代码:

with open('output.txt', 'w') as file:file.write('Hello, World!\n')file.write('小李很执着\n')

 

分析: 在这个示例中,使用write方法向文件中写入了两行文本。每次写入操作都需要显式添加换行符(\n)。

3.2 使用writelines方法写文件

writelines方法用于向文件中写入一个字符串列表。列表中的每个元素都将作为文件的一行写入。

示例代码:

lines = ['第一行文本\n', '第二行文本\n', '第三行文本\n']
with open('output.txt', 'w') as file:file.writelines(lines)

 

 

分析: 在这个示例中,使用writelines方法向文件中写入了一个字符串列表。需要注意的是,writelines方法不会自动添加换行符,因此我们需要在每个字符串末尾手动添加换行符。

3.3 关于读写缓冲区

在读写文件时,Python提供了缓冲区机制,以提高文件操作的性能。在使用open函数时,可以通过第三个参数来指定缓冲区大小。

示例代码:

with open('output.txt', 'w', buffering=2048) as file:file.write('使用缓冲区写入数据。\n')

分析: 在这个示例中,指定了缓冲区大小为2048字节。缓冲区机制可以减少I/O操作的频率,从而提高性能。可以使用flush方法手动刷新缓冲区,将数据写入文件。

示例代码:

with open('output.txt', 'w', buffering=2048) as file:file.write('使用缓冲区写入数据。\n')file.flush()

 

分析: 在这个示例中,在写入数据后调用flush方法,将缓冲区中的数据立即写入文件。

小李的理解: 写文件要加换行符,不然会连在一起。缓冲区像个临时储物柜,可以提高速度。用flush可以马上把数据存到文件里。

4. 操作文件指针

文件指针用于指示当前文件操作的位置。在读写文件时,可以通过文件指针来实现随机访问。Python提供了seektell方法来操作文件指针。

4.1 使用seek方法操作文件指针

seek方法用于将文件指针移动到指定位置。seek方法有两个参数:

  • offset:表示偏移量。
  • whence:表示偏移量的起始位置。可选值为:
    • 0:从文件开头计算(默认)。
    • 1:从当前位置计算。
    • 2:从文件末尾计算。

示例代码:

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

 

分析: 在这个示例中,使用seek方法将文件指针移动到文件开头的第10个字节处,然后读取文件内容并打印。

4.2 使用tell方法获取文件指针位置

tell方法用于获取当前文件指针的位置,返回值是文件指针到文件开头的偏移量(以字节为单位)。

示例代码:

with open('example.txt', 'r', encoding='gbk') as file:file.seek(10, 0)position = file.tell()print(f"文件指针位置:{position}")

 

分析: 在这个示例中,使用seek方法将文件指针移动到文件开头的第10个字节处,然后使用tell方法获取当前文件指针的位置并打印。

4.3 示例:随机访问文件内容

通过结合使用seektell方法,可以实现文件的随机访问。例如,我们可以实现一个功能,从文件的任意位置读取特定长度的内容。

示例代码:

def read_from_position(file_path, position, length):with open(file_path, 'r', encoding='utf-8') as file:file.seek(position, 0)content = file.read(length)return contentfile_path = 'example.txt'
position = 10
length = 20content = read_from_position(file_path, position, length)
print(f"从位置{position}读取的内容:{content}")

 

分析: 在这个示例中,定义了一个函数read_from_position,用于从指定位置读取特定长度的内容。我们通过传入文件路径、读取位置和读取长度来调用该函数,并打印读取到的内容。

小李的理解: 文件指针像磁带播放器的磁头,可以定位到文件的任意位置开始读写。seek是移动指针,tell是告诉你指针的位置。

5. 文件对象内建属性与上下文管理器

文件对象除了支持基本的读写操作外,还提供了一些内建属性和方法。此外,Python引入了上下文管理器,使得文件操作更加简洁和安全。

5.1 文件对象的内建属性

文件对象具有以下常用属性:

  • name:文件的名称。
  • mode:文件的打开模式。
  • closed:文件是否已关闭。

示例代码:

with open('example.txt', 'r') as file:print(f"文件名:{file.name}")print(f"打开模式:{file.mode}")print(f"是否关闭:{file.closed}")

 

分析: 在这个示例中,使用文件对象的属性获取文件的名称、打开模式以及文件是否已关闭。

5.2 使用上下文管理器打开文件

上下文管理器通过with语句来管理资源的打开和关闭。在文件操作中,使用上下文管理器可以确保文件在操作完成后自动关闭,即使在发生异常时也是如此。

示例代码:

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

 

分析: 在这个示例中,使用with语句打开文件,并在语句块内读取文件内容。当with语句块结束时,文件会自动关闭。

5.3 自定义上下文管理器

除了内置的文件对象,Python还允许我们自定义上下文管理器。要创建一个自定义上下文管理器,需要实现__enter____exit__方法。

示例代码:

class CustomFile:def __init__(self, file_name, mode):self.file_name = file_nameself.mode = modedef __enter__(self):self.file = open(self.file_name, self.mode)return self.filedef __exit__(self, exc_type, exc_val, exc_tb):self.file.close()with CustomFile('example.txt', 'r') as file:content = file.read()print(content)

 

分析: 在这个示例中,定义了一个自定义上下文管理器CustomFile,并实现了__enter____exit__方法。在__enter__方法中打开文件,并返回文件对象。在__exit__方法中关闭文件。这样,我们就可以使用with语句来管理文件操作了。

小李的理解: 文件对象有一些属性可以方便查询。用with语句打开文件,文件会自动关闭,不用担心忘记关。如果要管理更多资源,可以自定义上下文管理器。

6. 文件系统的基础操作

除了基本的文件读写操作,Python还提供了对文件系统进行操作的功能,包括文件路径操作和常用文件系统操作。

6.1 文件路径操作

使用os.path模块可以方便地进行文件路径操作。该模块提供了许多实用的函数来处理文件路径。

示例代码:

import os.path# 获取文件名
file_name = os.path.basename('/home/user/example.txt')
print(f"文件名:{file_name}")# 获取目录路径
dir_name = os.path.dirname('/home/user/example.txt')
print(f"目录路径:{dir_name}")# 分割路径
path, file = os.path.split('/home/user/example.txt')
print(f"路径:{path}, 文件:{file}")# 分离文件名和扩展名
name, ext = os.path.splitext('/home/user/example.txt')
print(f"文件名:{name}, 扩展名:{ext}")

 

分析: 在这个示例中,使用os.path模块的函数来获取文件名、目录路径、分割路径以及分离文件名和扩展名。

6.2 常用文件系统操作

使用os模块可以进行文件和目录的操作,如创建文件、删除文件、遍历目录等。

创建文件

使用open函数可以创建文件。如果文件不存在,open函数会自动创建新文件。

示例代码:

with open('new_file.txt', 'w') as file:file.write('这是一个新文件。')

 

分析: 在这个示例中,使用open函数创建了一个名为new_file.txt的新文件,并向其中写入了一段文本。

删除文件

使用os.remove函数可以删除文件。此函数接受一个文件路径作为参数,如果文件不存在,则会引发FileNotFoundError异常。

示例代码:

import osfile_path = 'new_file.txt'# 检查文件是否存在
if os.path.exists(file_path):os.remove(file_path)print(f"文件 {file_path} 已删除")
else:print(f"文件 {file_path} 不存在")

 

分析: 在这个示例中,首先检查文件是否存在,然后调用os.remove函数删除文件。

创建目录

使用os.mkdir函数可以创建目录。此函数接受一个目录路径作为参数。如果目录已存在,则会引发FileExistsError异常。

示例代码:

import osdir_path = 'new_directory'# 创建新目录
if not os.path.exists(dir_path):os.mkdir(dir_path)print(f"目录 {dir_path} 已创建")
else:print(f"目录 {dir_path} 已存在")

 

分析: 在这个示例中,首先检查目录是否存在,然后调用os.mkdir函数创建目录。

删除目录

使用os.rmdir函数可以删除空目录。此函数接受一个目录路径作为参数。如果目录不为空,则会引发OSError异常。

示例代码:

import osdir_path = 'new_directory'# 删除目录
if os.path.exists(dir_path) and os.path.isdir(dir_path):os.rmdir(dir_path)print(f"目录 {dir_path} 已删除")
else:print(f"目录 {dir_path} 不存在或不是目录")

 

分析: 在这个示例中,首先检查目录是否存在并且是否为目录,然后调用os.rmdir函数删除目录。

遍历目录

使用os.listdir函数可以列出指定目录中的所有文件和目录。此函数接受一个目录路径作为参数,返回该目录中的所有文件和目录名的列表。

示例代码:

import osdir_path = '.'# 列出目录中的所有文件和目录
entries = os.listdir(dir_path)
for entry in entries:print(entry)

 

分析: 在这个示例中,使用os.listdir函数列出了当前目录中的所有文件和目录。

6.3 使用os.walk函数递归遍历目录

os.walk函数可以递归遍历目录树,生成一个包含目录路径、目录名列表和文件名列表的三元组。

import osdir_path = '.'# 递归遍历目录
for root, dirs, files in os.walk(dir_path):print(f"目录路径: {root}")print(f"目录名列表: {dirs}")print(f"文件名列表: {files}")print('-----')

 

分析: 在这个示例中,使用os.walk函数递归遍历当前目录及其子目录,并打印每个目录的路径、目录名列表和文件名列表。

6.4 代码示例:用Python生成一个Python的Hello World文件并执行

可以使用os模块创建一个Python脚本文件,并使用os.system函数执行该脚本。

示例代码:

import osfile_name = 'hello.py'# 创建并写入Python脚本
with open(file_name, 'w') as file:file.write('#!/usr/bin/python\n')file.write('print("Hello, World!")\n')# 设置脚本为可执行
os.chmod(file_name, 0o755)# 执行Python脚本
os.system(f'./{file_name}')

 

 

分析: 在这个示例中,我们首先创建一个名为hello.py的Python脚本文件,并向其中写入Hello, World!打印语句。然后,我们使用os.chmod函数设置文件为可执行,最后使用os.system函数执行该脚本。

6.5 代码示例:实现ls命令

可以使用os模块实现类似ls命令的功能,列出指定目录中的所有文件和目录。

示例代码:

import os
import sys# 获取命令行参数中的目录路径
dir_path = sys.argv[1] if len(sys.argv) > 1 else '.'# 列出目录中的所有文件和目录
for entry in os.listdir(dir_path):print(entry)

 

分析: 在这个示例中,从命令行参数中获取目录路径,并使用os.listdir函数列出该目录中的所有文件和目录。如果未提供目录路径,则默认列出当前目录。

6.6 代码示例:遍历目录中的所有目录和文件

我们可以使用os.walk函数递归遍历目录中的所有目录和文件,并打印每个文件的完整路径。

示例代码:

import os
import sys# 获取命令行参数中的目录路径
dir_path = sys.argv[1] if len(sys.argv) > 1 else '.'# 递归遍历目录
for root, dirs, files in os.walk(dir_path):for file in files:print(os.path.join(root, file))

 

分析: 在这个示例中,从命令行参数中获取目录路径,并使用os.walk函数递归遍历目录中的所有目录和文件,并打印每个文件的完整路径。

小李的理解: os.path可以帮你处理路径问题,比如获取文件名和目录。用os模块可以做很多文件和目录的操作,比如创建和删除文件、遍历目录。os.walk可以递归遍历目录,非常强大。

总结

在现代编程环境中,掌握文件操作技能对于开发者来说至关重要。Python作为一种高效、简洁的编程语言,提供了强大的文件操作功能。文件的基本操作、读写文件、文件指针的操作以及文件系统的操作。

1. 文件的基础操作

文件的基础操作是Python文件处理的核心部分。通过使用内置函数openclose,我们可以打开和关闭文件,并确保系统资源的有效利用。使用with语句可以简化文件操作,并确保文件在使用完毕后自动关闭,从而避免资源泄漏。

2. 读文件

Python提供了多种方法来读取文件内容,包括readreadlinereadlines。每种方法都有其独特的适用场景和优势。通过掌握这些方法,我们可以根据具体需求选择最合适的文件读取方式,确保代码的高效性和可维护性。

3. 写文件

写文件是文件操作中的另一个重要任务。Python的writewritelines方法提供了灵活的写入方式。结合使用读写缓冲区,可以进一步提高文件操作的性能。掌握这些写文件的方法,将使您能够高效地处理文件写入任务。

4. 操作文件指针

文件指针操作使我们能够实现文件的随机访问。通过seektell方法,我们可以灵活地控制文件指针的位置,从而实现高效的文件读取和写入。文件指针操作在处理大文件时尤为重要,因为它允许我们在不读取整个文件的情况下访问特定部分的数据。

5. 文件对象内建属性与上下文管理器

文件对象提供了一些内建属性,帮助我们获取文件的基本信息。此外,Python引入了上下文管理器,使得文件操作更加简洁和安全。通过自定义上下文管理器,我们可以管理更多的资源,进一步提高代码的可读性和可靠性。

6. 文件系统的基础操作

Python的osos.path模块提供了丰富的文件系统操作功能,包括文件路径操作、创建和删除文件和目录、遍历目录等。这些功能使我们能够高效地管理文件系统,并实现复杂的文件操作任务。通过掌握这些基础操作,您将能够在各种编程场景中灵活地处理文件系统。

如果您有任何问题或需要进一步的帮助,请随时留言讨论。Happy coding!

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

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

相关文章

B组亚太赛数学建模

问题1 1.对训练数据集进行数据清洗,处理缺失值和异常值。 2.采用散点图作为可视化手段。 3.采用皮尔逊相关系数进行相关性分析。 4.提出预防措施。 问题2 1.采用k-means聚类算法将洪水概率分为高中低三个群组。 2.通过线性回归模型计算特征权重。 3.选择特定…

django高校教务系统-计算机毕业设计源码81661

目 录 摘要 1 绪论 1.1 研究背景 1.2目的及意义 1.3论文结构与章节安排 2 高校教务系统设计分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 法律可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功能性分析 2.3 系统用例分析 2.4…

【新能源时代!看大模型(LLMs)如何助力汽车自动驾驶!】

文末有福利! 引言 本文主要介绍大模型(LLMs)如何助力汽车自动驾驶,简单来说,作者首先带大家了解大模型的工作模式,然后介绍了自动驾驶大模型的3大应用场景,最后指出自动驾驶大模型将会是未来的发展趋势,只…

制定事件响应计划的四个关键步骤,如何做到风险闭环

一个有效的安全事件响应策略的关键组成部分有哪些?一个有效的安全事件响应策略包括四个关键组成部分,它们协同工作以确保对网络安全问题的快速和有效响应。 一个有效的安全事件响应策略的关键组成部分有哪些? 一个有效的安全事件响应策略包括…

Linux笔记之二

Linux笔记之二 一、文件属性学习二、软链接和硬链接1.软链接2.硬链接 三、Vim编辑器四、账号管理总结 一、文件属性学习 Linux 系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。为了保护系统的安全性,Linux系统对不同…

HTML5使用<mark>标签:高亮显示文本

1、<mark>标签的使用 mark 标签用于表示页面中需要突出显示或高亮的一段文本&#xff0c;这段文本对于当前用户具有参考作用。它通常在引用原文以引起读者注意时使用。<mark>标签的作用相当于使用一支荧光笔在打印的纸张上标出一些文字。它与强调不同&#xff0c;…

短视频商城系统源码揭秘:架构设计与实现

在短视频平台和电商平台蓬勃发展的背景下&#xff0c;短视频商城系统应运而生&#xff0c;融合了短视频内容和电商功能&#xff0c;给用户带来了全新的购物体验。本文将揭示短视频商城系统的源码架构设计与实现&#xff0c;帮助开发者了解该系统的内部工作原理及其关键技术。 …

深度学习基础以及vgg16讲解

一 什么是卷积 上图所示&#xff0c;为图像边缘提取得一个卷积过程&#xff0c;卷积核就是计算当前像素左右两边得像素差&#xff0c;这个差值越大代表越可能是图像边缘。因此当实现其它功能时&#xff0c;只需要调整卷积核得参数即可。深度学习的训练其实就是在确定这些参数。…

学习笔记——动态路由——OSPF(邻接/邻居)

十、OSPF的邻接/邻居 1、OSPF路由器之间的关系 (1)基本介绍 在OSPF网络中&#xff0c;为了交换链路状态信息和路由信息&#xff0c;邻居设备之间首先要建立邻接关系&#xff0c;邻居(Neighbors)关系和邻接(Adjacencies)关系是两个不同的概念。 OSPF路由器的两种关系&#x…

Type-C接口快充取电技术的实现

Type-C接口快充取电技术的实现 Type-C接口快充取电技术主要通过USB PD&#xff08;Power Delivery&#xff09;协议实现。这种技术利用了Type-C接口的物理特性和PD协议的智能性&#xff0c;实现了高效、安全、快速的充电过程。具体实现过程如下&#xff1a; 接口连接与检测&a…

51单片机基础11——蓝牙模块控制亮灭

串口初试——蓝牙模块 蓝牙模块的使用1. 软硬件条件2. 蓝牙模块3. 代码(分文件处理之后的代码) 蓝牙模块的使用 1. 软硬件条件 单片机型号&#xff1a;STC89C52RC开发环境&#xff1a;KEIL4烧录软件串口通信软件&#xff1a;stc-isp蓝牙模块&#xff1a;HC-04LED模块(高电平点…

STM32CubeMX——定时器产生PWM基础(HAL库)

目录&#xff1a; 一、STM32CubeMX 配置1、选择定时器通道&#xff1a;2、设置 TIM2 channel1 的预分频器、自动重装等值&#xff1a; 二、keil5 进一步编程1、开启定时器2 通道 1 的 PWM 输出&#xff1a;2、改变 CCR 值&#xff08;改变占空比&#xff09;&#xff1a; 参考文…

【技术支持】vscode代码格式化空格数量问题

问题 使用AltShiftF代码格式化时&#xff0c;发现有些文件格式化后缩进为2格个空格&#xff0c;有些文件正常4个空格 刨析 发现vue创建的文件使用的是两个空格&#xff0c;而且换行符表示方式也不一样 LF 是 Unix 和 Unix-like 系统&#xff08;如 Linux 和 macOS&#xff0…

C#中委托与事件

一、委托 1.1概念 委托是一种引用类型&#xff0c;它可以用于封装并传递方法作为参数。委托可以理解为是一个指向方法的**“指针”&#xff0c;它允许将方法作为参数传递给其他方法或存储在数据结构中&#xff0c;然后稍后调用这些方法。&#xff08;委托可以看作时函数的容器…

汽车IVI中控开发入门及进阶(三十三):i.MX linux开发之开发板

前言: 大部分物料/芯片,不管MCU 还是SoC,都会有原厂提供配套开发板,有这样一个使用原型,在遇到问题时或者进行开发时可以使用。 i.MX 8QuadXPlus MEK board: 1、要测试display显示器,可使用i.MX mini SAS将“LVDS1_CH0”端口连接到LVDS到HDMI适配器的cable。 2、要测试…

Stream练习

运用点&#xff1a; 流内数据类型转换(map)、filter、limit、skip、concat(让两个流合并) 题目&#xff1a; 操作1、2&#xff1a; ArrayList<String> manList new ArrayList<>();ArrayList<String> womanList new ArrayList<>();Collections.addAl…

多模态MLLM都是怎么实现的(11)--从SadTalker到快手LivePortait

我之前出差带休假差不多两个礼拜吧&#xff0c;今天回北京更新一篇 我确实找到了一个有意思的东西&#xff0c;LivePortrait 这东西开源了&#xff0c;你可以认为是目前做得最好的"Sadtalker"&#xff0c;国内也有dream-talker&#xff0c;EMO之类的。 我之前看EMO的…

C++——模板详解(下篇)

一、非类型模板参数 模板参数分为类型形参与非类型形参。 类型形参即&#xff1a;出现在模板参数列表中&#xff0c;跟在class或者typename之后的参数类型名称。 非类型形参&#xff0c;就是用一个常量作为类&#xff08;函数&#xff09;模板的一个参数&#xff0c;在类&#…

kubernetes集群部署:node节点部署和CRI-O运行时安装(三)

关于CRI-O Kubernetes最初使用Docker作为默认的容器运行时。然而&#xff0c;随着Kubernetes的发展和OCI标准的确立&#xff0c;社区开始寻找更专门化的解决方案&#xff0c;以减少复杂性和提高性能。CRI-O的主要目标是提供一个轻量级的容器运行时&#xff0c;它可以直接运行O…