在对重要数据进行备份或迁移操作前,为确保备份全面无遗漏,且合理规划目标存储设备的空间,会将文件名和内存提取到 Excel。比如,某个部门要将旧电脑中的文件迁移到新服务器,提前整理文件信息,能清晰知道所需存储容量,避免迁移过程中因空间不足出现问题。

一、使用 Python 实现​
Python 有丰富的库可以实现该功能,使用os库获取文件信息,openpyxl库操作 Excel,以下是示例代码:

import os
from openpyxl import Workbook

# 指定文件夹路径
folder_path = '你的文件所在文件夹路径'

# 创建Excel工作簿和工作表
workbook = Workbook()
sheet = workbook.active
# 添加表头
sheet.append(['文件名', '内存大小(字节)'])

# 遍历文件夹中的文件
for root, dirs, files in os.walk(folder_path):
    for file in files:
        file_path = os.path.join(root, file)
        file_size = os.path.getsize(file_path)
        sheet.append([file, file_size])

# 保存Excel文件
workbook.save('文件信息.xlsx')

将'你的文件所在文件夹路径'替换为实际存放 PDF 或 jpg 长图文件的文件夹路径,运行代码后,会在当前目录生成名为文件信息.xlsx的 Excel 文件,里面包含文件名和内存大小信息。

二、node.js也是可以帮我们批量获取文件名称和大小并存放到对应的Excel中

1、首先安装必要的依赖:npm install xlsx

2、运行脚本:node file_size_excel.js [目录路径] [输出文件路径

3、如果不提供参数,脚本默认扫描当前目录并输出到 "文件信息.xlsx"
示例代码如下:

const fs = require('fs');
const path = require('path');
const XLSX = require('xlsx');

// 将字节转换为人类可读的格式
function formatBytes(bytes, decimals = 2) {
  if (bytes === 0) return '0 Bytes';

  const k = 1024;
  const dm = decimals < 0 ? 0 : decimals;
  const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];

  const i = Math.floor(Math.log(bytes) / Math.log(k));

  return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];
}

// 递归获取目录中所有文件的信息
async function getFilesInfo(dirPath) {
  return new Promise((resolve, reject) => {
    fs.readdir(dirPath, { withFileTypes: true }, (err, entries) => {
      if (err) {
        reject(err);
        return;
      }

      const filesInfo = [];
      const promises = entries.map(entry => {
        const entryPath = path.join(dirPath, entry.name);

        if (entry.isDirectory()) {
          return getFilesInfo(entryPath).then(subFiles => {
            filesInfo.push(...subFiles);
          });
        } else {
          return new Promise((res, rej) => {
            fs.stat(entryPath, (err, stats) => {
              if (err) {
                rej(err);
                return;
              }

              filesInfo.push({
                name: entry.name,
                path: entryPath,
                size: stats.size,
                sizeFormatted: formatBytes(stats.size)
              });
              res();
            });
          });
        }
      });

      Promise.all(promises)
        .then(() => resolve(filesInfo))
        .catch(reject);
    });
  });
}

// 将文件信息导出到Excel
function exportToExcel(filesInfo, outputPath) {
  // 转换数据格式以适应SheetJS
  const worksheetData = [
    ['文件名', '文件路径', '大小(字节)', '大小(可读格式)'],
    ...filesInfo.map(file => [file.name, file.path, file.size, file.sizeFormatted])
  ];

  // 创建工作表
  const worksheet = XLSX.utils.aoa_to_sheet(worksheetData);

  // 创建工作簿并添加工作表
  const workbook = XLSX.utils.book_new();
  XLSX.utils.book_append_sheet(workbook, worksheet, '文件信息');

  // 保存工作簿到文件
  XLSX.writeFile(workbook, outputPath);
  console.log(`已成功导出到 ${outputPath}`);
}

// 主函数
async function main() {
  try {
    // 获取命令行参数
    const directoryPath = process.argv[2] || '.';
    const outputFilePath = process.argv[3] || '文件信息.xlsx';

    // 验证目录是否存在
    if (!fs.existsSync(directoryPath)) {
      console.error(`错误: 目录 ${directoryPath} 不存在`);
      process.exit(1);
    }

    // 获取文件信息
    console.log(`正在扫描目录: ${directoryPath}`);
    const filesInfo = await getFilesInfo(directoryPath);
    console.log(`共找到 ${filesInfo.length} 个文件`);

    // 导出到Excel
    exportToExcel(filesInfo, outputFilePath);
  } catch (error) {
    console.error('发生错误:', error.message);
    process.exit(1);
  }
}

