如何使用Python为.dat文件补零至9153字节?
Python实现.dat文件补零到指定大小
这里有两种可靠的方法来完成你的需求——把.dat文件从3183字节的位置开始补零,直到文件总大小达到9153字节:
方法一:读取原始数据后重写适合小文件
target_size = 9153 current_data_end = 3183 # 你指定的数据结束位置 # 以二进制模式读取有效数据 with open("DW_AMED.dat", "rb") as input_file: raw_data = input_file.read(current_data_end) # 计算需要补充的零字节数 padding_bytes = b'\x00' * (target_size - current_data_end) # 写入补零后的完整数据,覆盖原文件 with open("DW_AMED.dat", "wb") as output_file: output_file.write(raw_data) output_file.write(padding_bytes)
方法二:直接操作文件指针高效适合大文件
这种方法不需要读取整个文件,直接在原文件上修改,更节省内存:
target_size = 9153 current_data_end = 3183 with open("DW_AMED.dat", "r+b") as f: # 移动文件指针到数据结束的位置 f.seek(current_data_end) # 计算需要补的零字节数量 needed_padding = target_size - current_data_end if needed_padding > 0: # 写入对应数量的二进制零 f.write(b'\x00' * needed_padding) # 确保文件最终大小严格等于目标值(如果原文件过大则截断) f.truncate(target_size)
为什么你的原有代码有问题?
- 错误的文件打开模式:你用了文本模式
"r"打开二进制.dat文件,这会让Python尝试用默认编码解析字节,不仅可能出现乱码,还会破坏二进制数据的完整性。处理二进制文件必须用rb/wb/r+b这类二进制模式。 - readline()不能获取完整文件大小:
readline()只会读取到换行符的位置,如果文件里没有换行符,它可能读完整文件,但如果有换行符,就只读到第一行,这样计算出的文件大小完全不准确。 - 字符长度≠字节数:文本模式下
len(datContent)得到的是字符的数量,不是文件的字节数——比如多字节字符会让这个数值和实际字节数不符,没法用来计算文件大小。
内容的提问来源于stack exchange,提问作者AvaniJ
相关产品推荐
相关产品推荐

