当前位置: 首页 > news >正文

path 路径模块

在开发基于 Node.js 的应用程序时,处理文件路径是一个常见的需求。为了简化这一过程并避免跨平台兼容性问题,Node.js 提供了 path 模块。该模块提供了一系列实用的方法来解析、格式化和操作文件路径。本文将详细介绍 path 模块的功能及其使用方法,帮助你更高效地管理文件路径。

什么是 path 模块?

基本概念

path 是 Node.js 核心模块之一,它提供了用于处理和转换文件路径的工具函数。无论是构建相对路径还是解析绝对路径,path 模块都能确保你的代码在不同操作系统(如 Windows 和 POSIX)之间保持一致的行为。

模块导入

要使用 path 模块,首先需要通过 require 函数将其导入到你的项目中:

const path = require('path');

核心功能概览

解析路径

path.parse()

此方法可以将一个路径字符串分解为对象,包含目录名、基本名、扩展名等属性。

const parsedPath = path.parse('/home/user/dir/file.txt');
console.log(parsedPath);
// 输出: { root: '/', dir: '/home/user/dir', base: 'file.txt', ext: '.txt', name: 'file' }
path.format()

path.parse() 相反,path.format() 可以根据给定的对象重新组合成一个路径字符串。

const formattedPath = path.format({root: '/',dir: '/home/user/dir',base: 'file.txt',ext: '.txt',name: 'file'
});
console.log(formattedPath); // 输出: /home/user/dir/file.txt

构建路径

path.join()

path.join() 方法用于连接多个路径片段,并规范化生成的结果路径。它会自动处理多余的斜杠和其他不规范的情况。

const joinedPath = path.join('/foo', 'bar', 'baz/asdf', 'quux', '..');
console.log(joinedPath); // 输出: /foo/bar/baz/asdf
path.resolve()

path.resolve() 类似于 path.join(),但它会从右向左解析路径片段,直到构建出一个绝对路径。如果传入的第一个参数不是绝对路径,则会使用当前工作目录作为起点。

const resolvedPath = path.resolve('/foo/bar', './baz');
console.log(resolvedPath); // 输出: /foo/bar/bazconst relativeResolvedPath = path.resolve('wwwroot', 'static_files/png/', '../gif/image.gif');
console.log(relativeResolvedPath); // 输出: 当前工作目录/wwwroot/static_files/gif/image.gif

路径标准化

path.normalize()

path.normalize() 方法可以清理路径中的多余部分,比如多余的斜杠或点符号。

const normalizedPath = path.normalize('/foo/bar//baz/asdf/quux/..');
console.log(normalizedPath); // 输出: /foo/bar/baz/asdf

获取路径信息

path.basename()

path.basename() 返回路径的最后一部分,通常是一个文件名。

const basename = path.basename('/foo/bar/baz/asdf/quux.html');
console.log(basename); // 输出: quux.htmlconst basenameWithoutExt = path.basename('/foo/bar/baz/asdf/quux.html', '.html');
console.log(basenameWithoutExt); // 输出: quux
path.dirname()

path.dirname() 返回路径的目录部分。

const dirname = path.dirname('/foo/bar/baz/asdf/quux');
console.log(dirname); // 输出: /foo/bar/baz/asdf
path.extname()

path.extname() 返回路径的扩展名部分。

const extname = path.extname('index.html');
console.log(extname); // 输出: .html

跨平台注意事项

由于不同的操作系统对文件路径有不同的约定(例如,Windows 使用反斜杠 \ 作为路径分隔符,而大多数 Unix 系统使用正斜杠 /),直接硬编码路径分隔符可能会导致兼容性问题。为此,path 模块提供了平台无关的方法来处理路径。

path.sep

path.sep 属性表示当前操作系统的路径分隔符。

console.log(path.sep); // 在 Windows 上输出: \;在 POSIX 上输出: /

path.delimiter

path.delimiter 属性表示当前操作系统的路径分隔符,用于环境变量中的路径列表。

console.log(path.delimiter); // 在 Windows 上输出: ;;在 POSIX 上输出: :

实际应用示例

假设我们需要创建一个简单的脚本,用于读取指定目录下的所有 .json 文件,并打印它们的内容。我们可以利用 fspath 模块来实现这一目标。

