news 2026/6/12 19:30:54

Python 爬虫项目:本地文件夹分类存储资源

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python 爬虫项目:本地文件夹分类存储资源

前言

爬虫程序完成数据、图片、文档等资源的采集后,本地存储是整个采集链路的收尾环节,同时也是保障资源可管理、可复用、可追溯的关键环节。若所有采集资源统一存放至同一目录,随着爬取体量增大,会出现文件混杂、查找困难、同名文件覆盖、资源归属无法区分等一系列问题,大幅提升后期整理、筛选、二次使用的成本。分类化文件夹存储,便是基于业务场景、资源类型、采集时间、站点来源等维度,搭建层级化目录结构,对爬虫采集到的文本、图片、附件等资源进行分区存放。

不同业务场景对应不同的分类逻辑,资讯类爬虫可按照栏目、发布时间分类,图库类爬虫可按照图片主题、分辨率分类,综合站点爬虫可按照域名、页面模块分类。同时在存储过程中,还需要解决目录自动创建、文件命名规范、重复文件判断、路径跨平台兼容、大文件分片存储、异常文件隔离等工程化问题。

本文结合 Python 内置文件系统库、路径处理工具,从目录架构设计、多级目录创建、多维度分类规则、文件重命名、重复文件处理、异常容错、综合工具封装等方面展开讲解,搭配完整可运行代码与底层原理剖析,覆盖小型爬虫脚本至企业级采集项目的本地存储需求,建立标准化的资源分类存储体系。

本文所使用核心依赖库及官方文档链接如下,读者可按需查阅接口用法与版本说明:

  1. os:Python 内置文件与目录操作系统库,实现目录创建、路径判断、文件遍历 https://docs.python.org/3/library/os.html
  2. pathlib:Python3.4+ 新增面向对象路径库,语法简洁、跨平台兼容性更强 https://docs.python.org/3/library/pathlib.html
  3. hashlib:内置哈希算法库,用于计算文件摘要,实现重复文件精准校验 https://docs.python.org/3/library/hashlib.html
  4. datetime:内置时间处理库,基于时间维度自动生成分类目录 https://docs.python.org/3/library/datetime.html

一、爬虫资源分类存储的设计原则与目录架构

1.1 核心设计原则

在搭建本地存储目录前,需要明确分类规则,结合爬虫业务特性制定统一标准,保证目录结构具备扩展性、可读性与稳定性,行业内通用设计原则如下表所示:

表格

设计原则具体说明落地要求
层级精简原则目录层级不宜过深,建议控制在 3-4 级以内层级过多会导致路径过长、文件查找效率降低,Windows 系统存在路径长度限制
维度统一原则全项目使用同一套分类维度,禁止临时修改规则统一规则便于批量检索、数据迁移、脚本维护,避免分类混乱
自动生成原则所有目录由代码自动创建,无需人工手动新建适配自动化爬虫、定时爬虫,实现无人值守运行
防覆盖原则规范文件命名、增加重复文件校验,杜绝同名文件相互覆盖网络资源存在大量同名文件,覆盖会造成原始数据丢失
跨平台兼容原则路径写法适配 Windows、Linux、macOS 三大操作系统避免分隔符、特殊字符导致路径解析失败
异常隔离原则单独设置异常文件、损坏文件目录,与正常资源分区存放防止无效文件污染正常资源目录,便于统一排查问题

以上原则是工程级爬虫存储模块的基础规范,无论是个人脚本还是分布式集群爬虫,都需要严格遵循。

1.2 主流分类维度与目录架构

结合爬虫常见业务场景,划分四大主流分类维度,分别适配不同采集需求,同时给出标准目录结构示例,开发者可根据自身业务直接复用或微调。

1.2.1 按资源类型分类(通用基础架构)

适用场景:综合类爬虫,同时采集文本、图片、附件、音视频等多种资源,是使用范围最广的基础架构。 标准目录层级:

plaintext

./crawl_data/ ├─ text/ # 文本数据:网页源码、解析后的文章、JSON数据 ├─ images/ # 图片资源:配图、海报、图标 ├─ files/ # 附件文档:PDF、Excel、压缩包等文件 └─ error_files/ # 异常文件:下载失败、损坏、格式错误的资源
1.2.2 按采集时间分类(定时爬虫架构)

适用场景:定时爬取、新闻资讯、实时动态类爬虫,按照年、月、日划分目录,便于按时间回溯数据。 标准目录层级:

