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

如何在Python中将字符串格式的文件大小转换为MB?

解决文件大小字符串转MB数值的问题

核心思路

先从提取到的带单位字符串中拆分数值和单位,再根据单位换算成MB,最后按需求保留小数位数。

转换函数实现

下面的函数支持处理带空格(如290.5 kB)或不带空格(如290.5kB)的格式,同时兼容二进制(1024进制)和十进制(1000进制)两种换算标准:

def convert_size_to_mb(size_str, use_binary=True):
    # 拆分数值与单位
    parts = size_str.strip().split()
    if len(parts) == 1:
        # 处理无空格的格式,比如"290.5kB"
        num_part = []
        unit_part = []
        for char in parts[0]:
            if char.isdigit() or char == '.':
                num_part.append(char)
            else:
                unit_part.append(char)
        num_part = ''.join(num_part)
        unit_part = ''.join(unit_part)
    else:
        num_part, unit_part = parts
    
    size = float(num_part)
    unit = unit_part.lower()
    
    # 选择换算基数
    base = 1024 if use_binary else 1000
    # 单位转MB的系数映射
    conversion = {
        'b': 1 / (base ** 2),
        'kb': 1 / base,
        'mb': 1,
        'gb': base,
        'tb': base ** 2
    }
    
    if unit not in conversion:
        raise ValueError(f"不支持的单位类型:{unit}")
    
    mb_value = size * conversion[unit]
    # 保留两位小数,匹配示例需求
    return round(mb_value, 2)

集成到你的爬虫代码

修改现有代码,调用上述函数完成转换:

# 提取原始带单位的大小字符串
f_file_size_str = file_format.split('Format: ')[1].split(',')[1].strip(' ()')
# 转换为MB数值(如果需要十进制换算,传入use_binary=False)
f_file_size_mb = convert_size_to_mb(f_file_size_str, use_binary=False)

output_dict['data_files'].append({'file_size': f_file_size_mb})

测试示例

  • 输入290.5 kB,使用十进制换算(use_binary=False)时,输出为0.29
  • 输入1.5 GB,使用二进制换算时,输出为1536.0

注意事项

  • 如果遇到未知单位,函数会抛出异常,你可以根据需求添加默认处理逻辑(比如返回原始字符串或0)
  • 可以调整round的第二个参数,控制保留的小数位数,或者直接返回原始计算值不做四舍五入

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 02:30:59