python文件处理之os模块和shutil模块

目录

1.os模块

os.path.exists(path):文件或者目录存在与否判断

os.path.isfile(path):判断是否是文件

os.path.isdir(path):判断是否是文件夹

os.remove(path):尝试删除文件

os.rmdir(path):尝试删除目录

os.mkdir(path):创建目录

os.rename:文件(夹)重命名或剪切

os.getcwd():获取当前工作路径

os.chdir(path):改变当前工作路径

os.listdir(path):获取指定目录下的所有文件(夹)名

os.path.join(__path, *paths):将多个文件(夹)组成一个文件路径

os.path.abspath(path):返回由当前工作目录组成的绝对路径

os.path.isabs(path):判断是否符合绝对路径格式

os.path.dirname(path):获取文件(夹)所在目录

os.path.basename(path):获取文件(夹)名字

os.path.split(path):获取文件(夹)所在目录和名字

os.walk(path):目录深度遍历

os.path.sep宏

os.path.getsize(path):获取文件字节大小

文件目录深度遍历

__file__ :python内置宏:当前代码所在文件的绝对路径

获取当前代码文件所在目录

2.shutil模块

shutil.copyfile文件复制

shutil.move文件剪切

shutil.rmtree删除文件夹


1.os模块

os库中有许多常用的对文件和文件夹处理的函数。

os.path.exists(path):文件或者目录存在与否判断

作用:判断文件或者目录是否存在。若存在返回True,否则返回false。

import os
datapath1 = r"C:\xxxx\xxxx\xxxx"
print(os.path.exists(datapath1))   # False

os.path.isfile(path):判断是否是文件

判断是否是文件。如果path不存在返回False,如果path存在且是文件返回True,path存在且不是文件返回False。

import os
path1 = r"C:"
print(os.path.isfile(path1))  # False,因为是目录
path2 = r"C:\xxxx\xxxx\xxxx\data.txt"
print(os.path.isfile(path2))  # False,因为文件不存在
path3 = r"C:\xxxx\data.txt"
print(os.path.isfile(path3))  # True,因为path存在且是文件

os.path.isdir(path):判断是否是文件夹

作用:判断是否是文件夹。如果path不存在返回False,如果path存在且是文件夹返回True,path存在且不是文件夹返回False。

import os
path1 = r"C:"
print(os.path.isdir(path1))  # True,因为path存在且是目录
path2 = r"C:\xxxx\xxxx\xxxx"
print(os.path.isdir(path2))  # False,因为path不存在
path3 = r"C:\xxxx"
print(os.path.isdir(path3))  # True,因为path存在且是目录
path4 = r"C:\xxxx\data.txt"
print(os.path.isdir(path4))  # False,因为path是文件

os.remove(path):尝试删除文件

如果文件不存在会报错FileNotFoundError,因此需要先判断文件是否存在。如果path存在且不是文件也会报错FileNotFoundError。

import os

path = r"D:\xxxx\xxxx\xxxx\venv\data.txt"
if os.path.exists(path):
    try:
        os.remove(path)
        print(f"删除文件{path}成功")
    except FileNotFoundError as e:
        print(e)
        print(f"{path}是目录不是文件,os.remove函数无法删除")
else:
    print(f"{path} not exist")

os.rmdir(path):尝试删除目录

os.rmdir(path)

  • 如果path不存在则会FileNotFoundError。所以一般建议先判断文件夹存在再调用这个函数。
  • 如果path且为文件,也会报错FileNotFoundError
  • 如果path且为目录,如果目录为空目录,则可以删除,如果不为空则无法删除,报错OSError
import os

path = r"C:\xxxx"
if os.path.exists(path):
    try:
        os.rmdir(path)
        print(f"删除空目录{path}成功")
    except FileNotFoundError as e:
        print(e)
        print(f"删除{path}失败,因为它是文件")
    except OSError as e:
        print(e)
        print(f"删除{path}失败,因为它不是空目录")
else:
    print(f"{path} not exist")