plaintext

./crawl_data/ └─ 2026/ ├─ 06/ │ ├─ 10/ │ │ ├─ text/ │ │ ├─ images/ │ │ └─ error_files/ │ └─ 11/ │ ├─ text/ │ └─ images/
1.2.3 按站点 / 域名分类(全站爬虫架构)

适用场景:多站点批量爬取、聚合类爬虫,以目标网站域名为一级目录,隔离不同站点资源。 标准目录层级:

plaintext

./crawl_data/ ├─ www.site1.com/ │ ├─ text/ │ └─ images/ ├─ www.site2.com/ │ ├─ text/ │ └─ images/ └─ unknown_site/
1.2.4 混合多维度分类(企业级复杂架构)

适用场景:大型商业爬虫、数据中台采集项目,结合站点 + 时间 + 资源类型多维度分层,功能最完善,扩展性最强。 标准目录层级:

plaintext

./crawl_data/ └─ site_www_example_com/ └─ 2026/ └─ 06-11/ ├─ text/ ├─ images/ ├─ files/ └─ error/

1.3 路径书写规范与跨平台适配

Windows 系统默认路径分隔符为\,Linux 与 macOS 系统默认使用/,手动硬编码路径会出现跨平台运行报错。Python 提供两套标准化路径处理方案,彻底解决分隔符兼容问题:

  1. os.path 模块:传统方案,通过os.path.join()自动拼接路径,内部根据操作系统适配对应分隔符,兼容所有 Python 版本。
  2. pathlib 模块:现代面向对象方案,Python3.4 及以上版本原生支持,路径操作语法更简洁,推荐新项目优先使用。

禁止直接使用字符串拼接路径,例如"./data/images\test.jpg"这类写法,会直接导致跨平台运行异常。

二、基础目录操作:os 模块实现目录管理

os是 Python 内置核心库,无额外安装依赖,兼容性覆盖全版本 Python,是传统爬虫项目目录操作的首选。本节讲解目录判断、单级 / 多级目录创建、文件遍历、路径拼接等核心功能,搭配代码案例与原理解析。

2.1 路径拼接与路径有效性判断

路径拼接是所有文件操作的前置步骤,结合路径判断函数,可提前规避无效路径引发的程序异常。

2.1.1 代码案例

python

运行

import os # 基础根目录 root_dir = "./crawl_data" # 子目录名称 sub_dirs = ["text", "images", "files", "error_files"] # 循环拼接完整路径并判断是否存在 for dir_name in sub_dirs: # 自动拼接路径,适配全平台分隔符 full_path = os.path.join(root_dir, dir_name) # 判断路径是否存在 is_exist = os.path.exists(full_path) print(f"路径:{full_path},是否存在:{is_exist}")
2.1.2 代码原理详解
  1. os.path.join():接收多个路径参数,自动根据当前操作系统选择/\作为分隔符,是路径拼接的标准方法,绝对禁止使用+拼接路径字符串。
  2. os.path.exists(path):判断指定路径是否存在,目录、文件均可判断,返回布尔值True/False
  3. 执行逻辑:代码遍历预设的子目录名称,依次拼接根目录与子目录路径,批量检测目录状态,为后续自动创建目录提供判断依据。

2.2 单级目录与多级目录自动创建

爬虫运行时目录大概率未手动创建,代码需要实现 “目录不存在则新建,已存在则跳过” 的逻辑,分为单级目录与多级嵌套目录两种场景。

2.2.1 单级目录创建代码案例

python

运行

import os root_path = "./crawl_data/images" # 判断目录是否存在 if not os.path.exists(root_path): # 创建单级目录 os.mkdir(root_path) print(f"目录 {root_path} 创建成功") else: print(f"目录 {root_path} 已存在,无需创建")
2.2.2 多级目录创建代码案例

python

运行

import os # 嵌套多级目录:根目录/年份/月份/图片目录 multi_level_path = "./crawl_data/2026/06/images" if not os.path.exists(multi_level_path): # makedirs 支持递归创建多级目录 os.makedirs(multi_level_path) print("多级目录创建完成") else: print("多级目录已存在")
2.2.3 代码原理详解
  1. os.mkdir():仅能创建单级目录,若上级目录不存在,会直接抛出异常,适用于层级简单的场景。
  2. os.makedirs():递归创建多级嵌套目录,会自动补齐路径中所有不存在的上级目录,是爬虫项目中使用频率最高的目录创建方法,适配所有层级架构。
  3. 容错逻辑:代码先判断路径是否存在,再执行创建操作,避免重复创建目录触发系统报错,保证程序连续运行。

