Python筑基之旅-文件(夹)和流

目录

一、文件操作

1、文件打开与关闭

2、文件读写

3、文件操作模式

4、文件编码

二、文件夹操作

1、创建文件夹

2、删除文件夹

3、改变当前工作目录

4、获取当前工作目录

5、检查文件/文件夹是否存在

6、遍历文件夹

三、文件路径操作

1、获取绝对路径

2、构建完整路径

3、检查路径是否存在

4、判断是否为目录

5、获取路径的目录部分和文件名部分

6、获取文件名(不含扩展名)和扩展名

四、流

1、流的理解

2、流的特性

2-1、顺序性

2-2、连续性

2-3、抽象性

3、流的分类

3-1、根据读写操作

3-1-1、输入流

3-1-2、输出流

3-2、根据数据类型

3-2-1、字节流

3-2-2、字符流

3-3、根据环境

3-3-1、文件流

3-3-2、网络流

3-3-3、内存流

3-3-4、数据库流

4、流的操作

4-1、打开流(如打开文件或建立网络连接)

4-2、读取数据(从输入流中)

4-3、写入数据(到输出流中)

4-4、关闭流(释放资源)

五、推荐阅读

1、Python函数之旅

2、Python算法之旅

3、博客个人主页

一、文件操作

1、文件打开与关闭

# 1、文件打开和关闭
# 1-1、读取文件
with open('test.txt', 'r') as file:
    # 读取文件内容
    content = file.read()
    print(content)
    # with语句块结束时,文件会自动关闭
# 1-2、写入文件
# 打开文件以写入,如果文件不存在则创建它
with open('test.txt', 'w') as file:
    # 写入内容到文件
    file.write('Hello, World!')
    # with语句块结束时,文件会自动关闭
# 1-3、追加到文件
with open('test.txt', 'a') as file:
    # 追加内容到文件
    file.write('\nAnother line of text.')
    # with语句块结束时,文件会自动关闭
# 1-4、读取文件行
with open('test.txt', 'r') as file:
    # 逐行读取文件内容
    for line in file:
        print(line, end='')  # 使用 end='' 避免打印额外的换行符
    # with语句块结束时,文件会自动关闭

2、文件读写

# 2、文件读写
# 2-1、读取整个文件
# 打开文件并读取整个内容
with open('test.txt', 'r', encoding='utf-8') as file:
    content = file.read()
    print(content)
    # 文件会在with语句块结束时自动关闭
# 2-2、逐行读取文件
# 打开文件并逐行读取内容
with open('test.txt', 'r', encoding='utf-8') as file:
    for line in file:
        print(line, end='')  # 如果不想在每行后都打印换行符,可以使用end=''
# 文件会在with语句块结束时自动关闭
# 2-3、读取并修改文件内容(不推荐在原文件修改)
# 读取文件内容
with open('test.txt', 'r', encoding='utf-8') as file:
    content = file.read()
modified_content = content.replace('World', 'Python')
# 将修改后的内容写回到文件
with open('test.txt', 'w', encoding='utf-8') as file:
    file.write(modified_content)
with open('test.txt', 'r', encoding='utf-8') as file:
    content = file.read()
    print(content)
    # 文件会在with语句块结束时自动关闭
# 2-4、读取和写入二进制文件
# 读取二进制文件
with open('example.bin', 'rb') as file:
    binary_content = file.read()
# 处理二进制内容(这里只是简单打印长度)
print(len(binary_content))
# 写入二进制内容到文件(这里只是一个示例,你需要有有效的二进制数据)
with open('output.bin', 'wb') as file:
    file.write(b'\x00\x01\x02\x03')  # 写入四个字节的二进制数据
# 文件会在with语句块结束时自动关闭

3、文件操作模式

# 3、文件操作模式
# 3-1、读取模式(r)
# 读取文件内容,文件必须存在,否则会引发FileNotFoundError
with open('test.txt', 'r', encoding='utf-8') as file:
    content = file.read()
    print(content)
