请帮写一个文件分割的代码,要求文件大小不一样

feiyuncxd 2020-11-13 09:58:41
现在有一个xxx.bin文件,大小为7221字节,我想根据我指定文件名和字节数,将它分割成若干个小文件。

也就是根据一个列表来对xxx.bin文件的数据从头至尾依次根据指定的字节数分割,列表格式如下(前面为分割后文件名,后面的数值为这个文件的字节数大小)
aa1.bin 230
aa2.bin 5900
bb1.bin 128
cc.bin 963

...全文
138 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
chuifengde 2020-11-16
  • 打赏
  • 举报
回复
import os

with open(path + 'list.txt') as f:
    con = f.read().split("\n")

    s = 0
    size = os.path.getsize(path + 'xxx.bin')
    with open(path + 'xxx.bin', 'rb') as f1:
        for cc in con:
            i, j = cc.split(' ')
            j = int(j)
            s += j
            if j == -1:
                j = size - s
            with open(path + i, 'wb') as f2:
                f2.write(f1.read(j))
最后一行最好是将字节数定为-1,这样不至于丢失字节
chuifengde 2020-11-14
  • 打赏
  • 举报
回复
发个txt的格式图看看
feiyuncxd 2020-11-14
  • 打赏
  • 举报
回复
引用 1 楼 rrrr336 的回复:
不知是不是你要的。 参考。
files = [('aa1.bin', 230), ('aa2.bin', 5900), ('bb1.bin', 128), ('cc.bin', 936)]
with open('xxx.bin') as binfile:
    contents = binfile.read()
file_bytes = sum([file[1] for file in files])
assert (file_bytes <= len(contents))

start = 0
for afile in files:
    end = start + afile[1]
    content = contents[start:end]
    start = end
    with open(afile[0], 'w') as newfile:
        newfile.write(content)
引用 2 楼 chuifengde 的回复:
import os

l = {'aa1.bin': 6, 'aa2.bin': 20, 'bb1.bin': 29, 'cc.bin': -1}
s = 0
size = os.path.getsize('xxx.bin')
with open(path+'\xxx.bin', 'rb') as f1:
    for i, j in l.items():
        s += j
        if j == -1:
            j = size - s
        with open(path+'\\'+ i, 'wb') as f2:
            f2.write(f1.read(j))
那个列表格式,能否从一个txt文件里读取呢?txt的内容就是列表那个格式,【文件名+字节数】,这个方法虽然可行,但如果要分割成几百个文件,直接写在代码files =后面就太长了
feiyuncxd 2020-11-14
  • 打赏
  • 举报
回复
引用 4 楼 chuifengde 的回复:
发个txt的格式图看看
chuifengde 2020-11-14
  • 打赏
  • 举报
回复
import os

l = {'aa1.bin': 6, 'aa2.bin': 20, 'bb1.bin': 29, 'cc.bin': -1}
s = 0
size = os.path.getsize('xxx.bin')
with open(path+'\xxx.bin', 'rb') as f1:
    for i, j in l.items():
        s += j
        if j == -1:
            j = size - s
        with open(path+'\\'+ i, 'wb') as f2:
            f2.write(f1.read(j))
rrrr336 2020-11-14
  • 打赏
  • 举报
回复
不知是不是你要的。 参考。
files = [('aa1.bin', 230), ('aa2.bin', 5900), ('bb1.bin', 128), ('cc.bin', 936)]
with open('xxx.bin') as binfile:
    contents = binfile.read()
file_bytes = sum([file[1] for file in files])
assert (file_bytes <= len(contents))

start = 0
for afile in files:
    end = start + afile[1]
    content = contents[start:end]
    start = end
    with open(afile[0], 'w') as newfile:
        newfile.write(content)
PyTorch版的YOLOv8支持高性能的实时实例分割。TensorRT是针对英伟达GPU的加速工具。ONNX (Open Neural Network Exchange) 作为一个开放的网络模型中间表示(IR)格式,提供了跨框架兼容性。可以方便不同的框架轻松地交换模型,有助于框架之间的互操作性。本课程讲述如何对YOLOv8实例分割的PyTorch权重文件转成ONNX格式并进行TensorRT加速部署。相比与直接使用TensorRT API构建推理引擎,本方法更具灵活性,可用于修改YOLOv8网络架构后的模型部署。课程亮点包括:YOLOv8实例分割的PyTorch权重文件转成ONNX,再转成TensorRT 推理引擎支持在GPU上端到端TensorRT加速部署,包括预处理(图像resize, 归一化)、网络推理、后处理(非极大抑制) 均在GPU上执行支持FP16加速提供C++和Python的TensorRT加速命令接口分别在Windows和Ubuntu系统上做YOLOv8的ONNX转换及TensorRT部署演示支持图片、图片文件夹、视频文件的TensorRT的加速推理提供YOLOv8的ONNX转换及TensorRT加速部署代码代码解析文档实测推理速度提高2倍以上。课程内容包括:原理篇(YOLOv8网络架构与组件、TensorRT基础、ONNX基础、CUDA编程方法)实践篇(Windows和Ubuntu系统上的ONNX模型转换及TensorRT加速部署流程演示)代码解析篇(YOLOv8的ONNX模型转换及TensorRT加速的代码解析) 

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