2015-12-04 44 views
1

我想從tarball中讀取一些文件並將其保存到新的tarball中。 這是我寫的代碼。Python:tarfile流

archive = 'dum/2164/archive.tar' 

# Read input data. 
input_tar = tarfile.open(archive, 'r|') 
tarinfo = input_tar.next() 
input_tar.close() 

# Write output file. 
output_tar = tarfile.open('foo.tar', 'w|') 
output_tar.addfile(tarinfo) 
output_tar.close() 

不幸的是,輸出壓縮包是沒有好處:

$ tar tf foo.tar 
./1QZP_A--2JED_A--not_reformatted.dat.bz2 
tar: Truncated input file (needed 1548288 bytes, only 1545728 available) 
tar: Error exit delayed from previous errors. 

任何線索如何閱讀和使用Python的飛行寫tar包?

回答

1

好吧,所以這是我設法做到這一點。

archive = 'dum/2164/archive.tar' 

# Read input data. 
input_tar = tarfile.open(archive, 'r') 
tarinfo = input_tar.next() 
fileobj = input_tar.extractfile(tarinfo) 

# Write output file. 
output_tar = tarfile.open('foo.tar', 'w') 
output_tar.addfile(tarinfo, fileobj) 

input_tar.close() 
output_tar.close() 
+2

請注意,您仍然可以使用'r和'w |'模式,以便數據是流式而不是整個tarfile讀入內存/磁盤。 – Yuval