2015-12-04 4 views
1

Я хотел бы прочитать некоторые файлы из tarball и сохранить его в новом tarball. Это код, который я написал.Python: tarfile stream

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?

ответ

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

Смежные вопросы