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 ospath = 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 ospath = 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 osdatapath1 = 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):breakelse: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 osif __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 osif __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 oscurrentWorkPath = os.getcwd()
print(currentWorkPath)  # D:\projects\testpath = os.path.abspath('.')  # 单个点表示当前目录的缩写
print(path)  # D:\projects\test

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

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

import oscurrentWorkPath = os.getcwd()
print(currentWorkPath)   # D:\projects\testtry: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 ospath = 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 ospath = os.path.join('users', 'tta', 'Documents', 'python.docx')
print(path)   # users\tta\Documents\python.docxpath = path.replace("\\", "/")
print(path)   # users/tta/Documents/python.docximageNames = ["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 oscwd = 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)   # Truedir_name = "xxxx\\xxxx\\xxxx"
path3 = os.path.abspath(dir_name)
print(path3)  # D:\projects\test\xxxx\xxxx\xxxx

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

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

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

import osbool1 = os.path.isabs("data.txt")
print(bool1)  # Falsebool2 = 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 ospath = "D:/xxxx/xxxx/venv/"
ret = os.path.dirname(path)
print(ret)  # D:/xxxx/xxxx/venvpath = "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 ospath = "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 osif __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 ospath = 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 osdef get_directory_size(path):total_size = 0for 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 osprint(__file__)  # D:\projects\test\main.pythis_file_path = os.path.abspath(__file__)
print(this_file_path)  # D:\projects\test\main.pythis_file_path = os.path.abspath(__file__).replace("\\", "/")
print(this_file_path)  # D:/projects/test/main.py

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

import osprint(__file__)  # D:\projects\test\main.pythis_file_path = os.path.abspath(__file__).replace("\\", "/")
print(this_file_path)  # D:/projects/test/main.pyprint(os.path.basename(this_file_path))  # main.pyprint(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):breakelse: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")returnelif not os.path.isfile(file_path):print(f"{file_path} not file")returnif 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):breakelse: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")returnsrc_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:returnprint(src_file_list)if len(src_file_list) == 0:returnif os.path.isdir(dst):save_dir = dstelse: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

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

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

相关文章

vue项目elementui刷新页面弹窗问题

bug:每次刷新页面都有这个鬼弹窗。 刚开始以为是自己的代码问题,于是我翻遍了每一行代码,硬是没找出问题。 后来在网上找了些资料,原来是引入的问题。 解决方案: 改一下引入方式即可。 错误姿势 import Vue from …

美发店服务预约会员小程序的作用是什么

美发店不同于美容美甲,男女都是必需且年龄层几乎不限,商家在市场拓展时只要方法得当相对比较容易,当今客户适应于线上信息获取、咨询及实际内容开展,商家也需要赋能和提升自身服务效率,合理化管理。 运用【雨科】平台…

2024年【高压电工】新版试题及高压电工找解析

题库来源:安全生产模拟考试一点通公众号小程序 高压电工新版试题是安全生产模拟考试一点通生成的,高压电工证模拟考试题库是根据高压电工最新版教材汇编出高压电工仿真模拟考试。2024年【高压电工】新版试题及高压电工找解析 1、【单选题】 110KV及以下…

文件批量重命名利器:一键轻松替换文本间内容,高效管理文件不再是难题!

在信息爆炸的时代,我们的电脑中堆积了无数的文件。这些文件可能包含重要的工作资料、珍贵的个人回忆或是各种学习资料。然而,随着文件的不断增多,如何高效地管理和查找这些文件成为了一个头疼的问题。 文件批量改名高手是一款专业的文件管理…

在IDEA中配置servlet(maven配置完成的基础下)

在IDEA中配置servlet&#xff08;maven配置完成的基础下&#xff09; 1.先新建一个项目 2.选择尾巴是webapp的&#xff0c;名称自定义 3.点击高级设置&#xff0c;修改组id 点击创建&#xff0c;等待jar包下载完成。在pom.xml中配置以下 <dependency><groupId>ja…

docker同步bilibili收藏视频到群晖,可配合emby

作者是amtoaer&#xff0c;在github项目地址&#xff1a;https://github.com/amtoaer/bili-sync 有两个版本&#xff0c;1.0和2.0&#xff0c;我使用的是2.0 PS2&#xff1a;2.0和1.0版本目录结构不兼容&#xff0c;所以部署后会全量重新下载视频。 演示&#xff1a; 依然是…

OpenH264 编解码器介绍

思科 思科系统&#xff08;英语&#xff1a;Cisco Systems, Inc.&#xff09;是一间跨国际综合技术企业&#xff0c;总部设于加州硅谷&#xff1b;思科开发、制作和售卖网络硬件、软件、通信设备等高科技产品及服务&#xff0c;并透过子公司&#xff08;例子有OpenDNS、Webex、…

国赛练习(1)

