是否可以在内存中创建多个文件,然后将它们压缩并将其写入磁盘?

时间:2013-09-27 02:06:50

标签: python

是否可以在内存中创建文件,并在将它们写入磁盘之前将它们排列成一种层次结构?

是否可以将open语句重定向到某种内存中表示形式?

我目前用于创建压缩目录的技术是:

  1. 将内存中的所有内容写入临时文件夹
  2. 创建zipfile对象
  3. 重新加载所有以前制作的文件
  4. 将它们添加到zip并保存
  5. 删除所有临时文件。
  6. 最终以这样的结局结束:

    Zipped_root 
         |
         |
         |---- file1.txt
         |
         |---- Image1.png
         |
         |---- Image2.png
         |
         |---- file...N.txt
         | 
    

    有没有办法在记忆中做到这一切?

2 个答案:

答案 0 :(得分:3)

前段时间我实现了一个小型python库(https://github.com/kajic/vdir),用于创建虚拟目录,文件,甚至在需要时压缩它们。从README(最后压缩虚拟目录):

from vdir import VDir

vd = VDir()

# Write to file
vd.open("path/to/some/file").write("your data")

# Create directory, go inside it, and write to some other file
vd.mkdir("foo")
vd.cd("foo")
vd.open("bar").write("something else") # writes to /foo/bar

# Read from file
vd.open("bar").read()

# Get the current path
vd.pwd()

# Copy directory and all its contents
vd.cp("/foo", "/foo_copy")

# Move the copied directory somewhere else
vd.mv("/foo_copy", "/foo_moved")

# Create a file, then remove it
vd.open("unnecessary").write("foo")
vd.rm("unnecessary")

# Walk over all directories and files in the virtual directory
vd.cd("/")
for base, dirnames, dirs, filenames, files in vd.walk():
  pass

# Recursively list directory contents
vd.ls()

# Create a zip from the virtual directory
zip = vd.compress()

# Get zip data
zip.read()

我只是为了好玩而做了这件事,并没有对它进行过广泛的测试,但无论如何它可能对你有用。

答案 1 :(得分:0)

是。查看有关压缩对象的zlib模块文档。还有一个归档模块,可用于创建要压缩的归档对象。您可以随时访问文档:

$ python
>>> import zlib
>>> help(zlib)