// 执行主函数
main();    

三、上面介绍的是用编程的方式获取文件名和其对应的内存大小存放到Excel中,如果我们不懂编程就可以使用界面话的工具进行获取。这里介绍使用“汇帮文件名提取器”软件来获取。

在进行文件信息提取操作前,务必对重要文件和数据进行备份。即使操作过程看似简单,也可能因误操作、软件漏洞或系统异常导致文件丢失或损坏。如在使用命令行提取文件内存大小时,若输入错误指令,可能意外删除文件,备份可避免数据损失。​对于大规模文件信息提取任务,要实时监控操作进程。若发现系统资源占用过高(如 CPU、内存使用率持续居高不下)、提取速度异常缓慢或出现报错提示,这时应该立即暂停操作,排查问题。

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

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

相关文章

创建型设计模式——单例模式

单例设计模式 什么是创建型设计模式有哪些创建型设计模式 单例设计模式实现方法饿汉式单例懒汉式单例实现方法 CSDN——C单例模式详解 单例设计模式是一种创建型设计模式 什么是创建型设计模式 创建型设计模式&#xff0c;就是通过控制对象的创建方式来解决设计问题。 有哪…

html 照片环 - 图片的动态3D环绕

html 照片环 - 图片的动态3D环绕 引言一、源码二、图转base64参考链接 引言 效果展示&#xff1a; 一、源码 原始图片的base64编码字符太多了&#xff0c;博客放不下&#xff0c;将图片缩小后的加入html的源码如下&#xff1a; <!DOCTYPE html> <html><hea…

ADIOS2 介绍与使用指南