Unzip 软连接 软连接是linux中一个常用命令&#xff0c;它的功能是为某一个文件在另外一个位置建立一个同步的链接。换句话说&#xff0c;也可以理解成Windows中的快捷方式 注意&#xff1a;在创建软连接的文件的所有目录下不能有重名的文件 打开环境&#xff0c;是文件上传&am…

用实践结果告诉你为啥说 CloudFlare 是赛博菩萨?

最近几天明月都没有更新博客了,主要是接了几个 CloudFlare 代维配置的活儿,有需要加速优化的,有需要排除疑难故障的,有需要提高防御攻击能力的甚至还有纯粹为了体验“打不死”装逼需要的。总之,各种各样的需求,五花八门的,好在 CloudFlare 都能一一满足,最主要的是这些…

Dockerfile使用

1.Dockerfile是什么 官网地址 https://docs.docker.com/reference/dockerfile/概念 是什么 Dockerfile 是用于构建 Docker 镜像的文本文件&#xff0c;它包含一系列的指令&#xff08;instructions&#xff09;和参数&#xff0c;用于描述如何构建和配置镜像。 Dockerfile 是…

解析售后维修服务平台如何助力企业高效运营与决策

随着生活质量的不断提高&#xff0c;人们对于售后服务的要求也越来越多。因此&#xff0c;售后服务已经成为企业竞争力的重要组成部分。售后服务平台作为连接企业与消费者的桥梁&#xff0c;不仅关乎着消费者的满意度&#xff0c;而且直接影响着企业的品牌形象与市场地位。那么…

[7] CUDA之常量内存与纹理内存

CUDA之常量内存与纹理内存 1. 常量内存 NVIDIA GPU卡从逻辑上对用户提供了 64KB 的常量内存空间&#xff0c;可以用来存储内核执行期间所需要的恒定数据常量内存对一些特定情况下的小数据量的访问具有相比全局内存的额外优势&#xff0c;使用常量内存也一定程序上减少了对全局…

使用python对指定文件夹下的pdf文件进行合并

使用python对指定文件夹下的pdf文件进行合并 介绍效果代码 介绍 对指定文件夹下的所有pdf文件进行合并成一个pdf文件。 效果 要合并的pdf文件&#xff0c;共计16个1页的pdf文件。 合并成功的pdf文件&#xff1a;一个16页的pdf文件。 代码 import os from PyPDF2 import …

深入理解 Spring Web 应用程序初始化流程

前言 在构建基于 Spring 的 Web 应用程序时&#xff0c;了解初始化流程是至关重要的。本文将详细介绍 Servlet 容器的初始化过程&#xff0c;并重点探讨 Spring 框架在其中的作用&#xff0c;特别是 ServletContainerInitializer、SpringServletContainerInitializer 和 WebAp…

源码部署ELK

目录 资源列表 基础环境 关闭防护墙 关闭内核安全机制 修改主机名 添加hosts映射 一、部署elasticsearch 修改limit限制 部署elasticsearch 修改配置文件 单节点 集群(3台节点集群为例) 启动 二、部署logstash 部署logstash 添加配置文件 启动 三、部署kiban…

数据清洗操作及众所周知【数据分析】

各位大佬好 &#xff0c;这里是阿川的博客 &#xff0c; 祝您变得更强 个人主页&#xff1a;在线OJ的阿川 大佬的支持和鼓励&#xff0c;将是我成长路上最大的动力 阿川水平有限&#xff0c;如有错误&#xff0c;欢迎大佬指正 前面的博客 数据分析—技术栈和开发环境搭建 …

Vue3实战笔记(45)—VUE3封装一些echarts常用的组件,附源码

文章目录 前言一、柱状图框选二、折线图堆叠总结 前言 日前使用hooks的方式封装组件&#xff0c;在我使用复杂的图标时候遇到了些问题&#xff0c;预想在onMounted中初始化echarts&#xff0c;在使用hooks的时候&#xff0c;组件没有渲染完&#xff0c;使用实例会出现各种各样…

Qt Creator(1)【概述篇】

阅读导航 引言一、Qt概述1. 什么是Qt2. Qt的发展史3. Qt支持的平台4. Qt的优点5. Qt的应用场景 二、Qt下载安装 引言 在探索编程和软件开发的旅程中&#xff0c;我们已经奠定了坚实的基础&#xff0c;通过学习C语言和C&#xff0c;我们不仅掌握了结构化编程和面向对象编程的核…

HIVE3.1.3+ZK+Kerberos+Ranger2.4.0高可用集群部署

目录 一、集群规划 二、介质下载 三、基础环境准备 1、解压文件 2、配置环境变量 四、配置zookeeper 1、创建主体 2、修改zoo.cfg 3、新增jaas.conf 4、新增java.env 5、重启ZK 6、验证ZK 五、配置元数据库 六、安装HIVE 1、创建Hiver的kerberso主体 2…