const fs = require('fs');
const path = require('path');function readJsonFiles(dir) {fs.readdir(dir, (err, files) => {if (err) throw err;files.forEach(file => {if (path.extname(file) === '.json') {const filePath = path.join(dir, file);fs.readFile(filePath, 'utf8', (err, data) => {if (err) throw err;console.log(`Contents of ${filePath}:`);console.log(JSON.parse(data));});}});});
}readJsonFiles('./data');

结语

感谢您的阅读!如果您对 Node.js 的 path 模块或其他相关话题有任何疑问或见解,欢迎继续探讨。

相关文章:

path 路径模块

在开发基于 Node.js 的应用程序时,处理文件路径是一个常见的需求。为了简化这一过程并避免跨平台兼容性问题,Node.js 提供了 path 模块。该模块提供了一系列实用的方法来解析、格式化和操作文件路径。本文将详细介绍 path 模块的功能及其使用方法&#x…...

SpringBoot中的多环境配置管理

SpringBoot中的多环境配置管理 文章目录 SpringBoot中的多环境配置管理SpringBoot中的多环境配置管理 多环境配置的概述1. 为什么需要多环境配置?2. Spring Boot 中如何实现多环境配置?3. 多环境配置的应用场景4. 如何实现配置隔离? Spring B…...

mac下生成.icns图标

笔记原因: 今日需要在mac下开发涉及图标文件的使用及icons文件的生成,所以记录一下。 网络上都是一堆命令行需要打印太麻烦了,写一个一键脚本。 步骤一 将需要生成的png格式文件重命名为“pic.png” mv xxxx.png pic.png 步骤二 下载我…...

关于JS继承的七种方式和理解

1.原型链继承 function Fun1() {this.name parentthis.play [1, 2, 3] } function Fun2() {this.type child }Fun2.prototype new Fun1()let s1 new Fun2() let s2 new Fun2() s1.play.push(4) console.log(s1.play, s2.play) // [1, 2, 3, 4] [1, 2, 3, 4]可以看到两个…...

储能系统-系统架构

已更新系列文章包括104、61850、modbus 、单片机等,欢迎关注 IEC61850实现方案和测试-1-CSDN博客 快速了解104协议-CSDN博客 104调试工具2_104协议调试工具-CSDN博客 1 电池储能系统(BESS) 架构 电池储能系统主要包括、电池、pcs、本地控制…...

AI智算-k8s部署DeepSeek Janus-Pro-7B 多模态大模型

文章目录 简介环境依赖模型下载下载Janus库GPU环境镜像模型manifest调用Janus多模态文生图 简介 DeepSeek Janus Pro 作为一款强大的多模态理解与生成框架,正在成为研究人员和开发者的热门选择。本文将详细介绍如何在云原生k8s环境中部署配置和使用 DeepSeek Janus…...

【截图】selenium自动通过浏览器截取指定元素div的图片

【截图】selenium自动通过浏览器截取指定元素div的图片 思路 截取完整网页截图 通过元素的坐标 截图到指定位置的图片 前提是已经获取到 driver 了 # 定位目标divtarget_div driver.find_element(By.CLASS_NAME, headlines-right)# 获取div的位置和大小location target_div…...

如何导入第三方sdk | 引入第三方jar 包

0. 背景1. 上传私有仓库2. 使用本地文件系统 0. 背景 对接一些第三方功能,会拿到第三方的sdk,也就是jar包,如何导入呢 1. 上传私有仓库 最好的方式就是将第三方jar包,上传到私有的仓库,这样直接正常在pom引用即可如果只…...

HarmonyOS 5.0应用开发——ContentSlot的使用

【高心星出品】 文章目录 ContentSlot的使用使用方法案例运行结果 完整代码 ContentSlot的使用 用于渲染并管理Native层使用C-API创建的组件同时也支持ArkTS创建的NodeContent对象。 支持混合模式开发,当容器是ArkTS组件,子组件在Native侧创建时&#…...

C#常用集合优缺点对比

先上结论&#xff1a; 在C#中&#xff0c;链表、一维数组、字典、List<T>和ArrayList是常见的数据集合类型&#xff0c;它们各有优缺点&#xff0c;适用于不同的场景。以下是它们的比较&#xff1a; 1. 一维数组 (T[]) 优点&#xff1a; 性能高&#xff1a;数组在内存中…...