os.mkdir(path):创建目录

  • 如果路径存在则FileExistsError
  • 如果路径不存在则创建路径。但如果路径是几层目录都不存在,则创建会出现FileNotFoundError,比如要创建目录"D:\xxxx\xxxx\xxxx",因为"D:\xxxx\xxxx"是不存在的,所以会报错。
import os

datapath1 = r"C:\xxxx"
if not os.path.exists(datapath1):
    try:
        os.mkdir(datapath1)
    except FileNotFoundError as e:
        print("FileNotFoundError:", e)
else:
    print(datapath1, "已经存在")


datapath2 = r"D:\xxxx\xxxx\xxxx"
if not os.path.exists(datapath2):
    try:
        os.mkdir(datapath2)
    except FileNotFoundError as e:
        print("FileNotFoundError:", e)
else:
    print(datapath2, "已经存在")

自定义创建目录函数,像"D:\xxxx\xxxx\xxxx"这样的目录也能创建

def make_dir(dir_path):
    need_build_dir_list = []
    while True:
        # print(dir_path)
        if os.path.exists(dir_path):
            break
        else:
            need_build_dir_list.append(dir_path)
            dir_path = os.path.dirname(dir_path)
    # print(need_build_dir_list)

    for i in range(len(need_build_dir_list)-1, -1, -1):
        print("创建目录:", need_build_dir_list[i])
        os.mkdir(need_build_dir_list[i])


temp_dir = r"D:\xxxx\xxxx\xxxx"
make_dir(temp_dir)

os.rename:文件(夹)重命名或剪切

os.rename(src, dst)

  • src:是文件或文件夹的名称。 它必须已经存在,否则FileNotFoundError。绝对路径。
  • dst:是要更改的文件或文件夹的新名称。绝对路径。

注意:

  • 如果src是文件,则dst按文件生成。
    • 如果文件src和dst所在的目录相同,则为文件重命名。
    • 如果文件src和dst所在的目录不同,则为文件剪切。
  • 如果src是目录,则dst按目录生成。
    • 如果文件夹src和dst所在的目录相同,则为文件夹重命名。
    • 如果文件夹src和dst所在的目录不同,则为文件夹剪切。

例子1:

import os

if __name__ == "__main__":
    src_name = "D:/projects/clear_market_data/test.csv"
    dst_name = "D:/projects/test2.csv"
    if os.path.exists(src_name):
        os.rename(src_name, dst_name)

例子2:

import os

if __name__ == "__main__":
    src_name = r"C:\xxxx"
    dst_name = r"C:\yyyy.txt"
    if os.path.exists(src_name):
        os.rename(src_name, dst_name)

注意这里将文件夹"xxxx"改成了文件夹"yyyy.txt","yyyy.txt"是文件夹名而不是文件。

os.getcwd():获取当前工作路径

import os

currentWorkPath = os.getcwd()
print(currentWorkPath)  # D:\projects\test

path = os.path.abspath('.')  # 单个点表示当前目录的缩写
print(path)  # D:\projects\test

os.chdir(path):改变当前工作路径

作用:改变当前工作路径。如果目录不存在则FileNotFoundError

import os

currentWorkPath = os.getcwd()
print(currentWorkPath)   # D:\projects\test

try:
    os.chdir(r"D:\test")
    print(os.getcwd())   # D:\test
except FileNotFoundError as e:
    print(e)

os.chdir(currentWorkPath)
print(os.getcwd())   # D:\projects\test

os.listdir(path):获取指定目录下的所有文件(夹)名

作用:索取指定目录下的所有文件夹名和文件名。

如果path不存在则FileNotFoundError。

如果path存在但为文件名则会NotADirectoryError

如果path存在但为文件夹则会返回一个列表,包含该文件夹下的所有文件夹名和文件名。

import os

path = r"C:\xxxx\data.txt"

if os.path.exists(path):
    try:
        filename_list = os.listdir(path)
        print(filename_list)
    except NotADirectoryError as e:
        print(e)
        print(f"获取{path}下的全部文件名失败,因为它不是文件夹")
else:
    print(f"{path} not exist")

获取当前目录下的所有文件(夹)名

import os

# 获取当前目录中的内容
all_files = os.listdir(os.getcwd())
print(all_files)

