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

自动获取文件的内存大小怎么设置?批量获取文件名和内存大小到Excel中的方法

在对重要数据进行备份或迁移操作前,为确保备份全面无遗漏,且合理规划目标存储设备的空间,会将文件名和内存提取到 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.lqws.cn/news/535321.html

相关文章:

  • IDEA下载不了插件了怎么办?从本地导入插件详细教程!
  • ubuntu 远程桌面 xrdp + frp
  • 【工具推荐】WaybackLister——发现潜在目录列表
  • OpenBayes 一周速览丨Nanonets-OCR-s深度语义理解,精准结构化转换;HLE人类问题推理基准上线,含2.5k题目,助力封闭式评估体系构建
  • 环境太多?不好管理怎么办?TakMll 工具帮你快速切换和管理多语言、多版本情况下的版本切换。
  • 基于SpringBoot和Leaflet的区域冲突可视化-以伊以冲突为例
  • 【Pytorch】语言模型上的动态量化
  • 供应链管理:主要生产计划类型及其相关信息
  • Solidity学习 - 认识Solidity合约结构
  • GitLab 18.1 发布 Runner、无效的个人访问令牌查看等功能,可升级体验!
  • 一分钟了解Transformer
  • 深入了解 AWS EventBridge
  • 无人机螺旋桨机械能模块解析
  • 深入解析前端 Meta 标签:HTML 的隐形守护者与功能大师
  • cudaStreamCreateWithPriority和cudaDeviceGetStreamPriorityRange
  • 基于vue框架的二手图书零售系统q7jqy(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 279. 完全平方数
  • 2025 Java开发生态全景图:云原生、AI与性能优化的技术融合
  • 用 Spark 优化亿级用户画像计算:Delta Lake 增量更新策略详解
  • flutter结合ai工具(其他语言通用)
  • 【CMake基础入门教程】第六课:构建静态库 / 动态库 与安装规则(install)
  • Linux命令:内置命令与外部命令的本质区别
  • MongoDB
  • jupyter notebook Kernel Restarting内核崩溃的解决
  • Linux命令与脚本:高效系统管理的双刃剑
  • 用户中心配置(资源、角色、用户配置)
  • 机器学习在智能农业中的创新应用与未来趋势
  • 【javascript】this关键字
  • vue + vue-router写登陆验证的同步方法和异步方法,及页面组件的分离和后端代码
  • Unity Netcode自定义数据传输——结构体及其序列化