基于CLIP视觉语言大模型的行人重识别方法的简单框架设计

以下是一个基于CLIP视觉语言大模型的行人重识别方法的简单框架设计&#xff0c;用于数据集测试。我们将使用torch和clip库&#xff0c;假设数据集是一个包含行人图像的文件夹结构&#xff0c;每个子文件夹代表一个行人身份。 步骤概述 安装必要的库加载CLIP模型定义数据集类提…...

RabbitMQ 从入门到精通:从工作模式到集群部署实战(三)

文章目录 使用CLI管理RabbitMQrabbitmqctlrabbitmq-queuesrabbitmq-diagnosticsrabbitmq-pluginsrabbitmq-streamsrabbitmq-upgraderabbitmqadmin 使用CLI管理RabbitMQ RabbitMQ CLI 工具需要安装兼容的 Erlang/OTP版本。 这些工具假定系统区域设置为 UTF-8&#xff08;例如en…...

BurpSuite抓包与HTTP基础

文章目录 前言一、BurpSuite1.BurpSuite简介2.BurpSuite安装教程(1)BurpSuite安装与激活(2)安装 https 证书 3.BurpSuite使用4.BurpSuite资料 二、图解HTTP1.HTTP基础知识2.HTTP客户端请求消息3.HTTP服务端响应消息4.HTTP部分请求方法理解5.HTTPS与HTTP 总结 前言 在网络安全和…...

SQL Server 数据库迁移到 MySQL 的完整指南

文章目录 引言一、迁移前的准备工作1.1 确定迁移范围1.2 评估兼容性1.3 备份数据 二、迁移工具的选择2.1 使用 MySQL Workbench2.2 使用第三方工具2.3 手动迁移 三、迁移步骤3.1 导出 SQL Server 数据库结构3.2 转换数据类型和语法3.3 导入 MySQL 数据库3.4 迁移数据3.5 迁移存…...

【大模型】DeepSeek与chatGPT的区别以及自身的优势

目录 一、前言二、核心技术对比2.1 模型架构设计2.1.1 ChatGPT的Transformer架构2.1.2 DeepSeek的混合架构 2.2 训练数据体系2.2.1 ChatGPT的数据特征2.2.2 DeepSeek的数据策略 三、应用场景对比3.1 通用场景表现3.1.1 ChatGPT的强项领域3.2.2 DeepSeek的专项突破 3.3 响应效率…...

DeepSeek:知识图谱与大模型参数化知识融合的创新架构

引言&#xff1a;AI 领域的融合趋势 在目前大模型与知识图谱作为两个重要的研究方向&#xff0c;各自展现出了强大的能力与潜力。大模型&#xff0c;凭借其在海量数据上的深度训练&#xff0c;拥有强大的语言理解与生成能力&#xff0c;能够处理多种自然语言处理任务&#xff0…...

ES6 迭代器 (`Iterator`)使用总结

Iterator&#xff08;迭代器&#xff09;是 ES6 引入的一种 接口&#xff0c;用于 顺序访问 可迭代对象&#xff08;Array、Set、Map、String、arguments、自定义对象等&#xff09;。 Iterator&#xff08;迭代器&#xff09;的作用有三个&#xff1a; 为各种数据结构提供一个…...

信用修复和失联修复的区别

失联修复和信用修复是两个不同的概念&#xff0c;在目的、操作方式和应用场景上都有所区别。 失联修复 失联修复主要是指在金融催收行业中&#xff0c;当债务人的联系方式&#xff08;通常是手机号码&#xff09;发生改变&#xff0c;导致无法联系到债务人时&#xff0c;催收公…...

2025蓝桥杯JAVA编程题练习Day3

1.黛玉泡茶【算法赛】 问题描述 话说林黛玉闲来无事&#xff0c;打算在潇湘馆摆个茶局&#xff0c;邀上宝钗、探春她们一起品茗赏花。黛玉素来讲究&#xff0c;用的茶杯也各有不同&#xff0c;大的小的&#xff0c;高的矮的&#xff0c;煞是好看。这不&#xff0c;她从柜子里…...

[论文阅读] Knowledge Fusion of Large Language Models

