0

ディレクトリ内のすべて/home/username/main/books/が書き込まれて返され/home/username/main/index.htmlますが、「index.html」はディレクトリではないため、ウォークできないため、書き込まれません。スクリプトを修正して、ディレクトリの場合はそれを歩き、見つかったものすべてを書き込み、直接ファイルの場合はそれを書き込むにはどうすればよいでしょうか。

パイソン

def zipit (request):
  file_paths = ['/home/username/main/books/', '/home/username/main/index.html']
  buffer= StringIO.StringIO()
  z= zipfile.ZipFile( buffer, "w" )
  for p in file_paths:
    for dir, subdirs, files in os.walk(p):
      for f in files:
        filename = os.path.join(dir, f)
        z.write(filename, arcname = filename[15:])
  z.close()
  buffer.seek(0)
  final = HttpResponse(buffer.read())
  final['Content-Disposition'] = 'attachment; filename=dbs_custom_library.zip'
  final['Content-Type'] = 'application/x-zip'
  return final
4

1 に答える 1

1

p歩く前に確認が必要です。

  • ディレクトリの場合 => ウォークインします。
  • そうでない場合 => このファイルをアーカイブに追加するだけです。

変更されたコード:

def zipit (request):
  file_paths = ['/home/username/main/books/', '/home/username/main/index.html']
  buffer= StringIO.StringIO()
  z= zipfile.ZipFile( buffer, "w" )
  for p in file_paths:
    if os.path.isdir(p):
      for dir, subdirs, files in os.walk(p):
        for f in files:
          filename = os.path.join(dir, f)
          z.write(filename, arcname = filename[15:])
     else:
          z.write(p, arcname = p)
  z.close()
  buffer.seek(0)
  final = HttpResponse(buffer.read())
  final['Content-Disposition'] = 'attachment; filename=dbs_custom_library.zip'
  final['Content-Type'] = 'application/x-zip'
  return final
于 2012-06-15T18:27:46.577 に答える