2.3 目录遍历与文件筛选

当需要读取已有目录中的资源、批量整理文件时,需要遍历目录下所有文件与子目录,结合后缀筛选实现分类检索。

2.3.1 代码案例

python

运行

import os target_dir = "./crawl_data/images" # 遍历目录下所有内容 for file_name in os.listdir(target_dir): # 拼接完整文件路径 full_file_path = os.path.join(target_dir, file_name) # 判断是否为文件(排除子目录) if os.path.isfile(full_file_path): # 截取文件后缀,筛选图片文件 suffix = file_name.split(".")[-1].lower() img_suffix = ["jpg", "png", "gif", "webp"] if suffix in img_suffix: print(f"图片文件:{file_name}")
2.3.2 代码原理详解
  1. os.listdir(path):返回指定目录下所有文件、子目录的名称列表,仅返回名称,不返回完整路径。
  2. os.path.isfile(path):判断当前路径是否为文件,用于过滤子目录,精准筛选目标文件。与之对应os.path.isdir()可判断是否为目录。
  3. 文件筛选逻辑:通过分割文件名获取后缀,结合预设后缀列表筛选指定类型资源,实现定向检索。

三、现代化路径管理:pathlib 模块实战

pathlib是 Python3.4 推出的面向对象路径库,重构了传统文件路径操作逻辑,语法更简洁、可读性更强,原生支持跨平台,目前主流 Python 项目均优先使用该模块。本节讲解路径对象创建、目录创建、路径拼接、文件读写配套用法。

3.1 Path 对象基础用法与路径拼接

3.1.1 代码案例

python

运行

from pathlib import Path # 创建根路径对象 root = Path("./crawl_data") # 链式拼接子路径,使用 / 运算符完成拼接 img_path = root / "images" text_path = root / "text" # 路径属性获取 print("完整路径字符串:", img_path.as_posix()) print("是否存在:", img_path.exists()) print("目录名称:", img_path.name)
3.1.2 代码原理详解
  1. Path 实例化:传入路径字符串创建路径对象,支持相对路径与绝对路径。
  2. 路径拼接:使用/运算符拼接路径,替代传统os.path.join,语法直观,同时自动适配跨平台分隔符。
  3. 核心属性as_posix()输出标准/分隔的路径字符串;exists()判断路径是否存在;name获取目录 / 文件名称。

3.2 多级目录一键创建

pathlibmkdir方法支持多级目录创建,搭配参数可实现 “存在即跳过”,无需额外写判断逻辑。

3.2.1 代码案例

python

运行

from pathlib import Path # 多级嵌套路径 level_path = Path("./crawl_data/2026/06/11") # parents=True:递归创建所有上级目录 # exist_ok=True:目录已存在时不抛出异常 level_path.mkdir(parents=True, exist_ok=True) print("多级目录处理完成")
3.2.2 代码原理详解
  1. parents 参数:等同于os.makedirs的递归能力,开启后自动创建所有缺失的上级目录。
  2. exist_ok 参数:核心容错参数,目录已存在时不会触发报错,直接跳过创建流程,简化代码结构,无需额外if判断。
  3. 优势对比:相比os模块,一行代码即可完成多级目录创建与容错处理,代码更精简。

3.3 目录遍历与文件筛选

3.3.1 代码案例

python

运行

from pathlib import Path img_dir = Path("./crawl_data/images") # 遍历目录下所有文件 for file in img_dir.iterdir(): # 判断是否为文件 if file.is_file(): # 筛选图片后缀 if file.suffix.lower() in (".jpg", ".png", ".gif", ".webp"): print(f"图片文件:{file.name}")
3.3.2 代码原理详解
  1. iterdir():遍历目录下所有内容,返回路径对象迭代器,自带完整路径,无需二次拼接。
  2. suffix 属性:直接获取文件后缀(包含.),原生支持后缀判断,无需手动分割字符串,稳定性更高。
  3. is_file():判断是否为文件,用法与os.path.isfile一致,语法更面向对象。

四、按时间自动生成分类目录

