0

メモリ内にファイルを作成し、それらをディスクに書き込む前にある種の階層に配置することは可能ですか?

openステートメントをある種のメモリ内表現にリダイレクトできますか?

圧縮されたディレクトリを作成するための私の現在の手法は次のとおりです。

  1. メモリ内のすべてを一時フォルダーに書き込みます
  2. zipfileオブジェクトを作成する
  3. 以前に作成したすべてのファイルをリロードします
  4. それらをzipに追加して保存します
  5. すべての一時ファイルを削除します。

最終的には次のようになります。

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

これをすべてメモリ内で行う方法はありますか?

4

2 に答える 2

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()

私は楽しみのためにそれをやっただけで、広範囲にテストしていませんが、とにかくあなたに役立つかもしれません.

于 2013-09-27T02:17:41.870 に答える
-1

はい。オブジェクトの圧縮に関する zlib モジュールのドキュメントを参照してください。圧縮するアーカイブ オブジェクトを作成するために使用できるアーカイブ モジュールもあります。ドキュメントにはいつでもアクセスできます。

$ python
>>> import zlib
>>> help(zlib)
于 2013-09-27T02:10:39.587 に答える