将行写入文件python

时间:2015-10-09 15:06:23

标签: python

我在python中有一个非常简单的脚本,它运行一个用户定义的函数(异类),它将序列(文本字符串)连接在一起非常大的文件,2个序列(行)。无论如何,正如我所写,它打印到屏幕上,但我想将所有输出写入单个文件。

f = open ("new", "r")
while True:
    line1 = f.readline()
    line1a = line1.split()
    line2 = f.readline()
    line2a =line2.split()
    if not line2: break

       tri="".join ([hetero(b1, b2) for (b1, b2) in zip(line1a[2], line2a[2])])

       print line1a[1]+"_"+line1a[0],tri

这只是向终端打印脚本的结果。所以我试着把结果(从打印命令“line1a [1] + .....”)写到另一个打开写入的文件(附加到脚本的末尾):

out_file = open ("out.txt", "w")
out_file.write(line1a[1]+"_"+line1a[0],tri)
out_file.close()

但当然它不起作用。我不明白为什么虽然......我是否需要打开文件一起写入文件进行读取,以便它的外部循环?棘手的是脚本在整个文件中一次读取两行,并且每次都将ID信息和序列打印在一行中 - 我想将所有这些结果打印到单个文件中。

这是一个简单的修复我确定,但我不经常使用python,并且总是发现文件系统i / o很难处理。

4 个答案:

答案 0 :(得分:3)

每次打开文件进行写入都会被截断。如果您想要追加,可以在开头打开它并保持打开状态,或者改为以追加模式打开(a而不是w)。

此外,您应该使用with声明:

with open('new', 'r') as f, open('out.txt', 'w') as out:
    while True:
        ... 

这将在块结束后自动为您调用close

你也可以清理你的"读一对线并将它们分开"码。而不是while True:

from itertools import izip
pairs = ((l1.split(), l2.split()) for l1, l2 in izip(f, f))
for line1a, line2a in pairs:
    tri = ...

请注意,您要使用izip代替zip,或者只是立即将整个文件读入内存。

答案 1 :(得分:1)

不确定您放置out_file代码的位置,但您可能会将其置于循环中并且每次传递都会打开和关闭。尝试像

这样的东西
with open('out.txt', 'w') as outfile, open("new", "r") as f:
    while True:
        line1 = f.readline()
        line1a = line1.split()
        line2 = f.readline()
        line2a =line2.split()
        if not line2: break

           tri="".join ([hetero(b1, b2) for (b1, b2) in zip(line1a[2], line2a[2])])

           #print line1a[1]+"_"+line1a[0],tri
           out_file.write(line1a[1]+"_"+line1a[0],tri)

编辑您会注意到我使用上下文打开了文件,我很喜欢这个,因为您不必担心以后关闭它,对我来说似乎更清楚文件打开多长时间

答案 2 :(得分:0)

您正在使用此代码

out_file = open ("out.txt", "w")
out_file.write(line1a[1]+"_"+line1a[0],tri)
out_file.close()

每次迭代。注意' w' flag:这意味着您在每次迭代时再次打开文件并从start开始覆盖它。如果您想要附加到它,您可以使用标记' a'。

但还有更多:此代码

out_file = open ("out.txt", "w")
[while ...]
out_file.close()

应该在while循环之外,因为您只需要打开和关闭此文件一次。

答案 3 :(得分:0)

如果你打开它,你只能打开循环内的文件:

out_file = open ("out.txt", "a")

注意附加模式的“a”。

如果使用“w”打开它,它将在循环的每次迭代时被覆盖。

您可以查看此Python files reference以了解详情。