如何在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
相关产品推荐
相关产品推荐