# 3-2、写入模式(w)
# 写入文件内容,如果文件不存在则创建它,如果文件已存在则覆盖它
with open('test.txt', 'w', encoding='utf-8') as file:
    file.write('Hello, World!\n')
# 3-3、追加模式(a)
# 将内容追加到文件末尾,如果文件不存在则创建它
with open('test.txt', 'a', encoding='utf-8') as file:
    file.write('This is appended content.\n')
# 3-4、读写模式(r+)
# 打开文件进行读写,文件指针会放在文件的开头
with open('test.txt', 'r+', encoding='utf-8') as file:
    content = file.read()
    print(content)
    file.seek(0)  # 将文件指针重置到文件开头
    file.write('This will replace the first line if it\'s short enough.\n')
# 3-5、写入并读取模式(w+)
# 打开文件进行读写,如果文件已存在则覆盖它,如果文件不存在则创建它
with open('test.txt', 'w+', encoding='utf-8') as file:
    file.write('Hello, World!\n')
    file.seek(0)  # 将文件指针重置到文件开头
    content = file.read()
    print(content)
# 3-6、追加并读取模式(a+)
# 打开文件进行读写。如果文件已存在,文件指针会放在文件的末尾(即追加模式);如果文件不存在,创建文件
with open('test.txt', 'a+', encoding='utf-8') as file:
    file.write('Appending content...\n')
    file.seek(0)  # 将文件指针重置到文件开头
    content = file.read()
    print(content)  # 注意:这里会先打印出原有内容,然后是新追加的内容
# 3-7、二进制读取模式(rb)
# 读取二进制文件内容
with open('example.bin', 'rb') as file:
    binary_content = file.read()
    # 处理二进制内容...
# 3-8、二进制写入模式(wb)
# 写入二进制文件内容
with open('example.bin', 'wb') as file:
    file.write(b'\x00\x01\x02\x03')
# 3-9、二进制追加模式(ab)
# 将二进制内容追加到文件末尾
with open('example.bin', 'ab') as file:
    file.write(b'\x04\x05\x06\x07')

4、文件编码

# 4、文件编码
# 4-1、读取不同编码的文件
# 读取UTF-8编码的文件
with open('utf8_file.txt', 'r', encoding='utf-8') as file:
    content = file.read()
    print(content)
# 读取ISO-8859-1(Latin-1)编码的文件
with open('latin1_file.txt', 'r', encoding='iso-8859-1') as file:
    content = file.read()
    print(content)
    # 注意:如果文件编码与指定的编码不匹配,可能会出现乱码
# 4-2、将文本写入文件并指定编码
# 将文本写入UTF-8编码的文件
with open('output_utf8.txt', 'w', encoding='utf-8') as file:
    file.write('你好,世界!')
# 将文本写入ISO-8859-1编码的文件(注意:非ASCII字符可能会被编码为替代字符)
with open('output_latin1.txt', 'w', encoding='iso-8859-1', errors='replace') as file:
    file.write('你好,世界!')  # 这将写入替代字符,因为Latin-1不支持中文字符
# 使用二进制模式写入,并手动编码为UTF-8
with open('output_binary_utf8.txt', 'wb') as file:
    file.write('你好,世界!'.encode('utf-8'))
# 4-3、转换文件编码
# 将UTF-8编码的文件转换为GBK编码的文件
with open('input_utf8.txt', 'r', encoding='utf-8') as file_utf8, \
        open('output_gbk.txt', 'w', encoding='gbk') as file_gbk:
    content = file_utf8.read()
    file_gbk.write(content)
    # 注意:如果原始文件包含GBK不支持的字符,这可能会导致错误,你可能需要处理这种情况
# 4-4、检测文件编码
# 首先,你需要安装chardet库
import chardet
# 检测文件的编码
with open('test.txt', 'rb') as file:
    raw_data = file.read()
    result = chardet.detect(raw_data)
    print(result)  # 输出类似{'encoding': 'ascii', 'confidence': 1.0, 'language': ''}的字典