基于时间维度分类是定时爬虫、资讯爬虫的常用方案,结合datetime时间库,自动获取当前年、月、日,动态生成目录名称,实现每日自动分区存储。

4.1 年月日层级目录生成

4.1.1 代码案例

python

运行

from pathlib import Path from datetime import datetime # 获取当前系统时间 now = datetime.now() # 提取年、月、日 year = str(now.year) month = f"{now.month:02d}" day = f"{now.day:02d}" # 拼接时间层级目录 time_dir = Path("./crawl_data") / year / month / day # 自动创建目录 time_dir.mkdir(parents=True, exist_ok=True) print(f"当前存储目录:{time_dir.as_posix()}")
4.1.2 代码原理详解
  1. datetime.now():获取本地当前系统时间,返回时间对象,可单独提取年、月、日、时、分、秒。
  2. 时间格式化f"{now.month:02d}"保证月份、日期为两位数字,例如 6 月转为06,统一目录命名格式,避免606造成目录分裂。
  3. 动态目录:程序每日运行时,会自动生成当日专属目录,实现按时间隔离资源,无需人工干预。

4.2 结合资源类型的混合时间目录

在时间目录基础上,继续划分图片、文本等子目录,搭建完整混合维度架构。

python

运行

from pathlib import Path from datetime import datetime now = datetime.now() year = str(now.year) month = f"{now.month:02d}" day = f"{now.day:02d}" # 根时间目录 base_time_path = Path("./crawl_data") / year / month / day # 细分资源目录 text_path = base_time_path / "text" img_path = base_time_path / "images" error_path = base_time_path / "error" # 批量创建所有目录 for path in [text_path, img_path, error_path]: path.mkdir(parents=True, exist_ok=True) print("时间+资源类型混合目录创建完成")

五、文件命名规范与同名文件防覆盖处理

目录搭建完成后,文件命名是第二大核心问题。网络资源普遍存在同名文件,直接保存会导致原有文件被覆盖,造成数据丢失。本节讲解标准化命名规则、自动重命名、重复文件校验三大解决方案。

5.1 通用文件命名规则

结合爬虫业务,总结三类主流命名方案,可根据场景选择使用:

表格

命名方案规则说明适用场景
序号自增命名格式:file_001.jpgfile_002.jpg,按采集顺序编号批量图片、通用资源,实现简单,使用最广泛
时间戳命名格式:20260611123000.txt,使用采集时间作为文件名资讯、动态数据,可通过文件名追溯采集时间
哈希值命名格式:md5_xxxxxxx.png,使用文件哈希摘要命名海量资源、严格去重场景,同名不同内容也可区分

5.2 序号自增命名(基础防覆盖)

通过统计目录内已有文件数量,自动生成递增序号,保证文件名唯一,杜绝覆盖。

5.2.1 代码案例

python

运行

from pathlib import Path def get_new_filename(save_dir, prefix="img", suffix=".jpg"): """自动生成递增序号文件名""" dir_path = Path(save_dir) # 统计目录下同后缀文件数量 count = 0 for file in dir_path.iterdir(): if file.is_file() and file.suffix == suffix: count += 1 # 生成新文件名,三位序号补零 new_name = f"{prefix}_{count + 1:03d}{suffix}" return dir_path / new_name # 测试调用 save_directory = "./crawl_data/images" # 自动创建目录 Path(save_directory).mkdir(parents=True, exist_ok=True) # 获取新文件完整路径 file_path = get_new_filename(save_directory) print("新文件保存路径:", file_path.as_posix())
5.2.2 代码原理详解
  1. 文件数量统计:遍历目标目录,统计指定后缀的文件总数,基于总数生成下一个序号。
  2. 序号补零03d表示数字固定占 3 位,不足补 0,生成001、002格式,文件名排序更规整。
  3. 防覆盖逻辑:每新增一个文件,序号自动递增,永远不会出现同名文件。

5.3 基于 MD5 哈希的重复文件精准去重

部分场景下,不同链接会下载到完全相同的文件,仅靠文件名无法识别。通过hashlib计算文件 MD5 摘要,相同内容的文件摘要完全一致,实现精准去重。

5.3.1 代码案例

python

运行