文章目录 ADIOS2 介绍与使用指南什么是ADIOS2?ADIOS2 的主要特点ADIOS2 核心概念ADIOS2 安装Linux 系统安装Windows 安装 ADIOS2 基本使用C 示例Python 示例 ADIOS2 高级特性并行I/O流模式 ADIOS2 引擎类型性能优化建议总结 ADIOS2 介绍与使用指南 什么是ADIOS2? ADIOS2(Ad…

网络安全 vs 信息安全的本质解析:数据盾牌与网络防线的辩证关系关系

在数字化生存的今天&#xff0c;每一次手机支付、每一份云端文档、每一条医疗记录的背后&#xff0c;都矗立着这两座安全堡垒。理解它们的协同逻辑&#xff0c;不仅是技术从业者的必修课&#xff0c;更是企业构建数字防护体系的底层认知 —— 毕竟当勒索软件同时切断 "护城…

ping-pong操作

常见不匹配的原因 瞬时数据率的差异&#xff1b; 数据顺序的差异&#xff1b; 对比维度PipelineFIFOPing-Pong逻辑复制结构类型时序分级推进&#xff08;寄存器链&#xff09;环形队列&#xff08;缓冲区&#xff09;双缓冲区&#xff08;轮换使用&#xff09;功能块并行&am…

21.合并两个有序链表

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 思路&#xff1a;这里使用的主要数据结构是单链表。该算法采用经典的双指针技术来合并列表。 A dummy node is created; this node does not hold any meaningful value b…

vue3中简单易懂说明nextTick的使用

nextTick(): 等待下一次 DOM 更新刷新的工具方法 重点解释: 当你在 Vue 中更改响应式状态时&#xff0c;最终的 DOM 更新并不是同步生效的&#xff0c;而是由 Vue 将它们缓存在一个队列中&#xff0c;直到下一个“tick”才一起执行。这样是为了确保每个组件无论发生多少状态改变…

gRPC 相关介绍

介绍 依赖两大技术 HTTP/2 作为传输协议 gRPC 底层用 HTTP/2&#xff0c;它支持&#xff1a; 多路复用&#xff08;在一条 TCP 连接中并行传输多个请求和响应&#xff09;二进制传输&#xff08;更紧凑、高效&#xff09;流式传输&#xff08;客户端流、服务端流、双向流&…

PyTorch 模型镜像下载与安装指南

在国内&#xff0c;由于网络限制&#xff0c;直接从 PyTorch 官方源下载可能会遇到速度慢或无法访问的问题。为了解决这一问题&#xff0c;可以使用国内镜像源来加速下载和安装 PyTorch。 文章目录 安装指定版本的 PyTorch&#xff08;以 CUDA 11.8 为例&#xff09;安装 CPU 版…

2025年SVN学习价值分析

⚖️ 一、SVN的现状与应用场景分析 仍在特定领域发挥作用 传统企业维护场景&#xff1a;在金融、电信、政府等采用集中式开发流程的机构中&#xff0c;许多遗留系统仍使用SVN管理。这些系统往往体量庞大、架构稳定&#xff0c;迁移成本高&#xff0c;因此SVN短期内不会被完全替…

JavaScript中的10种排序算法:从入门到精通

作为前端开发者&#xff0c;排序算法是我们必须掌握的基础知识。无论是在面试中&#xff0c;还是在实际开发中处理数据展示时&#xff0c;排序都是一个常见需求。今天&#xff0c;我将用通俗易懂的方式&#xff0c;带你了解JavaScript中最常见的10种排序算法。 1. 冒泡排序 - …

【微信小程序】6、SpringBoot整合WxJava获取用户手机号

1、手机号快速验证组件 手机号快速验证组件 旨在帮助开发者向用户发起手机号申请&#xff0c;并且必须经过用户同意后&#xff0c;开发者才可获得由平台验证后的手机号&#xff0c;进而为用户提供相应服务。 该能力与手机号实时验证组件的区别为&#xff1a; 手机号快速验证…

redis8.0新特性:原生JSON支持详解

文章目录 一、写在前面二、使用1、基本命令&#xff08;1&#xff09;JSON.SET 设置 JSON 值&#xff08;2&#xff09;JSON.GET 获取 JSON 值&#xff08;3&#xff09;JSON.DEL 删除 JSON 值&#xff08;4&#xff09;JSON.MGET 批量获取&#xff08;5&#xff09;JSON.MSET …

QT网络调试助手开发全指南,软件设计图预研,后续文档跟进补充

网络调试助手 1 TCP网络调试助手 1.1 项目概述 网络相关的一些基础概念学习QTcpServer 学习QTcpClient 学习TextEdit特定位置输入文字颜色学习网络通信相关知识点 复习巩固之前UI控件 程序运行如下图所示 1.2 开发流程 1.3 QTtcp 服务器的关键流程 工程建立&#xff0c;需要在…

网络分层模型与协议体系技术研究报告

网络分层模型是计算机网络体系结构的核心框架&#xff0c;它通过将复杂的网络通信过程分解为多个层次&#xff0c;使网络设计、实现和维护变得更加模块化和标准化。 一、分层模型概念 1、OSI七层模型的详细解析 开放系统互连参考模型&#xff08;OSI/RM&#xff09;是国际标…

C++面向对象7——C继承与C++继承对比、C++继承详解

继承 C语言与C继承机制的对比与实现 一、C语言模拟继承的实现方法 C语言不支持面向对象编程的原生继承机制&#xff0c;但可以通过结构体嵌套和函数指针组合来模拟。 1. 结构体嵌套实现"is-a"关系 // 基类&#xff1a;Shape typedef struct {int x;int y; } Sha…

运维打铁: Windows 服务器基础运维要点解析

文章目录 思维导图一级节点&#xff1a;Windows 服务器基础运维要点 详细内容解析系统安装与配置硬件准备安装介质选择系统安装过程初始配置 日常监控与维护性能监控服务状态检查日志管理 安全管理账户与权限管理防火墙配置病毒防护 备份与恢复备份策略制定备份工具使用恢复测试…

Python实例题:基于量子计算的优化算法实现(量子计算、优化理论)

目录 Python实例题 题目 问题描述 解题思路 关键代码框架 难点分析 扩展方向 Python实例题 题目 基于量子计算的优化算法实现&#xff08;量子计算、优化理论&#xff09; 问题描述 开发一个基于量子计算的优化算法实现&#xff0c;包含以下功能&#xff1a; 量子计…

基本算法--蓝桥杯备考

1.前缀和 1.定义 假设有一个数组a[n],要计算它的前j个元素的和为 a[0]a[1]...a[j-1] 时间复杂度为O(j)&#xff0c;且随着j的变大时间复杂度越来越大。 使用了前缀和算法则为 sum[j]-sum[j-1] 时间复杂度是O(1)&#xff0c;且数据越大优势越明显。 2.例题一 详解见《可…

pgsql 中各个字符串的区别

PostgreSQL 提供了多种字符串类型&#xff0c;它们在存储方式、长度限制和适用场景上有所不同。以下是主要字符串类型的详细对比和区别&#xff1a; 一、核心字符串类型对比 CHAR(n)/CHARACTER(n) 特点&#xff1a;固定长度字符串&#xff0c;不足部分用空格填充最大长度&…