# 获取当前目录中的内容
filenames = os.listdir(os.curdir)
print(filenames)

os.path.join(__path, *paths):将多个文件(夹)组成一个文件路径

import os

path = os.path.join('users', 'tta', 'Documents', 'python.docx')
print(path)   # users\tta\Documents\python.docx

path = path.replace("\\", "/")
print(path)   # users/tta/Documents/python.docx

imageNames = ["apple.jpg", "orange.jpg", "dog.jpg"]
for image in imageNames:
    pathImage = os.path.join('users', 'tta', 'Documents', image)
    print(pathImage)

os.path.abspath(path):返回由当前工作目录组成的绝对路径

作用:传递path,返回由当前工作目录组成的绝对路径。返回的绝对路径就是是os.getcwd()+path构成。

注意不判断文件存在与否。

import os

cwd = os.getcwd()
file_name = "data.txt"

path1 = cwd + "\\" + file_name
path2 = os.path.abspath("data.txt")

print(path1)  # D:\projects\test\data.txt
print(path2)  # D:\projects\test\data.txt
print(path1 == path2)   # True

dir_name = "xxxx\\xxxx\\xxxx"
path3 = os.path.abspath(dir_name)
print(path3)  # D:\projects\test\xxxx\xxxx\xxxx

os.path.isabs(path):判断是否符合绝对路径格式

作用:判断路径格式是否符合绝对路径格式。

文件(夹)不存在也无所谓,只判断格式是否符合绝对路径

import os

bool1 = os.path.isabs("data.txt")
print(bool1)  # False

bool2 = os.path.isabs(r"D:\xxxx\xxxx\venv\data.txt")
print(bool2)  # True  # 文件不存在也无所谓,只判断格式是否符合绝对路径

bool3 = os.path.isabs(r"D:\xxxx\xxxx")
print(bool2)  # True  # 文件夹不存在也无所谓,只判断格式是否符合绝对路径

os.path.dirname(path):获取文件(夹)所在目录

返回 path 最后一个斜杠之前的所有内容

import os
path = r"D:\xxxx\xxxx\venv\data.txt"
ret1 = os.path.dirname(path)
print(ret1)  # D:\xxxx\xxxx\venv

注意对于目录来说最后有无斜杠时的区别

import os

path = "D:/xxxx/xxxx/venv/"
ret = os.path.dirname(path)
print(ret)  # D:/xxxx/xxxx/venv

path = "D:/xxxx/xxxx/venv"
ret = os.path.dirname(path)
print(ret)  # D:/xxxx/xxxx

os.path.basename(path):获取文件(夹)名字

返回 path 最后一个斜杠之后的所有内容

import os
path = r"D:\xxxx\xxxx\venv\data.txt"

ret2 = os.path.basename(path)
print(ret2)  # data.txt

注意对于目录来说最后有无斜杠时的区别

import os

path = "D:/xxxx/xxxx/venv/"
ret = os.path.basename(path)
print(f"[{ret}]")  # []

path = "D:/xxxx/xxxx/venv"
ret = os.path.basename(path)
print(f"[{ret}]")  # [venv]

os.path.split(path):获取文件(夹)所在目录和名字

相当于获取os.path.dirname(path)和os.path.basename(path)

import os
path = r"D:\xxxx\xxxx\venv\data.txt"

ret3 = os.path.split(path)
print(ret3)  # ('D:\\xxxx\\xxxx\\venv', 'data.txt')

os.walk(path):目录深度遍历

python中os.walk是一个简单易用的文件、目录遍历器,可以帮助我们高效的处理文件、目录方面的事情。

os.walk方法,主要用来遍历一个目录内各个子目录和子文件。

os.walk(top, topdown=True, οnerrοr=None, followlinks=False) 

参数

  • top 是你所要便利的目录的地址
  • topdown 为真,则优先遍历top目录,否则优先遍历top的子目录(默认为开启)
  • onerror 需要一个 callable 对象,当walk需要异常时,会调用
  • followlinks 如果为真,则会遍历目录下的快捷方式(linux 下是 symbolic link)实际所指的目录(默认关闭)

