python write string directly to tarfile

后端 未结 7 1276
-上瘾入骨i
-上瘾入骨i 2020-12-08 13:28

Is there a way to write a string directly to a tarfile? From http://docs.python.org/library/tarfile.html it looks like only files already written to the file system can be a

相关标签:
7条回答
  • 2020-12-08 14:03

    The solution in Python 3 uses io.BytesIO. Be sure to set TarInfo.size to the length of the bytes, not the length of the string.

    Given a single string, the simplest solution is to call .encode() on it to obtain bytes. In this day and age you probably want UTF-8, but if the recipient is expecting a specific encoding, such as ASCII (i.e. no multi-byte characters), then use that instead.

    import io
    import tarfile
    
    data = 'hello\n'.encode('utf8')
    info = tarfile.TarInfo(name='foo.txt')
    info.size = len(data)
    
    with tarfile.TarFile('test.tar', 'w') as tar:
        tar.addfile(info, io.BytesIO(data))
    

    If you really need a writable string buffer, similar to the accepted answer by @Stefano Borini for Python 2, then the solution is to use io.TextIOWrapper over an underlying io.BytesIO buffer.

    import io
    import tarfile
    
    textIO = io.TextIOWrapper(io.BytesIO(), encoding='utf8')
    textIO.write('hello\n')
    bytesIO = textIO.detach()
    info = tarfile.TarInfo(name='foo.txt')
    info.size = bytesIO.tell()
    
    with tarfile.TarFile('test.tar', 'w') as tar:
        bytesIO.seek(0)
        tar.addfile(info, bytesIO)
    
    0 讨论(0)
提交回复
热议问题