# 使用检测到的编码读取文件
encoding = chardet.detect(raw_data)['encoding']
with open('test.txt', 'r', encoding=encoding) as file:
    content = file.read()
    print(content)

二、文件夹操作

1、创建文件夹

# 5-1、创建单个文件夹
import os
# 定义要创建的文件夹路径,根据实际情况,自行修改即可
folder_path = 'E:\测试代码\my_new_folder'
# 使用os.makedirs创建文件夹
# 如果文件夹已存在并且没有设置exist_ok=True,则会抛出FileExistsError异常
try:
    os.makedirs(folder_path)
    print(f"文件夹 '{folder_path}' 已成功创建!")
except FileExistsError:
    print(f"文件夹 '{folder_path}' 已存在!")
# 如果你想避免异常,并允许文件夹已存在,可以这样做:
try:
    os.makedirs(folder_path, exist_ok=True)
    print(f"文件夹 '{folder_path}' 已创建或已存在!")
except Exception as e:
    print(f"创建文件夹时发生错误:{e}")
# 5-2、创建嵌套的文件夹
import os
# 定义要创建的嵌套文件夹路径
nested_folder_path = 'E:\测试代码\Myelsa'
# 使用os.makedirs创建嵌套的文件夹
try:
    os.makedirs(nested_folder_path)
    print(f"嵌套文件夹 '{nested_folder_path}' 已成功创建!")
except FileExistsError:
    print(f"嵌套文件夹 '{nested_folder_path}' 已存在!")
# 如果你想避免异常,并允许文件夹已存在,可以这样做:
try:
    os.makedirs(nested_folder_path, exist_ok=True)
    print(f"嵌套文件夹 '{nested_folder_path}' 已创建或已存在!")
except Exception as e:
    print(f"创建嵌套文件夹时发生错误:{e}")

2、删除文件夹

# 6、删除文件夹
# 6-1、使用os.rmdir()删除空文件夹
import os
# 定义要删除的文件夹路径(注意:这个文件夹必须是空的)
folder_path = 'E:\测试代码\Myelsa'
# 使用os.rmdir删除文件夹
try:
    os.rmdir(folder_path)
    print(f"文件夹 '{folder_path}' 已成功删除!")
except OSError as e:
    print(f"删除文件夹时发生错误:{e}") # 输出:删除文件夹时发生错误:[WinError 145] 目录不是空的。: 'E:\\测试代码\\Myelsa'
    # 注意:如果文件夹不为空,os.rmdir()会抛出OSError异常
# 6-2、使用shutil.rmtree()删除文件夹及其内容
import shutil
# 定义要删除的文件夹路径(可以包含文件和其他文件夹)
folder_path = 'E:\测试代码\Myelsa'
# 使用shutil.rmtree删除文件夹及其内容
try:
    shutil.rmtree(folder_path)
    print(f"文件夹 '{folder_path}' 及其内容已成功删除!")
except OSError as e:
    print(f"删除文件夹时发生错误:{e}")
    # shutil.rmtree()会递归地删除指定目录及其所有内容

3、改变当前工作目录

# 7、改变当前工作目录
# 7-1、改变当前工作目录
import os
# 打印当前工作目录
print(f"当前工作目录是:{os.getcwd()}")
# 定义新的工作目录路径
new_dir = 'E:\测试代码/directory'  # 替换成你想要的工作目录路径
# 改变当前工作目录
try:
    os.chdir(new_dir)
    print(f"已成功改变工作目录到:{os.getcwd()}")
except FileNotFoundError:
    print(f"目录 '{new_dir}' 不存在!")
except PermissionError:
    print(f"你没有权限访问目录 '{new_dir}'!")
except Exception as e:
    print(f"改变工作目录时发生错误:{e}")
