如何解决临时打开文件以使用其内容作为输入:with-statement 还是重定向 sys.stdin?
例如,假设我想编写一个函数,从 .txt
文件获取一些基本输入,比如一些数字,然后我想在另一个 .txt
文件上打印这些数字乘以 2 .
我被教导我可以导入 sys
并将 sys.stdin
和 sys.stdout
重定向到这些文件,例如
import sys
def multiply(filein,fileout):
global stdin
global stdout
origin=sys.stdin #saving the original stdin and stdout
origout=sys.stdout
sys.stdin=open(filein,'r')
sys.stdout=open(fileout,'w')
for line in sys.stdin:
nlist = [float(num) for num in line.split()] #the line is Now split and each number is converted to float
for num in nlist:
sys.stdout.write((f'{num*2} ')) #each number gets multiplied by 2 and converted back to string
sys.stdout.write('\n') #just to keep each line divided
sys.stdin.close()
sys.stdout.close()
sys.stdin=origin
sys.stdout=origout
一切正常,但后来我意识到我正在导入一个库,将标准输入和标准输出重定向到正确的文件,只是为了立即将它们重定向回原来的状态。
那时我想到了 with
语句。这是完全相同的函数,但我使用的是 with
而不是整个 stdin
和 stdout
重定向想法。
def multiply(filein,fileout):
with open(filein,'r') as fin,open(fileout,'w') as fout:
for line in fin:
nlist = [float(num) for num in line.split()]
for num in nlist:
fout.write((f'{num*2} '))
fout.write('\n')
在我看来,它看起来不那么笨重。
我想知道为什么我更喜欢第一个版本而不是第二个版本的主要原因是什么(如果有的话)。谢谢。
解决方法
我想知道为什么我更喜欢第一个版本而不是第二个版本的主要原因是什么(如果有的话)。
我想不出任何。
with
上下文管理器正是为了摆脱第一个示例中的所有样板代码。另外,如果出现错误,它会释放资源,这是第一个示例所没有的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。