在python中写入文件

在python中写入文件,python,Python,我一直收到python中的索引错误。通过读取文件并简单地打印所需的输出,我使代码正常工作,但现在我正在尝试将输出写入文件。当我试图写它时,我似乎在索引方面遇到了问题。我尝试了两种不同的方法,我留下了一个注释。无论哪种方式,我都会不断出现索引错误。 编辑原始错误可能是由eclipse中的错误引起的,但在服务器上运行时,会出现新问题* 我现在可以让它运行并生成一个.txt文件的输出,但是它只打印一个输出 with open("blast.txt") as blast_output: for line

我一直收到python中的索引错误。通过读取文件并简单地打印所需的输出,我使代码正常工作,但现在我正在尝试将输出写入文件。当我试图写它时,我似乎在索引方面遇到了问题。我尝试了两种不同的方法,我留下了一个注释。无论哪种方式,我都会不断出现索引错误。 编辑原始错误可能是由eclipse中的错误引起的,但在服务器上运行时,会出现新问题*

我现在可以让它运行并生成一个.txt文件的输出,但是它只打印一个输出

with open("blast.txt") as blast_output:
for line in blast_output:
    subFields = [item.split('|') for item in line.split()]
    #transId = str(subFields[0][0])
    #iso = str(subFields[0][1])
    #sp = str(subFields[1][3])
    #identity = str(subFields[2][0])
    out = open("parsed_blast.txt", "w")
    #out.write(transId + "\t" + iso + "\t" + sp + "\t" + identity)
    out.write((str(subFields[0][0]) + "\t" + str(subFields[0][1]) + "\t" + str(subFields[1][3]) + "\t" + str(subFields[2][0])))
    out.close()


IndexError: list index out of range
输入文件如下所示:

c0_g1_i1|m.1    gi|74665200|sp|Q9HGP0.1|PVG4_SCHPO      100.00  372     0       0       1       372     1       372     0.0       754
c1002_g1_i1|m.801       gi|1723464|sp|Q10302.1|YD49_SCHPO       100.00  646     0       0       1       646     1       646     0.0      1310
c1003_g1_i1|m.803       gi|74631197|sp|Q6BDR8.1|NSE4_SCHPO      100.00  246     0       0       1       246     1       246     1e-179    502
c1004_g1_i1|m.804       gi|74676184|sp|O94325.1|PEX5_SCHPO      100.00  598     0       0       1       598     1       598     0.0      1227
c1005_g1_i1|m.805       gi|9910811|sp|O42832.2|SPB1_SCHPO       100.00  802     0       0       1       802     1       802     0.0      1644
c1006_g1_i1|m.806       gi|74627042|sp|O94631.1|MRM1_SCHPO      100.00  255     0       0       1       255     47      301     0.0       525
预期产量

c0_g1_i1    m.1 Q9HGP0.1    100.00
c1002_g1_i1 m.801   Q10302.1    100.00
c1003_g1_i1 m.803   Q6BDR8.1    100.00
c1004_g1_i1 m.804   O94325.1    100.00
c1005_g1_i1 m.805   O42832.2    100.00
c1006_g1_i1 m.806   O94631.1    100.00

我的输出只是其中一行而不是所有的行

我建议您将整个文件写入一个字符串

with open("blast.txt", 'r') as fileIn:
      data = fileIn.read()
然后处理数据

data = func(data)
然后写出来归档

  with open('bast_out.txt','w') as fileOut:
      fileOut.write()

正如@H Doucet所说,将整个内容写入一个字符串,然后使用它。将open()函数保留在循环之外,这样它只打开和关闭文件一次,并确保以“append”的形式打开。我还清理了out.write()函数。不需要将这些列表项指定为字符串,它们已经是字符串了。并在每行末尾添加一个换行符(“\n”)

with open("blast.txt") as f:
    blast_output = f.read()

out = open("parsed_blast.txt", "a")
for line in blast_output.split("\n"):
    subFields = [item.split('|') for item in line.split()]
    out.write("{}\t{}\t{}\t{}\n".format(subFields[0][0], subFields[0][1],
                                        subFields[1][3], subFields[2][0]))

out.close()

您正在一次又一次地覆盖同一个文件。在for循环外部打开文件或在append模式下打开文件
'a'

您需要包括输入文件的示例首先检查子字段的形状。您将发现出现此错误的原因。写入文件不是问题,而是
子字段的
变量;IndexError意味着您的一个索引根本不存在,它可能是
子字段[1][3]
子字段[2][0]
。您应该通过注释的尝试猜到了,python总是指明错误所在的准确行。@JamieLeigh在您写入文件时打印
[]
是什么意思?请显示出现错误的确切代码,因为您编写的代码与您的示例输入一起适用于我您正在一次又一次地覆盖同一文件。在for循环外部打开文件,或在append模式下打开文件
'a'