1

これは Python に関する私の最初の投稿であり、私はそれに慣れていません。

残念ながら、OS として Windows を使用する必要があります。私はpython.orgのpython 3.3.2を使用しています。

FILE.txt を追加して、メモリから tar ファイルを作成しようとしています。

from io import StringIO
import tarfile

archive_files = []

data = ["DATA1 "]
data.append("DATA2 ")
archive_files.append(("FILE.txt", "\n".join(data)))

tar = tarfile.open ("file.tar", "w:tar")
for name, data in archive_files:
    info = tarfile.TarInfo(name)
    info.size = len(data)
    tar.addfile(info, StringIO(data))
tar.close()

これはエラーです:

Traceback (most recent call last):
  File "<string>", line 420, in run_nodebug
  File "C:\home\rs94036\src\python\testTar.py", line 14, in <module>
    tar.addfile(info, StringIO(data))
  File "C:\Python33\lib\tarfile.py", line 1957, in addfile
    copyfileobj(fileobj, self.fileobj, tarinfo.size)
  File "C:\Python33\lib\tarfile.py", line 274, in copyfileobj
    dst.write(buf)
TypeError: 'str' does not support the buffer interface

問題が 14 行目にあることはわかっていますが、何が問題なのかわかりません。このコードは Linux、特に pacman (ArchLinux パッケージ マネージャーの自動テスト) で使用されます。

誰かが私を助けることができますか?

ありがとう、レナン

4

1 に答える 1

2

bytesではなく tar ファイルに書き込む必要があるため、tar ファイルstrに書き込む前にデータをエンコードする必要があります。(選択したエンコーディング、私utf-8は例で使用しました)

問題のある行:

info.size = len(data)
tar.addfile(info, StringIO(data))

次のようになります。

encoded = data.encode('utf-8')
info.size = len(encoded)
tar.addfile(info, BytesIO(encoded))
于 2013-09-18T12:43:12.120 に答える