【问题标题】:divide a disk image into smaller parts using Python使用 Python 将磁盘映像划分为更小的部分
【发布时间】:2016-09-22 22:19:05
【问题描述】:

我想编写一个程序,它采用 1.6 GB 的 .dmg 文件并将其拆分为 100 MB 的块。

我还想编写另一个程序,以后可以将所有内容重新组合在一起,以便可以安装和使用。

我对 Python(以及任何类型的编程语言)非常陌生,在这里找不到任何关于这个特定事物的信息。如果我也使用了不正确的术语,请告诉我,以便我可以学习如何更有效地搜索。

谢谢!

【问题讨论】:

  • 我不明白你到底遇到了什么问题。你能告诉我们你已经拥有的代码吗? Stack Overflow 成员不会为您编写代码。
  • 我目前没有任何代码。我主要是在寻找方向,以便我可以自己学习做这件事。我绝对不希望有人为我编写代码。
  • 完全没问题。您是否尝试过搜索任何处理 DMG 文件的 python 库?
  • 为什么需要与 DMG 文件相关的库?当你像这样将文件拆分成块时,原始文件格式是什么并不重要。
  • 只需写一个循环,将 100MB 读取到一个变量中,每次迭代都会写入另一个输出文件。

标签: python python-3.x dmg


【解决方案1】:

试试这个例子:

split.py

import sys, os
kilobytes = 1024
megabytes = kilobytes * 1000
chunksize = int(1.4 * megabytes)                   

def split(fromfile, todir, chunksize=chunksize):
    if not os.path.exists(todir):
        os.mkdir(todir)
    else:
        for fname in os.listdir(todir):
            os.remove(os.path.join(todir, fname))
    partnum = 0
    input = open(fromfile, 'rb')
    while 1:
        chunk = input.read(chunksize)
        if not chunk: break
        partnum  = partnum+1
        filename = os.path.join(todir, ('part%04d' % partnum))
        fileobj  = open(filename, 'wb')
        fileobj.write(chunk)
        fileobj.close()
    input.close(  )
    assert partnum <= 9999
    return partnum

if __name__ == '__main__':
    try:
        parts = split('/Users/example/Desktop/SO/st/example.mp4', '/Users/example/Desktop/SO/st/new', 2000000) # 100000000 == 100 mb
    except:
        print('Error during split')

加入:

join.py

import os, sys
readsize = 1024

def join(fromdir, tofile):
    output = open(tofile, 'wb')
    parts  = os.listdir(fromdir)
    parts.sort(  )
    for filename in parts:
        filepath = os.path.join(fromdir, filename)
        fileobj  = open(filepath, 'rb')
        while 1:
            filebytes = fileobj.read(readsize)
            if not filebytes: break
            output.write(filebytes)
        fileobj.close(  )
    output.close(  )

if __name__ == '__main__':
    try:
        join('/Users/example/Desktop/SO/st/new', 'example_join.mp4')
    except:
        print('Error joining files:')
    else:
       print('Join complete!')

【讨论】:

  • 感谢您的示例!正如我所说,我还在学习,我只是不知道我不知道什么。我喜欢浏览人们发布的示例,了解每个部分的作用,然后在不参考的情况下重写它以确保我理解它。我会试一试!
猜你喜欢
  • 2021-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多