# 7-2、使用相对路径改变工作目录
import os
# 假设你的脚本位于 /home/user/scripts 目录下  
# 并且你想要改变到它的上一级目录 /home/user  
# 打印当前工作目录  
print(f"当前工作目录是:{os.getcwd()}")
# 定义新的工作目录(这里使用相对路径 ".." 表示上一级目录)  
new_dir = '..'
# 改变当前工作目录  
try:
    os.chdir(new_dir)
    print(f"已成功改变工作目录到:{os.getcwd()}")
except Exception as e:
    print(f"改变工作目录时发生错误:{e}")

4、获取当前工作目录

# 8、获取当前工作目录
import os
# 使用os.getcwd()获取当前工作目录
current_working_directory = os.getcwd()
# 打印当前工作目录
print(f"当前工作目录是:{current_working_directory}")

5、检查文件/文件夹是否存在

# 9、检查文件/文件夹是否存在
# 9-1、检查文件是否存在
import os
# 定义文件路径
file_path = 'E:\测试代码\Myelsa/file.txt'
# 使用os.path.exists()检查文件是否存在
if os.path.exists(file_path):
    print(f"文件 '{file_path}' 存在!")
else:
    print(f"文件 '{file_path}' 不存在!")
# 如果你还想检查它是否是一个文件(而不是文件夹),可以使用os.path.isfile()
if os.path.isfile(file_path):
    print(f"'{file_path}' 是一个文件!")
elif os.path.isdir(file_path):
    print(f"'{file_path}' 是一个文件夹!")
# 9-2、检查文件夹是否存在
import os
# 定义文件夹路径
folder_path = 'E:\测试代码\Myelsa'
# 使用os.path.exists()检查文件夹是否存在
if os.path.exists(folder_path):
    print(f"文件夹 '{folder_path}' 存在!")
else:
    print(f"文件夹 '{folder_path}' 不存在!")
# 如果你只想检查它是否是一个文件夹(而不是文件),可以使用os.path.isdir()
if os.path.isdir(folder_path):
    print(f"'{folder_path}' 是一个文件夹!")

6、遍历文件夹

# 10、遍历文件夹
# 10-1、遍历指定文件夹中的所有文件和子文件夹
import os
# 定义要遍历的文件夹路径
folder_path = 'E:\测试代码\Myelsa'
# 遍历文件夹
for root, dirs, files in os.walk(folder_path):
    for name in files:
        # 构建文件的完整路径
        file_path = os.path.join(root, name)
        print(file_path)  # 打印文件路径
    for name in dirs:
        # 构建子文件夹的完整路径
        subfolder_path = os.path.join(root, name)
        print(subfolder_path)  # 打印子文件夹路径
        # 如果你想递归遍历子文件夹,你可以在这里递归调用你的遍历函数
# 注意:os.walk()默认就是递归遍历的,所以你不需要额外写递归代码
# 10-2、仅遍历当前文件夹(不包括子文件夹)
import os
# 定义要遍历的文件夹路径
folder_path = 'E:\测试代码\Myelsa'
# 遍历文件夹中的文件和子文件夹
for name in os.listdir(folder_path):
    # 构建文件的完整路径(如果是文件)  
    full_path = os.path.join(folder_path, name)
    # 判断是文件还是文件夹
    if os.path.isfile(full_path):
        print(f"文件: {full_path}")
    elif os.path.isdir(full_path):
        print(f"文件夹: {full_path}")

三、文件路径操作

1、获取绝对路径

# 11、获取绝对路径
# 11-1、获取当前工作目录的绝对路径
import os
# 获取当前工作目录的绝对路径
current_working_directory = os.path.abspath('.')
print(f"当前工作目录的绝对路径是:{current_working_directory}")
# 11-2、获取文件或文件夹的绝对路径
import os
# 定义文件或文件夹的相对路径
relative_path = 'E:\测试代码\Myelsa'
# 获取文件或文件夹的绝对路径
absolute_path = os.path.abspath(relative_path)
print(f"文件或文件夹的绝对路径是:{absolute_path}")
# 11-3、获取脚本文件的绝对路径
import os
# 获取脚本文件的绝对路径
script_dir = os.path.dirname(os.path.abspath(__file__))
print(f"脚本文件的绝对路径是:{script_dir}")
# 如果你想要获取脚本文件所在目录下的某个文件的绝对路径
file_in_same_dir = os.path.join(script_dir, 'file.txt')
print(f"同一目录下的某个文件的绝对路径是:{file_in_same_dir}")

