Python 临时打开一个文件以将其内容用作输入:是使用语句还是重定向sys.stdin?
比如说,我想写一个函数,从Python 临时打开一个文件以将其内容用作输入:是使用语句还是重定向sys.stdin?,python,stdout,stdin,with-statement,sys,Python,Stdout,Stdin,With Statement,Sys,比如说,我想写一个函数,从.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
.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')
在我看来,它不那么笨重
我想知道为什么我更喜欢第一个版本而不是第二个版本的主要原因是什么(如果有的话)。多谢各位
我想知道为什么我更喜欢第一个版本而不是第二个版本的主要原因是什么(如果有的话)
我想不出有什么
使用
上下文管理器的可以精确地去除第一个示例中的所有锅炉板代码。此外,如果出现错误,它会释放资源,这是第一个示例所没有的。第一个版本可用于将信息导入外部脚本(可能的限制)。第二个版本完全是蟒蛇式的。第二个(更简单)在您的演示中更好。第一个版本更通用(扩展功能)。