You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中计算磁盘空间占比(浮点数)以对比Get-PSDrive结果

解决方案

你可以通过两种方式实现将磁盘空间转换为百分比浮点数的需求:

方法1:让PowerShell直接计算百分比并返回JSON(推荐)

这种方式避免了Python解析纯文本输出的潜在问题,数据格式更可靠。修改后的脚本如下:

import winrm
import json

# 建立WinRM远程会话
s = winrm.Session('ipaddress', auth=('Name', 'password')) 
# 自定义PowerShell命令,计算百分比并转为JSON格式输出
ps_command = '''
Get-PSDrive | Where {$_.Free -and $_.Provider.Name -eq 'FileSystem'} | 
Select Name, 
@{Name='UsedGB';Expression={[math]::Round($_.Used/1GB,2)}}, 
@{Name='FreeGB';Expression={[math]::Round($_.Free/1GB,2)}},
@{Name='UsedPercent';Expression={[math]::Round(($_.Used/($_.Used+$_.Free))*100,2)}}, 
@{Name='FreePercent';Expression={[math]::Round(($_.Free/($_.Used+$_.Free))*100,2)}} | 
ConvertTo-Json
'''
# 执行PowerShell命令
response = s.run_ps(ps_command) 
# 解析JSON结果
drive_data = json.loads(str(response.std_out, encoding='utf-8').strip())

# 遍历输出结果(支持多磁盘)
if isinstance(drive_data, list):
    for drive in drive_data:
        print(f"盘符: {drive['Name']}")
        print(f"已用空间: {drive['UsedGB']} GB,占比: {drive['UsedPercent']}%")
        print(f"可用空间: {drive['FreeGB']} GB,占比: {drive['FreePercent']}%")
else:
    print(f"盘符: {drive_data['Name']}")
    print(f"已用空间: {drive_data['UsedGB']} GB,占比: {drive_data['UsedPercent']}%")
    print(f"可用空间: {drive_data['FreeGB']} GB,占比: {drive_data['FreePercent']}%")

说明:

  • 命令中通过$_.Used/1GB和$_.Free/1GB直接将字节转为GB,避免原输出的四舍五入误差
  • ConvertTo-Json让PowerShell返回结构化数据,Python解析更便捷
  • 过滤FileSystem类型的驱动器,避免返回非磁盘驱动器(如注册表、网络驱动器等)

方法2:Python解析原文本输出计算百分比

如果不想修改PowerShell命令,可以直接解析原输出文本计算:

import winrm

# 建立WinRM会话
s = winrm.Session('ipaddress', auth=('Name', 'password')) 
command = "Get-PSDrive | Where {$_.Free}" 
response = s.run_ps(command) 
output_text = str(response.std_out, encoding='utf-8', errors='ignore').strip()

# 分割输出行,过滤表头和空行
lines = output_text.split('\n')
data_lines = [line for line in lines if line.strip() and not line.startswith(('Name', '----'))]

# 处理每一行磁盘数据
for line in data_lines:
    # 按空格分割数据(处理连续空格)
    parts = line.split()
    drive_name = parts[0]
    used_gb = float(parts[1])
    free_gb = float(parts[2])
    
    # 计算总空间和百分比
    total_gb = used_gb + free_gb
    used_percent = round((used_gb / total_gb) * 100, 2)
    free_percent = round((free_gb / total_gb) * 100, 2)
    
    # 输出结果
    print(f"盘符: {drive_name}")
    print(f"已用空间: {used_gb} GB,占比: {used_percent}%")
    print(f"可用空间: {free_gb} GB,占比: {free_percent}%")

说明:

  • 通过过滤表头行和空行,提取有效数据行
  • 使用split()分割空格分隔的字段,注意如果盘符名称包含空格(如映射网络驱动器),这种方法可能失效,此时更推荐方法1

内容的提问来源于stack exchange,提问作者merts1004

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 21:47:02