2、构建完整路径

# 12、构建完整路径
# 12-1、使用os.path.join()构建相对路径
import os
# 定义路径组件
directory = 'path'
subdirectory = 'to'
filename = 'your_file.txt'
# 使用os.path.join()构建相对路径
relative_path = os.path.join(directory, subdirectory, filename)
print(f"相对路径是:{relative_path}")
# 12-2、使用os.path.join()和os.getcwd()构建绝对路径
import os
# 定义路径组件
relative_directory = 'path'
relative_filename = 'your_file.txt'
# 获取当前工作目录的绝对路径
current_directory = os.getcwd()
# 使用os.path.join()将当前工作目录和相对路径组件合并成绝对路径
absolute_path = os.path.join(current_directory, relative_directory, relative_filename)
print(f"绝对路径是:{absolute_path}")
# 12-3、构建具有特定根目录的完整路径
import os
# 定义根目录和路径组件
root_directory = '/home/user'
directory = 'data'
filename = 'important_data.csv'
# 使用os.path.join()构建完整路径
full_path = os.path.join(root_directory, directory, filename)
print(f"完整路径是:{full_path}")

3、检查路径是否存在

# 13、检查路径是否存在
# 13-1、检查文件是否存在
import os
# 定义文件路径
file_path = '/path/to/your/file.txt'
# 检查文件是否存在
if os.path.exists(file_path):
    print(f"文件 {file_path} 存在!")
else:
    print(f"文件 {file_path} 不存在!")
# 13-2、检查文件夹是否存在
import os
# 定义文件夹路径
folder_path = 'E:\测试代码\Myelsa'
# 检查文件夹是否存在
if os.path.exists(folder_path):
    print(f"文件夹 {folder_path} 存在!")
    # 如果需要,还可以检查它是否真的是一个文件夹
    if os.path.isdir(folder_path):
        print(f"并且它是一个文件夹!")
    else:
        print(f"但它不是一个文件夹!")
else:
    print(f"文件夹 {folder_path} 不存在!")
# 13-3、检查路径是否存在,并根据情况创建文件夹
import os
# 定义文件夹路径
folder_path = 'E:\测试代码\Myelsa'
# 检查文件夹是否存在
if not os.path.exists(folder_path):
    # 如果文件夹不存在,则创建它
    os.makedirs(folder_path)
    print(f"文件夹 {folder_path} 已创建!")
else:
    print(f"文件夹 {folder_path} 已经存在!")

4、判断是否为目录

# 14、判断是否为目录
# 14-1、判断一个路径是否为目录
import os
# 定义路径
path = 'E:\测试代码\Myelsa'
# 判断是否为目录
if os.path.isdir(path):
    print(f"路径 {path} 是一个目录!")
else:
    print(f"路径 {path} 不是一个目录或不存在!")
# 14-2、结合os.path.exists()和os.path.isdir()
# 如果你想先检查路径是否存在,然后再判断它是否是一个目录
import os
# 定义路径
path = 'E:\测试代码\Myelsa'
# 检查路径是否存在
if os.path.exists(path):
    # 如果存在,再判断是否为目录
    if os.path.isdir(path):
        print(f"路径 {path} 是一个存在的目录!")
    else:
        print(f"路径 {path} 存在,但它不是一个目录,可能是一个文件!")
else:
    print(f"路径 {path} 不存在!")