返回值:os.walk 的返回值是一个生成器(generator),也就是说我们需要不断的遍历它,来获得所有的内容。一个三元tupple(dirpath, dirnames, filenames),

  • dirpath 是一个string,第一个为起始路径,代表目录的路径,指的是当前正在遍历的这个文件夹的本身的地址。
  • dirnames 是一个list,第二个为起始路径下的文件夹,包含了dirpath下所有子目录的名字,内容是该文件夹中所有的目录的名字(不包括子目录)
  • filenames 是一个list,第三个是起始路径下的文件,包含了非目录文件的名字,内容是该文件夹中所有的文件(不包括子目录)

这些名字不包含路径信息,如果需要得到全路径,需要使用os.path.join(dirpath, name).

例子

如果我们有如下的文件结构

示例代码

# -*- coding: utf-8 -*-
import os

if __name__ == "__main__":
    dir_path = r"D:\PythonTest\a"
    for root, dirs, files in os.walk(dir_path):
        print("==============")
        print(root)
        print(dirs)
        print(files)

运行结果

==============
D:\PythonTest\a
['b', 'c', 'd']
['4.txt', '5.txt']
==============
D:\PythonTest\a\b
[]
['1.txt', '2.txt']
==============
D:\PythonTest\a\c
[]
['3.txt']
==============
D:\PythonTest\a\d
[]
[]

os.path.sep宏

文件夹分割变量,配合字符串的 split 方法使用。

注意不会判断路径的存在与否。

import os
path = r"D:\xxxx\xxxx\xxxx\venv\data.txt"
result = path.split(os.path.sep)
print(result)  # ['D:', 'xxxx', 'xxxx', 'xxxx', 'venv', 'data.txt']

os.path.getsize(path):获取文件字节大小

返回文件的大小,单位字节。

如果文件不存在则FileNotFoundError

import os

path = r"D:\data\1.txt"
if os.path.exists(path):
    ret = os.path.getsize(path)
    print(path, ret)

文件目录深度遍历

当你传入一个文件夹的路径给 os.path.getsize() 时,则会遇到一个错误,因为os.path.getsize() 是用于获取文件大小的,而不是文件夹的大小。Python 会尝试获取该文件夹(实际上是一个目录项)的大小,但通常目录项本身的大小很小(只包含元数据和可能的默认文件大小),而不是目录中所有文件和子目录的总大小。

要获取文件夹的大小(包括其中的所有文件和子文件夹),你需要编写一个递归函数来遍历目录树并累加所有文件的大小。以下是一个简单的示例:

import os


def get_directory_size(path):
    total_size = 0
    for dir_path, dir_names, file_names in os.walk(path):
        for f in file_names:
            fp = os.path.join(dir_path, f)
            # 跳过如果它是一个符号链接  
            if not os.path.islink(fp):
                total_size += os.path.getsize(fp)
    return total_size


# 使用方法  
folder_path = r'D:\data'
folder_size = get_directory_size(folder_path)
print(f"The size of {folder_path} is {folder_size} bytes.")

__file__ :python内置宏:当前代码所在文件的绝对路径

print(__file__)  # D:\projects\test\main.py

获取当前代码文件所在目录

os.path.abspath(__file__):当前代码文件所在绝对路径

import os

print(__file__)  # D:\projects\test\main.py

this_file_path = os.path.abspath(__file__)
print(this_file_path)  # D:\projects\test\main.py

this_file_path = os.path.abspath(__file__).replace("\\", "/")
print(this_file_path)  # D:/projects/test/main.py

当前代码文件所在目录:os.path.basename(os.path.abspath(__file__))

import os

print(__file__)  # D:\projects\test\main.py

this_file_path = os.path.abspath(__file__).replace("\\", "/")
print(this_file_path)  # D:/projects/test/main.py

print(os.path.basename(this_file_path))  # main.py

print(os.path.dirname(this_file_path))   # D:/projects/test

2.shutil模块

shutil.copyfile文件复制

shutil.copyfile 是 Python 的 shutil 模块中的一个函数,用于将一个文件的内容复制到另一个文件中。

shutil.copyfile(src, dst, follow_symlinks=True)

