有没有办法直接写一个字符串到tarfile?从http://docs.python.org/library/tarfile.html看来,只有已经写入文件系统的文件才可以添加。python直接写tar到tarfile
29
A
回答
28
我会说这是可能的,通过玩TarInfo e TarFile.addfile传递一个StringIO作为fileobject。
很粗糙,但工程
import tarfile
import StringIO
tar = tarfile.TarFile("test.tar","w")
string = StringIO.StringIO()
string.write("hello")
string.seek(0)
info = tarfile.TarInfo(name="foo")
info.size=len(string.buf)
tar.addfile(tarinfo=info, fileobj=string)
tar.close()
14
由于斯特凡诺指出的那样,你可以使用TarFile.addfile
和StringIO
。
import tarfile, StringIO
data = 'hello, world!'
tarinfo = tarfile.TarInfo('test.txt')
tarinfo.size = len(data)
tar = tarfile.open('test.tar', 'a')
tar.addfile(tarinfo, StringIO.StringIO(data))
tar.close()
你可能要填写的tarinfo
(例如mtime
,uname
等)以及其他领域。
2
你必须使用TarInfo对象和addfile方法而不是通常的添加方法:
from StringIO import StringIO
from tarfile import open, TarInfo
s = "Hello World!"
ti = TarInfo("test.txt")
ti.size = len(s)
tf = open("testtar.tar", "w")
tf.addfile(ti, StringIO(s))
2
在我的情况,我想从现有的tar文件阅读,一些数据添加到内容,并写入它到一个新的文件。例如:
for ti in tar_in:
buf_in = tar.extractfile(ti)
buf_out = io.BytesIO()
size = buf_out.write(buf_in.read())
size += buf_out.write(other data)
buf_out.seek(0)
ti.size = size
tar_out.addfile(ti, fileobj=buf_out)
处理目录和链接需要额外的代码。
2
仅供备查:
StringIO对象具有.len属性。
没有必要寻求(0)和做len(foo.buf)
没有必要保持整个字符串做len()on,或上帝禁止,自己做会计。
(也许它没有在OP写的时间。)
6
我发现这个寻找如何在Django服务于刚刚在内存中的tgz存档创建的,可能别人会找到我的代码有用:
import tarfile
from io import BytesIO
def serve_file(request):
out = BytesIO()
tar = tarfile.open(mode = "w:gz", fileobj = out)
data = 'lala'.encode('utf-8')
file = BytesIO(data)
info = tarfile.TarInfo(name="1.txt")
info.size = len(data)
tar.addfile(tarinfo=info, fileobj=file)
tar.close()
response = HttpResponse(out.getvalue(), content_type='application/tgz')
response['Content-Disposition'] = 'attachment; filename=myfile.tgz'
return response
相关问题
- 1. 如何将文件追加到tar文件使用python tarfile模块?
- 2. 如何直接将内容写入tar文件?
- 3. 使用python中的tarfile lib获取tar文件中的单个文件
- 4. Python tarfile - 检查tar文件是否存在于外部(即已经被提取)
- 5. 用python3中的tarfile模块从tar中提取文本文件
- 6. Python tarfile比Linux命令慢
- 7. Python TarFile与bz2数据
- 8. 直接写Serilog到ElasticSearch
- 9. 直接写入到Amazon S3
- 10. 用Python直接写入加密文件
- 11. 使用python直接写入实木复合地板到HDFS
- 12. 如何直接写ostringstream到cout
- 13. 路易吉写文件直接到S3
- 14. 写jpeg文件直接到lmdb
- 15. 直接写自由日志到graylog
- 16. 的Python:直接添加到图形
- 17. 直接python输出到linux文件
- 18. Python的tar文件大小
- 19. 的Python:在tar文件
- 20. JNI:直接缓冲读写
- 21. NSURLConnection直接写入文件
- 22. 直接写入ASCII值
- 23. 如何直接写入JTextArea?
- 24. grep输出到TAR
- 25. 如何直接写入Python中的请求正文
- 26. 直接在Azure Datalake中将Python数据框写入CSV文件
- 27. swift - 直接编写二进制文件,如Python
- 28. 直接链接到GSP
- 29. 直接链接到SonarQube Widget
- 30. Jenkins脚本tar:写入错误
你可以说StringIO.StringIO(“你好”)来代替写作和寻求。 – misha 2014-03-02 01:13:04
是类似于python3和bytesIO对象的过程吗? – proteneer 2014-05-18 07:43:15