# 14-3、处理多个路径
# 如果你想检查多个路径,并将它们是否为目录的信息打印出来
import os
# 定义多个路径
paths = [
    'E:\测试代码\Myelsa',
    'E:\测试代码\Myelsa/folder1',
    'E:\测试代码\Myelsa/file.txt'
]
# 遍历路径并判断
for path in paths:
    if os.path.isdir(path):
        print(f"路径 {path} 是一个目录!")
    else:
        print(f"路径 {path} 不是一个目录或不存在!")

5、获取路径的目录部分和文件名部分

# 15、获取路径的目录部分和文件名部分
# 15-1、获取目录部分和文件名部分
import os
# 定义文件路径
path = 'E:\测试代码\Myelsa/file.txt'
# 获取目录部分
dir_path = os.path.dirname(path)
print(f"目录部分是:{dir_path}")
# 获取文件名部分
file_name = os.path.basename(path)
print(f"文件名部分是:{file_name}")
# 15-2、处理多个文件路径
import os
# 定义多个文件路径
paths = [
    'E:\测试代码\Myelsa/file.txt',
    'E:\测试代码\Myelsa/folder1/file.txt',
    'E:\测试代码\Myelsa/folder2/file.txt'
]
# 遍历路径并获取目录部分和文件名部分
for path in paths:
    dir_path = os.path.dirname(path)
    file_name = os.path.basename(path)
    print(f"路径 {path} 的目录部分是:{dir_path}")
    print(f"路径 {path} 的文件名部分是:{file_name}")
    print()  # 打印一个空行分隔不同的路径信息

6、获取文件名(不含扩展名)和扩展名

# 16、获取文件名(不含扩展名)和扩展名
# 16-1、获取文件名(不含扩展名)和扩展名
import os
# 定义文件路径
path = 'E:\测试代码\Myelsa/file.txt'
# 获取文件名和扩展名
filename, extension = os.path.splitext(os.path.basename(path))
# 打印结果
print(f"文件名(不含扩展名)是:{filename}")
print(f"扩展名是:{extension}")
# 16-2、处理多个文件路径
import os
# 定义多个文件路径
paths = [
    'E:\测试代码\Myelsa/file.txt',
    'E:\测试代码\Myelsa/folder1/file.txt',
    'E:\测试代码\Myelsa/folder2/file.txt'
]
# 遍历路径并获取文件名(不含扩展名)和扩展名
for path in paths:
    filename, extension = os.path.splitext(os.path.basename(path))
    print(f"路径 {path} 的文件名(不含扩展名)是:{filename}")
    print(f"路径 {path} 的扩展名是:{extension}")
    print()  # 打印一个空行分隔不同的路径信息

四、流

1、流的理解

        在Python中,"流"(stream)这个概念通常与文件I/O(输入/输出)或网络通信等场景相关,它指的是一种数据传输的抽象,允许数据以连续的方式从一个位置移动到另一个位置,流可以是输入流(从源读取数据),也可以是输出流(将数据写入目标)

2、流的特性

2-1、顺序性

        数据在流中是按顺序传输的。

2-2、连续性

        数据在流中是连续不断的,直到整个数据传输完成。

2-3、抽象性

        流提供了一个对数据传输的抽象层,使得我们不必关心底层的实现细节。

3、流的分类

3-1、根据读写操作
3-1-1、输入流

        用于从数据源读取数据。

3-1-2、输出流

        用于将数据写入到目标位置。

3-2、根据数据类型
3-2-1、字节流

        用于处理二进制数据,如图像、音频、视频等。

3-2-2、字符流

        用于处理文本数据,即字符序列。

流的分类数据类型处理对象
字符流处理文本数据,遵循字符编码规则以字符为单位进行读写,需要考虑字符编码
字节流处理二进制数据,不遵循字符编码规则以字节为单位进行读写,不关心字符编码
3-3、根据环境
3-3-1、文件流

        用于文件的读写操作。

3-3-2、网络流

        用于网络通信中的数据传输。

3-3-3、内存流

        在内存中处理数据,如缓存、临时存储等。

3-3-4、数据库流

        与数据库交互时使用的数据流。

