我想使用 Python 将打印重定向到 .txt 文件。我有一个 for
循环,它将 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)
原文由 LookIntoEast 发布,翻译遵循 CC BY-SA 4.0 许可协议
最明显的方法是打印到一个文件对象:
但是,重定向 stdout 也适用于我。像这样的一次性脚本可能没问题:
自 Python 3.4 以来 ,标准库中 提供了一个简单的上下文管理器来执行此操作:
从 shell 本身外部重定向是另一种选择,通常更可取:
其他问题:
脚本中的第一个文件名是什么?我没有看到它已初始化。
我的第一个猜测是 glob 没有找到任何 bamfile,因此 for 循环没有运行。检查该文件夹是否存在,并在脚本中打印出 bamfile。
此外,使用 os.path.join 和 os.path.basename 来操作路径和文件名。