问题可能与您正在做的额外工作(特别是指定输入大小)或您检查输出的方式(上面未指定)有关。
考虑以下内容,根据需要进行操作:
准备测试数据:
$ echo "abc" > input1
$ echo "def" > input2
$ zip input1.zip input1
adding: input1 (stored 0%)
$ zip input2.zip input2
adding: input2 (stored 0%)
$ cat -v input1.zip
PK^C^D
^@^@^@^@^@)}NGNM-^AM-^HG^D^@^@^@^D^@^@^@^F^@^\^@input1UT ^@^CM-^^w^^V[x^^Vux^K^@^A^DM-]^E^@^@^DM-]^E^@^@abc
PK^A^B^^^C
^@^@^@^@^@)}NGNM-^AM-^HG^D^@^@^@^D^@^@^@^F^@^X^@^@^@^@^@^A^@^@^@M-$M-^A^@^@^@^@input1UT^E^@^CM-^^w^^Vux^K^@^A^DM-]^E^@^@^DM-]^E^@^@PK^E^F^@^@^@^@^A^@^A^@L^@^@^@D^@^@^@^@^@
$ cat -v input2.zip
PK^C^D
^@^@^@^@^@.}NGM-<M-^Sn^H^D^@^@^@^D^@^@^@^F^@^\^@input2UT ^@^CM-'w^^V[x^^Vux^K^@^A^DM-]^E^@^@^DM-]^E^@^@def
PK^A^B^^^C
^@^@^@^@^@.}NGM-<M-^Sn^H^D^@^@^@^D^@^@^@^F^@^X^@^@^@^@^@^A^@^@^@M-$M-^A^@^@^@^@input2UT^E^@^CM-'w^^Vux^K^@^A^DM-]^E^@^@^DM-]^E^@^@PK^E^F^@^@^@^@^A^@^A^@L^@^@^@D^@^@^@^@^@
完善的脚本“test.py”:
read_file1 = "input1.zip"
read_file2 = "input2.zip"
write_file = "output"
padding_size = 50
with open(write_file, "ab") as file3:
with open(read_file1, "rb") as file1:
data = file1.read()
file3.write(data)
while padding_size > 0:
file3.write(b'\x00')
padding_size -= 1
with open(read_file2, "rb") as file2:
data = file2.read()
file3.write(data)
输出:
$ python test.py
$ cat -v output
PK^C^D
^@^@^@^@^@)}NGNM-^AM-^HG^D^@^@^@^D^@^@^@^F^@^\^@input1UT ^@^CM-^^w^^V[x^^Vux^K^@^A^DM-]^E^@^@^DM-]^E^@^@abc
PK^A^B^^^C
^@^@^@^@^@)}NGNM-^AM-^HG^D^@^@^@^D^@^@^@^F^@^X^@^@^@^@^@^A^@^@^@M-$M-^A^@^@^@^@input1UT^E^@^CM-^^w^^Vux^K^@^A^DM-]^E^@^@^DM-]^E^@^@PK^E^F^@^@^@^@^A^@^A^@L^@^@^@D^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@PK^C^D
^@^@^@^@^@.}NGM-<M-^Sn^H^D^@^@^@^D^@^@^@^F^@^\^@input2UT ^@^CM-'w^^V[x^^Vux^K^@^A^DM-]^E^@^@^DM-]^E^@^@def
PK^A^B^^^C
^@^@^@^@^@.}NGM-<M-^Sn^H^D^@^@^@^D^@^@^@^F^@^X^@^@^@^@^@^A^@^@^@M-$M-^A^@^@^@^@input2UT^E^@^CM-'w^^Vux^K^@^A^DM-]^E^@^@^DM-]^E^@^@PK^E^F^@^@^@^@^A^@^A^@L^@^@^@D^@^@^@^@^@
$ ls -l
total 24
-rw-r--r-- 1 foo bar 4 Oct 14 15:41 input1
-rw-r--r-- 1 foo bar 166 Oct 14 15:45 input1.zip
-rw-r--r-- 1 foo bar 4 Oct 14 15:41 input2
-rw-r--r-- 1 foo bar 166 Oct 14 15:45 input2.zip
-rw-r--r-- 1 foo bar 382 Oct 14 15:58 output
-rw-r--r-- 1 foo bar 406 Oct 14 15:58 test.py
注意事项:
文档——在这种情况下是https://docs.python.org/2/tutorial/inputoutput.html——有很好的建议,而且通常先花一点额外的时间来理解它们是非常明智的。
例如,搜索“读取”,您会看到file.read() 读取整个文件,大小参数是可选的。那是一个不那么可动的部分——除非你真的必须,否则不要指定尺寸,因为你可能会错误地指定它。
在阅读文档时,您会看到推荐使用“开放式”语法——这有助于使代码更易于阅读,这通常有助于调试和维护。
搜索“flush”,实际上你根本找不到它——没有必要。谷歌“Python 刷新文件”,你会发现更详细的确认和解释“刷新”的用例是什么。这是另一个需要移除的活动部分。
因此我修改了上面的代码。
最后,总是花时间制作简单/小型的测试数据,就像我在这里所做的那样。它足够小,您可以看到整个输入文件和整个生成的输出文件,并且可以直观地确认它们没有损坏。此外,使用ls -l 可以看到(输出文件的大小)=(输入1 的大小)+(输入2 的大小)+ 填充。
现在,我们将何去何从?
此答案提供了可实现您既定目标的确认代码。 (耶!)当然,您可能仍然有错误 - 但即使是这样,现在您有一个参考点,您可以使用它来进一步调查您自己的复制案例,看看它有什么不同。 (如果确实不同,请随时发布一个新问题,使用您自己的测试数据、完整的可运行脚本以及您用来确定输出已损坏的方法。)