将名为 src 的文件的内容(不包括元数据)拷贝到名为 dst 的文件,并以尽可能高效的方式返回 dst。

  • src(必需):源文件名称,可包含合法路径。
  • dst(必需):复制到的目标文件名,可包含合法路径。
  • follow_symlinks(可选,默认为 True):
    • 如果为 True,且 src 是一个符号链接(软连接),则复制该符号链接所指向的文件。
    • 如果为 False,且 src 是一个符号链接,则创建一个新的符号链接而不是拷贝链接所指向的文件。

这里我们自定义一个将制定文件复制到指定目录下的函数

import shutil
import os


# 创建目录函数
def make_dir(dir_path):
    need_build_dir_list = []
    while True:
        # print(dir_path)
        if os.path.exists(dir_path):
            break
        else:
            need_build_dir_list.append(dir_path)
            dir_path = os.path.dirname(dir_path)
    # print(need_build_dir_list)

    for i in range(len(need_build_dir_list)-1, -1, -1):
        print("创建目录:", need_build_dir_list[i])
        os.mkdir(need_build_dir_list[i])


# 文件传输函数
def transfer_file(file_path, dst_dir):
    """
    将文件file_path复制到dst_dir目录下
    :param file_path: 文件所在路径,全路径
    :param dst_dir: 要复制的目录下
    :return:
    """
    if not os.path.exists(file_path):
        print(f"{file_path} not exist")
        return
    elif not os.path.isfile(file_path):
        print(f"{file_path} not file")
        return

    if not os.path.exists(dst_dir):
        make_dir(dst_dir)

    save_path = dst_dir + "/" + os.path.basename(file_path)
    shutil.copyfile(file_path, save_path)


if __name__ == "__main__":
    data_path = r"D:\data\1.txt"
    save_dir = r"D:\xxxx\xxxx\xxxx"
    transfer_file(data_path, save_dir)

shutil.move文件剪切

shutil.move(src, dst)

参数:

  • src(必需):源文件或目录的路径。
  • dst(必需):目标位置的路径。

功能描述:

  • 递归地将一个文件或目录移动到另一个位置,并返回新的目标位置。
  • 如果目标是一个目录,则源文件或目录会被移动到该目录中。
  • 如果目标已经存在但不是一个目录,它可能会被覆盖,具体取决于 os.rename() 的语义。

注意事项:

  • 如果目标位置已经存在同名的文件或目录,shutil.move() 默认会抛出 FileExistsError 异常。如果希望覆盖已存在的文件,可能需要自行处理异常或使用其他方式来实现。
  • 在跨文件系统移动文件时,shutil.move() 会使用 copy_function 指定的函数(默认为 shutil.copy2())来复制文件,然后再删除源文件。这可能会导致额外的磁盘 I/O 操作。
  • shutil.move() 不会复制文件的元数据(如修改时间、权限等),除非在跨文件系统移动文件时使用了 copy_function 参数。
import shutil
import os


# 创建目录函数
def make_dir(dir_path):
    need_build_dir_list = []
    while True:
        # print(dir_path)
        if os.path.exists(dir_path):
            break
        else:
            need_build_dir_list.append(dir_path)
            dir_path = os.path.dirname(dir_path)
    # print(need_build_dir_list)

    for i in range(len(need_build_dir_list)-1, -1, -1):
        print("创建目录:", need_build_dir_list[i])
        os.mkdir(need_build_dir_list[i])


# 剪切文件
def move_files(src, dst):
    """
    :param src: 要剪切的文件路径,如果src为目录,则将该目录下所有文件复制到dst
    :param dst: 目标目录。如果dst为文件,则将该文件所在目录作为目标目录。
    :return:
    """
    if not os.path.exists(src):
        print(f"{src} not exist")
        return

    src_file_list = []
    if os.path.isfile(src):
        src_file_list.append(src)
    elif os.path.isdir(src):
        file_name_list = os.listdir(src)
        for file_name in file_name_list:
            file_path = os.path.join(src, file_name)
            if os.path.isfile(file_path):
                src_file_list.append(file_path)
    else:
        return

    print(src_file_list)
    if len(src_file_list) == 0:
        return

    if os.path.isdir(dst):
        save_dir = dst
    else:
        save_dir = os.path.dirname(dst)

    make_dir(save_dir)

    # 判断目标文件是否存在,不存在则移动过来
    for file_path in src_file_list:
        print(f"{file_path} to {save_dir}")
        shutil.move(file_path, save_dir)