import hashlib from pathlib import Path def calculate_file_md5(file_path, chunk_size=4096): """计算文件MD5值,分块读取适配大文件""" md5_obj = hashlib.md5() with open(file_path, "rb") as f: while chunk := f.read(chunk_size): md5_obj.update(chunk) return md5_obj.hexdigest() def check_duplicate_file(save_dir, target_md5): """检测目录中是否存在相同MD5的文件""" dir_path = Path(save_dir) for file in dir_path.iterdir(): if file.is_file(): file_md5 = calculate_file_md5(file) if file_md5 == target_md5: return True return False # 测试逻辑 save_path = Path("./crawl_data/images") save_path.mkdir(parents=True, exist_ok=True) # 模拟待保存的二进制数据(爬虫下载的文件流) test_data = b"test image content" temp_file = save_path / "temp_test.jpg" # 写入临时文件并计算MD5 with open(temp_file, "wb") as f: f.write(test_data) file_md5 = calculate_file_md5(temp_file) # 判断是否重复 if check_duplicate_file(save_path, file_md5): print("文件已存在,跳过保存") temp_file.unlink() # 删除临时文件 else: print("新文件,正常保存")
5.3.2 代码原理详解
  1. MD5 计算逻辑:分块读取文件二进制流,逐块更新哈希对象,避免一次性读取大文件导致内存占用过高。
  2. 重复判断:遍历已有文件,逐一比对 MD5 值,摘要一致则判定为重复文件,直接跳过保存。
  3. 适用场景:图库、文档库等资源高度重复的采集项目,是企业级爬虫标准去重方案。

六、分类存储综合实战:完整业务流程演示

结合前文目录创建、自动命名、文件保存功能,模拟 “网页图片采集 + 分类存储” 全流程,实现从链接下载到分区保存的一体化运行。

6.1 完整实战代码

python

运行

import requests from pathlib import Path from datetime import datetime from urllib.parse import urljoin from bs4 import BeautifulSoup class CrawlStorageDemo: def __init__(self): # 基础请求头 self.headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" } # 初始化存储目录 self.init_storage_dir() def init_storage_dir(self): """初始化时间+资源类型混合目录""" now = datetime.now() year = str(now.year) month = f"{now.month:02d}" day = f"{now.day:02d}" # 根目录 self.root = Path("./crawl_data") / year / month / day # 子目录 self.img_dir = self.root / "images" self.text_dir = self.root / "text" self.error_dir = self.root / "error" # 批量创建目录 for path in [self.img_dir, self.text_dir, self.error_dir]: path.mkdir(parents=True, exist_ok=True) def get_auto_filename(self, suffix): """生成自增序号文件名""" count = 0 for file in self.img_dir.iterdir(): if file.is_file() and file.suffix == suffix: count += 1 return self.img_dir / f"crawl_img_{count+1:03d}{suffix}" def extract_img_links(self, page_url): """提取页面图片链接""" res = requests.get(page_url, headers=self.headers, timeout=10) res.encoding = "utf-8" soup = BeautifulSoup(res.text, "lxml") img_links = [] for tag in soup.find_all("img"): src = tag.get("data-src") or tag.get("src") if src: img_links.append(urljoin(page_url, src)) return list(set(img_links)) def download_and_save_img(self, img_url): """下载图片并分类保存""" try: res = requests.get(img_url, headers=self.headers, stream=True, timeout=10) if res.status_code != 200: raise Exception("请求状态码异常") # 截取文件后缀 pure_url = img_url.split("?")[0] suffix = "." + pure_url.split(".")[-1].lower() if suffix not in (".jpg", ".png", ".gif", ".webp"): raise Exception("非法图片格式") # 生成文件名 save_file = self.get_auto_filename(suffix) # 二进制写入文件 with open(save_file, "wb") as f: for chunk in res.iter_content(8192): f.write(chunk) print(f"保存成功:{save_file.name}") except Exception as e: print(f"下载失败 {img_url},原因:{str(e)}") def run(self, target_url): """主运行入口""" print("开始提取图片链接...") links = self.extract_img_links(target_url) print(f"共提取 {len(links)} 条有效链接,开始下载存储...") for link in links: self.download_and_save_img(link) print("全部任务执行完毕") if __name__ == "__main__": spider = CrawlStorageDemo() # 替换为目标采集页面 target_page = "https://www.example.com/gallery" spider.run(target_page)

