当前位置: 首页 > 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、内存使用率持续居高不下)、提取速度异常缓慢或出现报错提示,这时应该立即暂停操作,排查问题。

相关文章:

  • 网站开发常见bug百度网盘搜索引擎入口官网
  • 用局域网建设网站百度账号快速登录
  • 厦门手机网站建设是什么百度推广开户费用标准
  • 网站pv uv 多少算好站电脑培训学校
  • 电子商务网站建设的特点seo咨询服务
  • 做3dmax的网站推广网页
  • notepad++ 怎么快速给 python (nginx、shell) 文件加 # 注释
  • 远程玩3A大作要多少帧?ToDesk、向日葵、UU远程性能对决
  • 从零搭建高效本地代理池:设计与实现
  • Ubuntu中控制用户cpu资源分配控制步骤
  • Flutter 多平台项目开发指南
  • 【Go语言-Day 9】指针基础:深入理解内存地址与值传递
  • 量学云讲堂2025年天山至尊刘智辉第63期视频课程+第2段位课
  • Trae IDE 大师评测:驾驭 MCP Server - Figma AI Bridge 一键成就前端瑰宝
  • 原子级制造革命:双原子镧催化剂登顶Angew,焦耳超快加热技术深度解析
  • leetcode:50. Pow(x, n)(python3解法,数学相关算法题)
  • ISP Pipeline(3):Lens Shading Correction 镜头阴影校正
  • OpenCV CUDA模块设备层-----逐通道的正弦运算函数sin()
  • AI智能体——OpenManus 源码学习
  • 【RabbitMQ】多系统下的安装配置与编码使用(python)
  • A2O MAY登上央视《中国音乐TOP榜》舞台,展现新歌榜冠军实力
  • docker repositories.json 文件学习
  • 七天学会SpringCloud分布式微服务——03——一些细节的心得感悟(续)
  • C2远控篇CC++SC转换格式UUID标识MAC物理IPV4地址减少熵值
  • ubuntu22.04系统kubeadm部署k8s高可用集群
  • Docker 部署 Kong云原生API网关