data_path = r"D:\data\2.txt"
target_dir = r"D:\xxxx\xxxx\xxxx\1.txt"
move_files(data_path, target_dir)

shutil.rmtree删除文件夹

shutil.rmtree(path)

如果path不存在则会FileNotFoundError

如果path存在但是文件则会NotADirectoryError

如果path存在且是文件夹,无论文件夹是否为空,则会将该path以及下面的所有文件和文件夹删除。

import shutil
import os


# 删除文件夹
def rm_dir_tree(dir_path):
    if os.path.exists(dir_path):
        try:
            shutil.rmtree(dir_path)
            print(f"删除{dir_path}成功")
        except NotADirectoryError as e:
            print("NotADirectoryError:", e)
            print(f"{dir_path} is not directory, is file")
    else:
        print(f"{dir_path} not exist")


data_dir = r"D:\xxxx\xxxx\xxxx\yyyyy\yyyyy"
rm_dir_tree(data_dir)

data_dir = r"D:\xxxx\xxxx\xxxx\1.txt"
rm_dir_tree(data_dir)

data_dir = r"D:\xxxx\xxxx"
rm_dir_tree(data_dir)

end

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

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

相关文章

程序员分享好用的工具,用来用去还是觉得这几款软件最实用

大家好,我是程序员大猩猩。 作为一个程序员,除了经常要使用到的开发工具,如:Jetbrains家的IntelliJ IDEA以及它家族工具,如WebStorm、PhpStorm和GoLand都是非常好的语言开发工具。 相对于语言开发工具,我…

【LLM多模态】综述Visual Instruction Tuning towards General-Purpose Multimodal Model

note 文章目录 note论文1. 论文试图解决什么问题2. 这是否是一个新的问题3. 这篇文章要验证一个什么科学假设4. 有哪些相关研究?如何归类?谁是这一课题在领域内值得关注的研究员?5. 论文中提到的解决方案之关键是什么?6. 论文中的…

民宿bug

前端 后端 1 订单管理 订单日期已过,状态没有变成已完成

Scikit-Learn朴素贝叶斯