4、流的操作

        对于流,我们通常可以执行以下操作:

4-1、打开流(如打开文件或建立网络连接)
4-2、读取数据(从输入流中)
4-3、写入数据(到输出流中)
4-4、关闭流(释放资源)

 

五、推荐阅读

1、Python函数之旅

2、Python算法之旅

3、博客个人主页

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python3 使用 pymssql 连接 SQL Server 报错:DB-Lib error message 20002, severity 9

一、版本说明 python版本: 3.12.1 pymssql版本: 2.3.0 # pymssql.version_info() SQL Server版本:SQL Server 2008 OS版本: rocky linux 9.4二、报错信息 Traceback (most recent call last):File "src/pymssql/_…

【QT环境配置】节约msvc2017灰色不可用问题

1. 问题 msvc2017不可用,2019、2022都同理解决。 2. 解决 打开控制面板->程序->程序和功能->找到自己安装的vs程序->鼠标右键后出现卸载更改->点击更改 找到下面组件即可。(msvc2019就找msvcv142)

乘风破浪,创维汽车旗舰店落户安徽

2024年5月19日,创维汽车宣城家奇体验中心盛大开业。宣城市委办公室副主任师典雅、市投资促进局副局长金崇学、经开区管委会副主任汤晓峰、宣城市通信局局长梁登峰、创维汽车战区总经理刘俊、创维汽车大区总监王大明等人出席此次开业盛典,共同见证了创维汽…

如何编辑 PDF 中的文本

使用 PDF 格式时最常见的挑战之一是弄清楚如何编辑 PDF 文档中的现有文本。该问题不仅影响新手,还影响多年来处理各种文档的专业人士。 PDF 格式专为处理数字纸张而设计。它以原始形式保留所有数据,例如表格、图章和签名。对于需要安全可靠地分发文档的…

2024年了,再聊安卓上的分身应用工具

大家好,最近更新的慢了,一个最近有了小宝宝之后,更多时间需要忙着照顾她,平时上班较忙,周末留出更多时间陪着她。另一个是,最近一直参与一个项目,一个全新的安卓多开工具,终于做的差…

NIO流(多路复用技术)

目录 什么是NIO使用场景 NIO(new IO)相关包路径NIO的实现基础NIO的核心组件Buffer缓冲区详解数据如何从磁盘读到用户进程 ChannelChannel的使用 其他组件字符集和Charset文件锁NIO工具类使用Files的FileVisitor遍历文件和目录使用WatchService监控文件变化访问文件属性 什么是N…

YOLOv10真正实时端到端目标检测(原理介绍+代码详见+结构框图)| YOLOv10如何训练自己的数据集(NEU-DET为案列)

💡💡💡本文主要内容:真正实时端到端目标检测(原理介绍代码详见结构框图)| YOLOv10如何训练自己的数据集(NEU-DET为案列) 博主简介 AI小怪兽,YOLO骨灰级玩家,1&#xff0…

AI写作工具:助力论文撰写的创新助手

近年来,随着科技的快速发展,AI已经逐渐渗透到了生活中的方方面面,其中也包含着学术领域。 作为学生党,你是否还在为期末论文,大学生实践报告而发愁? 有了这些AI写作神器,大学生们再也不用在期…

icloud照片怎么恢复到相册?2个方法,轻松解决烦恼

在现代生活中,照片承载着我们的回忆和珍贵的时刻,而iCloud提供了便捷的云存储服务,让用户可以方便地备份和同步手机上的照片、视频等文件。 然而,有时候我们可能会不小心删除了在iCloud上的照片,或者想要将iCloud照片…

【408真题】2009-18

