Python shutil,完整文件未写入存档。试过拉链吗

2024-04-25 17:08:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下代码:

import os
import sys
import shutil
import binascii
import zipfile

code = "testing111"

head1 = ("\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01")
head2 = ("\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01")
head3 = ("\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01")

evilbuff = bytearray(head1)
evilbuff += code
evilbuff += bytearray(head2)
evilbuff += code
evilbuff += bytearray(head3)

file = "folder\\file\\demo\\images.png"
f = open(file,mode='wb')
f.write(evilbuff)

file2 = sys.argv[2]
shutil.make_archive("myzip", "zip", "demo_03")
print ("[+] Done")

我试图在folder_03\file\demo\中编写一个文件,然后压缩folder_03文件夹的内容。一切正常。你知道吗

只有一个问题。文件images.jpg末尾被剥离。你知道吗

它在folder\file\demo\images.jpg中按预期写入,但在zip存档中,文件不完整。大约有300个字节从末尾剥离。是python zip实用程序中的一些bug吗?我也试过用zipfile,但有同样的问题。你知道吗

这里head1, head2, head3中的字节只是示例。你知道吗


Tags: 文件importdemosyscodefolderzipfile
1条回答
网友
1楼 · 发布于 2024-04-25 17:08:37

您没有关闭文件。写完文件后使用f.close(),或者更好的方法是使用context manager。你知道吗

import os
import sys
import shutil
import binascii
import zipfile

code = "testing111"

head1 = ("\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01")
head2 = ("\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01")
head3 = ("\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01")

evilbuff = bytearray(head1)
evilbuff += code
evilbuff += bytearray(head2)
evilbuff += code
evilbuff += bytearray(head3)

file = "folder\\file\\demo\\images.png"
with open(file, mode='wb') as file_object:
    file_object.write(evilbuff)

file2 = sys.argv[2]
shutil.make_archive("myzip", "zip", "demo_03")
print ("[+] Done")

相关问题 更多 >