Knowledge Fusion of Large Language Models (FuseLLM) Methodology 整体Pipeline如下图所示 不同的动物代表不同的LLM。左边第一&#xff0c;第二分别是Ensemble以及Weight Merging方法。最右侧为本文提出的FuseLLM。 Ensemble: 融合多个models的预测结果&#xff0c;比如…...

数学建模期末速成 聚类分析与判别分析

聚类分析是在不知道有多少类别的前提下&#xff0c;建立某种规则对样本或变量进行分类。判别分析是已知类别&#xff0c;在已知训练样本的前提下&#xff0c;利用训练样本得到判别函数&#xff0c;然后对未知类别的测试样本判别其类别。 聚类分析 根据样本自身的属性&#xf…...

构建 MCP 服务器:第 3 部分 — 添加提示

这是我们构建 MCP 服务器的四部分教程的第三部分。在第一部分中&#xff0c;我们使用基本资源创建了第一个MCP 服务器&#xff1b;在第二部分中&#xff0c;我们添加了资源模板并改进了代码组织。现在&#xff0c;我们将进一步重构代码并添加提示功能。 什么是 MCP 提示&#…...

图像处理、图像分析和图像理解的定义、联系与区别

1. 定义 图像处理&#xff08;Image Processing&#xff09; 图像处理是低层操作&#xff0c;主要针对像素级的图像数据进行加工&#xff0c;目的是改善图像质量或为后续分析做准备。 典型任务&#xff1a;去噪、增强&#xff08;如对比度调整&#xff09;、锐化、边缘检测、图…...

VUE前端实现自动打包成压缩文件

VUE前端实现自动打包成压缩文件 背景思路实现打包代码实现 尾巴 背景 做前端开发的兄弟们都经历过每次开发完成之后发包需要进行打包&#xff0c;然后将打包文件压缩。每次打好包了都得手动压缩一遍&#xff0c;就有点繁琐。今天我们就使用一种命令行自动压缩的方法&#xff0…...

声音信号的基频检测(python版本)

import math import wave import array import functools from abc import ABC, abstractmethod import matplotlib import matplotlib.pyplot as plt from matplotlib.gridspec import GridSpec import os import sys# 设计模式部分 class PreprocessStrategy(ABC):"&q…...

【PmHub面试篇】PmHub中基于Redis加Lua脚本的计数器算法限流实现面试专题解析

你好&#xff0c;欢迎来到本次关于PmHub中基于Redis加Lua脚本的计数器算法限流实现的面试系列分享。在这篇文章中&#xff0c;我们将深入探讨这一技术领域的相关面试题预测。若想对相关内容有更透彻的理解&#xff0c;强烈推荐参考之前发布的博文&#xff1a;【PmHub后端篇】Pm…...

升级:用vue canvas画一个能源监测设备和设备的关系监测图!

用vue canvas画一个能源电表和设备的监测图-CSDN博客 上一篇文章&#xff0c;我是用后端的数据来画出监测图。这次我觉的&#xff0c;用前端来控制数据&#xff0c;更爽。 本期实现功能&#xff1a; 1&#xff0c;得到监测设备和设备的数据&#xff0c;然后进行存库 2&…...

怎么让大语言模型(LLMs)自动生成和优化提示词:APE

怎么让大语言模型(LLMs)自动生成和优化提示词:APE https://arxiv.org/pdf/2211.01910 1. 研究目标:让机器自己学会设计提示词 问题:大语言模型(如GPT-3)很强大,但需要精心设计的“提示词”才能发挥最佳效果。过去靠人工设计提示词,费时费力,还可能因表述差异导致模…...

阿里140 补环境日志

所有属性值是 __cheng________ 都是我做的防止套代理 非140环境检测代码 这个日志绝大多数 是做和浏览器tostring结果 处理一致 方法: toString 函数: ...... 结果: ..... 当前代码补了事件和dom 实际手补 比这少些 下方为环境日志: VM526 vm.js:…...

技巧小结:外部总线访问FPGA寄存器

概述 需求&#xff1a;stm32的fsmc总线挂载fpga&#xff0c;stm32需要访问fpga内部寄存器 1、分散加载文件将变量存放到指定地址即FPGA寄存器地址 sct文件指定变量存储地址&#xff0c;从而可以直接访问外设&#xff0c;&#xff08;28335也可以&#xff0c;不过用的是cmd文件…...