将行写入python文件
我有一个非常简单的python脚本,它运行一个用户定义函数(hetero),将序列(文本字符串)连接到非常大的文件上,一次两个序列(行)。无论如何,正如我写的,它会打印到屏幕上,但我想把所有输出都写到一个文件中将行写入python文件,python,Python,我有一个非常简单的python脚本,它运行一个用户定义函数(hetero),将序列(文本字符串)连接到非常大的文件上,一次两个序列(行)。无论如何,正如我写的,它会打印到屏幕上,但我想把所有输出都写到一个文件中 f = open ("new", "r") while True: line1 = f.readline() line1a = line1.split() line2 = f.readline() line2a =line2.split() if
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
这只是将脚本的结果打印到终端。因此,我尝试将结果(从print命令“line1a[1]+..”)写入另一个打开以供写入的文件(附加到脚本末尾):
但这当然行不通。但我不明白为什么…我需要打开文件与文件一起写入以便读取,这样它就在While循环之外了吗?需要技巧的是,脚本在整个文件中一次读取两行,每次在一行中打印ID信息和序列——我想将所有这些结果打印到一个文件中
我确信这是一个简单的修复,但我并不经常使用python,而且总是发现文件系统I/o很难处理 每次打开要写入的文件时,它都会被截断。如果要追加,可以在开始时将其打开并保持打开状态,或者改为在追加模式下打开(
a
而不是w
)
此外,您还应使用with
语句:
with open('new', 'r') as f, open('out.txt', 'w') as out:
while True:
...
这将在块结束后为您自动调用close
您还可以清理“读取一对行并拆分它们”代码。而不是,而为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
,否则它会立即将整个文件读入内存 每次打开要写入的文件时,它都会被截断。如果要追加,可以在开始时将其打开并保持打开状态,或者改为在追加模式下打开(a
而不是w
)
此外,您还应使用with
语句:
with open('new', 'r') as f, open('out.txt', 'w') as out:
while True:
...
这将在块结束后为您自动调用close
您还可以清理“读取一对行并拆分它们”代码。而不是,而为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
,否则它会立即将整个文件读入内存 您正在使用此代码
out_file = open ("out.txt", "w")
out_file.write(line1a[1]+"_"+line1a[0],tri)
out_file.close()
out_file = open ("out.txt", "w")
[while ...]
out_file.close()
在每次迭代中。注意“w”标志:这意味着您将在每次迭代时再次打开文件,并从一开始就覆盖它。如果您想附加到它,可以使用标志“a”
但还有更多:这个代码
out_file = open ("out.txt", "w")
out_file.write(line1a[1]+"_"+line1a[0],tri)
out_file.close()
out_file = open ("out.txt", "w")
[while ...]
out_file.close()
应该在
while
循环之外,因为您只需要打开和关闭此文件一次。您正在使用此代码
out_file = open ("out.txt", "w")
out_file.write(line1a[1]+"_"+line1a[0],tri)
out_file.close()
out_file = open ("out.txt", "w")
[while ...]
out_file.close()
在每次迭代中。注意“w”标志:这意味着您将在每次迭代时再次打开文件,并从一开始就覆盖它。如果您想附加到它,可以使用标志“a”
但还有更多:这个代码
out_file = open ("out.txt", "w")
out_file.write(line1a[1]+"_"+line1a[0],tri)
out_file.close()
out_file = open ("out.txt", "w")
[while ...]
out_file.close()
应该在
while
循环之外,因为您只需要打开和关闭此文件一次。不确定您将文件放在哪里
代码,但您可能将其放在循环中,并且每次都会打开和关闭。试试像这样的东西
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)
编辑你会注意到我使用上下文打开了文件,我很喜欢这样,因为你不必担心以后关闭它,而且我似乎更清楚文件打开了多长时间不确定你把你的
文件放在哪里
代码,但你可能会把它放在循环中,每次都会打开和关闭。试试像这样的东西
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)
编辑您会注意到我是使用上下文打开文件的,我非常喜欢这样做,因为您不必担心以后关闭它,而且我似乎更清楚文件打开的时间如果您像以下方式打开文件,则只能在循环中打开文件:
out_file = open ("out.txt", "a")
注意“a”表示追加模式
如果使用“w”打开它,它将在循环的每次迭代中被覆盖
您可以检查此项以了解更多信息。只有在如下方式打开文件时,才能在循环中打开该文件:
out_file = open ("out.txt", "a")
注意“a”表示追加模式
如果使用“w”打开它,它将在循环的每次迭代中被覆盖
如果您不喜欢python文件I/O
,可以查看此项以了解更多信息。:(
,您还可以使用shell将控制台输出重定向到一个文件。而不是python my_program.py
执行python my_program.py>out.txt
。这样您就可以保持打印语句不变。在循环之前打开输出文件,在循环中写入,在循环之后关闭如果您不喜欢python文件I/O:(
,您还可以使用shell将控制台输出重定向到文件。而不是python my_program.py
执行python my_program.py>out.txt
。这样您就可以保持打印语句的原样。在循环之前打开输出文件,在循环中写入,在循环之后关闭