首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Python流中维护多个流位置

如何在Python流中维护多个流位置
EN

Stack Overflow用户
提问于 2019-05-21 15:25:22
回答 1查看 339关注 0票数 0

我想在一个流中使用两个流指针,并将这两个指针放在不同的位置。如何制作第一个流的副本,以便该副本不会从该时间点镜像第一个流的状态?

特别是,我对io.BytesIO()类型的流感兴趣。

代码语言:javascript
复制
import io

stream1 = open("Input.jpg", "rb")

stream2 = stream1

print('A', stream1.tell(), stream2.tell())

stream1.seek(10)

print('B', stream1.tell(), stream2.tell())

我的目标是查看

代码语言:javascript
复制
A 0 0
B 10 0

然而,我看到了

代码语言:javascript
复制
A 0 0
B 10 10

@varela感谢您的回复。不幸的是,当流没有文件描述符时,这不能很好地工作(如果我们不打开文件,就会发生这种情况)。例如,代替stream1=open("Input.jpg","rb")

stream1 = io.BytesIO() image.save(stream1,format='JPEG')

对如何处理这个案例有什么建议吗?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2019-05-21 15:34:18

你可以打开文件两次,比如

代码语言:javascript
复制
stream1 = open("Input.jpg", "rb")
stream2 = open("Input.jpg", "rb")

然后他们将是独立的。当您执行stream2 = stream1时,您只复制对象引用,这不会创建任何新对象。您还需要记住关闭这两个文件对象。

通常不需要文件描述的副本。但是,可以使用低级系统操作,但我不建议这样做,除非您真的有这样的用例,例如:

代码语言:javascript
复制
import os

# return integer file handle
fd1 = os.open("Input.jpg", os.O_BINARY | os.O_RDONLY)
fd2 = os.dup(fd1)

# you can convert them to file objects if required.
stream1 = os.fdopen(fd1, 'rb')
stream2 = os.fdopen(fd2, 'rb')

下面是一些使用os.dup有意义的用例:dup2 / dup - why would I need to duplicate a file descriptor?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56233177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档