python输入输出重定向_如何使用python将'print'输出重定向到文件?

本文讨论了在编程中如何有效地处理文件I/O,建议在必要时才更改stdout目的地,并提倡一次性收集所有数据再写入文件以减少错误可能性。通过示例代码展示了如何使用Python的`subprocess`模块处理多个BAM文件,以及如何将数据批量写入文件,以提高程序的安全性和效率。
摘要由CSDN通过智能技术生成

你可能不喜欢这个答案,但我认为这是正确的答案 . 除非绝对必要,否则不要更改你的stdout目的地(也许你正在使用一个只输出到stdout的库?显然不是这里的情况) .

我认为,作为一个好习惯,您应该提前准备数据作为字符串,然后打开您的文件并立即编写整个文件 . 这是因为输入/输出操作是打开文件句柄的时间越长,此文件发生错误的可能性就越大(文件锁定错误,i / o错误等) . 只需在一次操作中完成所有操作就可以确定何时出错 .

这是一个例子:

out_lines = []

for bamfile in bamfiles:

filename = bamfile.split('/')[-1]

out_lines.append('Filename: %s' % filename)

samtoolsin = subprocess.Popen(["/share/bin/samtools/samtools","view",bamfile],

stdout=subprocess.PIPE,bufsize=1)

linelist= samtoolsin.stdout.readlines()

print 'Readlines finished!'

out_lines.extend(linelist)

out_lines.append('\n')

然后当你完成每个列表项的一行收集"data lines"时,你可以用一些 '\n' 字符加入它们,使整个事物可输出;甚至可以将输出语句包装在 with 块中,以增加安全性(即使出现问题也会自动关闭输出句柄):

out_string = '\n'.join(out_lines)

out_filename = 'myfile.txt'

with open(out_filename, 'w') as outf:

outf.write(out_string)

print "YAY MY STDOUT IS UNTAINTED!!!"

但是,如果要写入大量数据,则 could 一次写入一个数据 . 我没有't think it'与您的申请相关,但这里是替代方案:

out_filename = 'myfile.txt'

outf = open(out_filename, 'w')

for bamfile in bamfiles:

filename = bamfile.split('/')[-1]

outf.write('Filename: %s' % filename)

samtoolsin = subprocess.Popen(["/share/bin/samtools/samtools","view",bamfile],

stdout=subprocess.PIPE,bufsize=1)

mydata = samtoolsin.stdout.read()

outf.write(mydata)

outf.close()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值