gpt4 book ai didi

python - 如何将 'print' 输出重定向到文件?

转载 作者:IT老高 更新时间:2023-10-28 12:29:14 24 4
gpt4 key购买 nike

我想使用 Python 将打印重定向到 .txt 文件。我有一个 for 循环,当我想将 all 输出重定向到一个文件时,它将 print 我的每个 .bam 文件的输出。所以我试着说:

f = open('output.txt','w')
sys.stdout = f

在我的脚本的开头。但是我在 .txt 文件中一无所获。我的脚本是:

#!/usr/bin/python

import os,sys
import subprocess
import glob
from os import path

f = open('output.txt','w')
sys.stdout = f

path= '/home/xxx/nearline/bamfiles'
bamfiles = glob.glob(path + '/*.bam')

for bamfile in bamfiles:
filename = bamfile.split('/')[-1]
print 'Filename:', filename
samtoolsin = subprocess.Popen(["/share/bin/samtools/samtools","view",bamfile],
stdout=subprocess.PIPE,bufsize=1)
linelist= samtoolsin.stdout.readlines()
print 'Readlines finished!'

那么问题是什么?除了这个 sys.stdout 还有其他方法吗?

我需要我的结果看起来像:

Filename: ERR001268.bam
Readlines finished!
Mean: 233
SD: 10
Interval is: (213, 252)

最佳答案

最明显的方法是打印到文件对象:

with open('out.txt', 'w') as f:
print('Filename:', filename, file=f) # Python 3.x
print >> f, 'Filename:', filename # Python 2.x

但是,重定向标准输出也适用于我。像这样的一次性脚本可能没问题:

import sys

orig_stdout = sys.stdout
f = open('out.txt', 'w')
sys.stdout = f

for i in range(2):
print('i = ', i)

sys.stdout = orig_stdout
f.close()

从 Python 3.4 开始,有一个简单的上下文管理器可用于执行此操作in the standard library :

from contextlib import redirect_stdout

with open('out.txt', 'w') as f:
with redirect_stdout(f):
print('data')

从外壳本身外部重定向是另一种选择,通常更可取:

./script.py > out.txt

其他问题:

脚本中的第一个文件名是什么?我没有看到它初始化。

我的第一个猜测是 glob 没有找到任何 bamfile,因此 for 循环没有运行。检查文件夹是否存在,并在脚本中打印出 bamfile。

另外,使用 os.path.join and os.path.basename操作路径和文件名。

关于python - 如何将 'print' 输出重定向到文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7152762/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com