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