Scikit-Learn朴素贝叶斯 1、朴素贝叶斯1.1、贝叶斯分类1.2、贝叶斯定理1.3、贝叶斯定理的推导1.4、朴素贝叶斯及原理1.5、朴素贝叶斯的优缺点2、Scikit-Learn朴素贝叶斯2.1、Sklearn中的贝叶斯分类器2.2、Scikit-Learn朴素贝叶斯API2.3、Scikit-Learn朴素贝叶斯实践(新闻分类与…

..堆..

堆 堆是完全二叉树,即除了最后一列之外,上面的每一层都是满的(左右严格对称且每个节点都满子节点) 最后一列从左向右排序。 默认大根堆:每一个节点都大于其左右儿子,根节点就是整个数据结构的最大值 pr…

解决Vue3+TS+vite,VSCode 高亮语法错误

一般像这种提示,有可能就是TypeScript语法的识别问题, 一般我们重装一下Vue - Official插件 或者将tcconfig.json中的moduleResolution改为node模式, 基本都是TypeScript无法识别vue文件中的TypeScript语句导致的

一行代码实现UI拖拽的效果

演示 先来看效果吧! 实现方式 1.首先创建一个你想拖动的UI图片 2.创建一个C#的脚本 3.编写控制脚本(代码按我的敲就行) 付上代码片段 public void OnDrag(PointerEventData eventData){transform.position eventData.position;} 4.添加脚…

21.2zabbix低级自动发现-mysql多实例

配置mysql多实例 注释:自动发现:创建监控主机;低级自动发现:创建监控项 mysql单实例是直接yum安装,开启mysql多实例 准备配置文件 #mysql3307实例 cp /etc/my.cnf /etc/my3307.cnf vim /etc/my3307.cnf [mysqld] dat…

FPGA实现多路并行dds

目录 基本原理 verilog代码 仿真结果​ 基本原理 多路并行dds,传统DDS的局限性在于输出频率有限。根据奈奎斯特采样定理,单路DDS的输出频率应小于系统时钟频率的一半。但是在很多地方,要使采样率保持一致,所以,为了…

蓝桥杯备赛——DP【python】

一、小明的背包1 试题链接:https://www.lanqiao.cn/problems/1174/learning/ 问题描述 输入实例 5 20 1 6 2 5 3 8 5 15 3 3 输出示例 37 问题分析 这里我们要创建一个DP表,DP(i,j)表示处理到第i个物品时消耗j体…

Java8Stream

目录 什么是Stream? IO流: Java8Stream: 什么是流? stream图解 获取流 集合类,使用 Collection 接口下的 stream() 代码 数组类,使用 Arrays 中的 stream() 方法 代码 stream,使用 Stream 中的…

牛客网刷题 | BC100 直角三角形图案

目前主要分为三个专栏,后续还会添加: 专栏如下: C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读! 初来乍到,如有错误请指出,感谢! 描述 KiKi学习了循环&am…

注意力机制篇 | YOLOv8改进之引入用于目标检测的混合局部通道注意力MLCA

前言:Hello大家好,我是小哥谈。注意力机制是可以帮助神经网络突出重要元素,抑制无关元素。然而,绝大多数通道注意力机制只包含通道特征信息,忽略了空间特征信息,导致模型表示效果或目标检测性能较差,且空间注意模块往往较为复杂。为了在性能和复杂性之间取得平衡,本文提…

AI遇上遥感,未来会怎样?

随着航空、航天、近地空间等多个遥感平台的不断发展,近年来遥感技术突飞猛进。由此,遥感数据的空间、时间、光谱分辨率不断提高,数据量也大幅增长,使其越来越具有大数据特征。对于相关研究而言,遥感大数据的出现为其提…

C++基础与深度解析 | 泛型算法 | bind | Lambda表达式

文章目录 一、泛型算法1.泛型算法的分类2.迭代器分类 二、bind与lambda表达式1.bind2.lambda表达式 三、泛型算法的改进--ranges(c20) 一、泛型算法 C中的泛型算法是标准模板库(STL)的一部分(这里重点讨论 C 标准库中定义的算法,而…

5.25机器人基础-空间描述和变换1

参考资料:《机器人学导论》John.J.Craig 彻底搞懂“旋转矩阵/欧拉角/四元数”,让你体会三维旋转之美_欧拉角判断动作-CSDN博客 机器人操作的定义是指通过某种机构使零件和工具在空间运动。因此,对于坐标系的定义显得尤为重要,相…

模型评价指标笔记:混淆矩阵+F1+PR曲线+mAP

评价指标 二分类评价指标 混淆矩阵 TP: 正确预测为了正样本,原来也是正样本 FN: 错误的预测为负样本,原来是正样本 (漏报,没有找到正确匹配的数目) FP: 错误的预测为正样本,原来是负样本 (误报,没有的匹配不正确) TN…

Rust腐蚀怎么用服务器一键开服联机教程

1、进入控制面板 首次登陆需要点击下方重置密码,如何再点击登录面板,点击后会跳转到登录页面,输入用户名和密码登录即可 2、设置游戏端口 由于腐蚀的设置需要三个端口,它们用于游戏端口(必须为首选端口)&a…

springboot3微服务下结合springsecurity的认证授权实现

1. 简介 在微服务架构中,系统被拆分成许多小型、独立的服务,每个服务负责一个功能模块。这种架构风格带来了一系列的优势,如服务的独立性、弹性、可伸缩性等。然而,它也带来了一些挑战,特别是在安全性方面。这时候就体…

HTML跳动的爱心

目录 写在前面 HTML简介 跳动的爱心 代码分析 运行结果 推荐文章 写在后面 写在前面 哎呀,这是谁的小心心?跳得好快吖! HTML简介 老生常谈啦,咱们还是从HTML开始吧! HTML是超文本标记语言(Hyper…