【问题标题】:Python: output contents of for loop to a file - currently outputting last row onlyPython:将for循环的内容输出到文件-当前仅输出最后一行
【发布时间】:2017-10-28 11:41:50
【问题描述】:

我有一个看起来像我想转置的文件:

ID_1 S1 S2 S3
SNP1 1 0 1
SNP2 2 1 0
SNP3 1 0 1

我制作了以下脚本:

#!/usr/bin/python

#Script to transpose a large file

import os
import sys

with open(sys.argv[1],'r') as f:
    m=[]
    for line in f:
        m.append(line.strip().split(" "))
    for row in zip(*m):
    result = " ".join(row)
    with open('transposed.txt','w') as output:
        output.write(result)

对于如何将此输出保存到新文件,我有点迷茫。我可以写:

python script.py file_to_transpose.txt > transposed_file.txt

但我想在脚本中找到一种方法。 预期的输出是:

ID_1 SNP1 SNP2 SNP3
S1 1 2 1
S2 0 1 0
S3 1 0 1

但是,我当前的脚本只允许我查看获取最后一行

S3 1 0 1

【问题讨论】:

  • 发布预期结果
  • 任何基本的 Python 教程都会告诉您如何写入文件,请说明您的问题到底是什么。

标签: python redirect


【解决方案1】:

写入文件的一般方式是这样的:

with open('outputfile.txt', 'w') as output:
    output.write('some string')

如果你在你的脚本中这样做,并用output.write(" ".join(row)) 替换最后的打印语句,你应该得到你想要的结果,除非我完全误解了你。

编辑:问题已完全改变,可能基于我回答的上述部分。我将尝试在这里回答新问题:

现在的问题是每次写入文件时都要重新打开文件,这会创建一个新文件并删除旧文件。因此,您只会打印最后一行。只打开文件一次并多次写入,如下所示:

#!/usr/bin/python

#Script to transpose a large file

import os
import sys

with open(sys.argv[1],'r') as f, open('transposed.txt','w') as output:
    m=[]
    for line in f:
        m.append(line.strip().split(" "))
    for row in zip(*m):
    result = " ".join(row)
    output.write(result)

如果您绝对需要多次打开文件(例如,如果您多次运行整个脚本并需要继续处理相同的输出),请以追加模式而不是写入模式打开它:

with open('transposed.txt', 'a') as output:
    output.write('This line will be appended at the end of the file\n')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-10
    • 1970-01-01
    • 1970-01-01
    • 2022-12-13
    • 2020-11-22
    • 2010-12-13
    • 2021-06-23
    相关资源
    最近更新 更多