“接”是针对题目进行必要的分析,比较简略; “化”是对题目中所涉及到的知识点进行详细解释; “发”是对此题型的解题套路总结,并结合历年真题或者典型例题进行运用。 涉及到的知识全部来源于王道各科教材(2025版&…

【Python】 列表中的删除操作:del、remove 和 pop 的区别

基本原理 在Python中,列表(list)是一种非常灵活的数据结构,它允许我们存储一系列的元素。在处理列表时,我们经常需要添加、修改或删除元素。在删除元素时,我们可以使用三种不同的方法:del、rem…

mac电脑用n切换node版本

一、安装 node版本管理工具 “n” sudo npm install -g n二、检查安装成功&#xff1a; n --version三、查看依赖包的所有版本号 比如: npm view webpack versions --json npm view 依赖包名 versions --json四、安装你需要的版本的node sudo n <node版本号> // 例如…

基于 Spring Boot 博客系统开发(十一)

基于 Spring Boot 博客系统开发&#xff08;十一&#xff09; 本系统是简易的个人博客系统开发&#xff0c;为了更加熟练地掌握 SprIng Boot 框架及相关技术的使用。&#x1f33f;&#x1f33f;&#x1f33f; 基于 Spring Boot 博客系统开发&#xff08;十&#xff09;&#x…

使用chatglm.cpp本地部署ChatGLM3-6B模型

ChatGLM3模型介绍 ChatGLM3-6B 是 ChatGLM 系列最新一代的开源模型&#xff0c;在保留了前两代模型对话流畅、部署门槛低等众多优秀特性的基础上&#xff0c;ChatGLM3-6B 引入了如下特性&#xff1a; 更强大的基础模型&#xff1a; ChatGLM3-6B 的基础模型 ChatGLM3-6B-Base …

STM32_HAL__TIM_输出比较

概述 STM32的输出比较功能通常是指在微控制器的PWM&#xff08;脉冲宽度调制&#xff09;生成能力中的一个方面。STM32微控制器拥有一个或多个定时器/计数器&#xff0c;这些定时器/计数器可以用来生成PWM信号。PWM信号是一种重要的控制信号&#xff0c;广泛应用于电机控制、亮…

爬虫案例-亚马逊反爬流程分析梳理(验证码突破)(x-amz-captcha)

总体概览&#xff1a;核心主要是需要突破该网站的验证码&#xff0c;成功后会返回我们需要的参数后再去请求一个中间页&#xff08;类似在后台注册一个session&#xff09;&#xff0c;最后需要注意一下 IP 是不能随意切换的 主要难点&#xff1a; 1、梳理整体反爬流程 2、验证…

分子对接 molecular docking

https://www.sciencedirect.com/science/article/pii/S094471132400374X?via%3Dihub GitHub - beikwx/SailVina: SailVina重构增强版 Molecular docking Download the PTPRB protein structure on the PDB database (RCSB PDB: Homepage). Select the high-resolution PTP…

深入理解SVM和浅层机器学习算法的训练机制

深入理解SVM和浅层机器学习算法的训练机制支持向量机&#xff08;SVM&#xff09;的训练过程SVM的基本概念SVM的损失函数训练方法 浅层机器学习算法的训练机制决策树K-最近邻&#xff08;K-NN&#xff09;朴素贝叶斯 结论 深入理解SVM和浅层机器学习算法的训练机制 在探讨浅层…

RedHat9 | DNS剖析-建立子域并进行区域委派

一、实验环境 1、委派DNS服务器 域名空间由多个域构成&#xff0c;DNS提供了将域名空间划分为1个或多个区域的方法&#xff0c;这样使得管理更加方便。在域的规模增大后&#xff0c;可以为域添加附加域&#xff0c;上级域为父域&#xff0c;下级域为子域&#xff0c;下列案例…

FuTalk设计周刊-Vol.051

#AI漫谈 热点捕手 1.ChatGPT 多端加入生成图像工具 DALL-E OpenAI 发文&#xff0c;宣布用户可以在 ChatGPT 中跨 Web、iOS 和 Android 使用 DALL-E 生成图像。在官方放出的视频演示中可以看到&#xff0c;用户能够通过添加、删除或调整图像中的元素来完善自己的 DALL-E 作品。…