6.2 流程原理详解

  1. 初始化流程:实例化类时自动根据当前时间创建多级分类目录,无需人工干预。
  2. 链接提取:复用前文图片提取逻辑,获取去重后的图片链接列表。
  3. 自动命名:每次保存前统计目录文件数量,生成递增序号文件名,防止文件覆盖。
  4. 分类存储:合法图片存入images目录,下载失败、格式异常的资源统一归类至异常目录。
  5. 异常捕获:全局异常捕获,单条资源故障不影响整体任务运行。

七、存储模块常见问题与排错方案

结合实战经验,整理目录与文件存储环节高频故障、成因及解决方案:

表格

问题现象产生原因解决方案
路径报错,提示目录不存在仅创建单级目录,上级目录缺失使用os.makedirspathlib开启parents=True递归创建
跨平台运行路径解析错误硬编码\路径分隔符统一使用os.path.joinpathlib拼接路径
原有文件被新文件覆盖文件名重复,无防覆盖机制采用序号自增、时间戳、MD5 命名方案
大文件写入导致内存溢出一次性读取全部二进制流使用stream=True分块请求、分块写入文件
文件名包含特殊字符,无法保存直接使用网页原名称作为文件名过滤中文、特殊符号、空格,统一标准化命名
目录层级过多,访问卡顿目录深度超过 5 级简化目录层级,控制在 3-4 级以内

7.1 典型问题:中文文件名异常

部分系统对中文文件名兼容性较差,会出现乱码、无法访问等问题。解决方案:放弃使用原始网页文件名,统一采用序号、时间戳命名,彻底规避中文路径问题。

7.2 典型问题:磁盘空间溢出

长期运行的爬虫会持续占用磁盘空间,可增加定时清理逻辑、文件过期删除逻辑,自动清理超过指定时间的无效资源。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/12 19:26:51

高级java每日一道面试题-2026年02月10日-实战篇[Docker]-什么是容器的逃逸攻击?有哪些常见的逃逸方式?

Docker 容器安全是一个纵深防御体系,从镜像构建、运行时隔离、网络控制到主机加固,任何一环薄弱都可能导致 Java 微服务被攻击。高级面试中,你需要系统性地阐述风险面,并给出对应的缓解策略,体现安全左移与零信任思维。…

作者头像 李华
网站建设 2026/6/12 19:26:50

drawio-desktop:破解离线图表绘制的安全与隐私难题

drawio-desktop:破解离线图表绘制的安全与隐私难题 【免费下载链接】drawio-desktop Official electron build of draw.io 项目地址: https://gitcode.com/GitHub_Trending/dr/drawio-desktop 你是否曾为在线绘图工具的隐私担忧而烦恼?当敏感的系…

作者头像 李华
网站建设 2026/6/12 19:25:56

SteamShutdown:让电脑在Steam下载完成后自动关机的智能方案

SteamShutdown:让电脑在Steam下载完成后自动关机的智能方案 【免费下载链接】SteamShutdown Automatic shutdown after Steam download(s) has finished. 项目地址: https://gitcode.com/gh_mirrors/st/SteamShutdown 还在为深夜等待大型游戏下载而烦恼吗&am…

作者头像 李华
网站建设 2026/6/12 19:23:52

NSK LSFT5032-2.5 滚珠丝杠技术解析

型号 LSFT5032-2.5 属于 sources 中 NSK 的管循环式滚珠丝杠系列。 与您上一条查询的同尺寸 P 预紧间隔滚珠型号(LPFT5032-2.5,静载约 5.47 吨,刚度 397 N/m)相比,该型号是 50 mm 超大轴径、32 mm 极限超大导程规格中的…

作者头像 李华
网站建设 2026/6/12 19:21:43

Java 常用类 - contains 方法类型匹配

contains 方法类型匹配 1、案例引入 Set<Integer> nums new HashSet<>(); nums.add(1); nums.add(2); nums.add(3);Long i 1L;System.out.println(nums.contains(i)); System.out.println(nums.contains(i.intValue()));# 输出结果false true2、案例分析 第一行输…

作者头像 李华
网站建设 2026/6/12 19:20:54

ChanlunX缠论插件:3分钟让通达信变身专业缠论分析工具

ChanlunX缠论插件&#xff1a;3分钟让通达信变身专业缠论分析工具 【免费下载链接】ChanlunX 缠中说禅炒股缠论可视化插件 项目地址: https://gitcode.com/gh_mirrors/ch/ChanlunX 你是否曾经面对复杂的K线图感到困惑&#xff1f;想要掌握缠论分析技术&#xff0c;却被繁…

作者头像 李华